본문 바로가기

JAVA/척척학사 스터디

[JAVA] 제네릭(generic), 컬렉션(collection)

제네릭 프로그래밍

기존의 방법

어떤 객체든 참조할 수 있는 Object 참조 변수를 사용

-> 형변환(Casting) 필요

제네릭을 이용한 방법

클래스에 저장하는 데이터의 타입은 객체 생성 시에 결정된다

제네릭 메소드

  • <T> : 타입이 결정되지 않음을 나타냄
  • T : return 자료형, 메소드 사용 시 정해짐

Ex)

정수 배열, 실수 배열, 문자 배열을 모두 출력할 수 있는 제네릭 메소드 printArray()를 작성하여 보자. 

public class GenericMethodTest {
	public static <T> void printArray(T[] array) {
		for (T element : array) {
			System.out.printf("%s ", element);
		}
		System.out.println();
	}
	public static void main(String args[]) {
		Integer[] iArray = { 10, 20, 30, 40, 50 };
		Double[] dArray = { 1.1, 1.2, 1.3, 1.4, 1.5 };
		Character[] cArray = { 'K', 'O', 'R', 'E', 'A' };

		printArray(iArray);
		printArray(dArray);
		printArray(cArray);
	}
}
더보기

10 20 30 40 50 
1.1 1.2 1.3 1.4 1.5 
K O R E A

 

%s 로 모든 객체 출력 가능

모든 객체는 object 클래스 상속받기 때문에 toString 메서드가 존재

 


컬렉션

자바에서 자료구조를 구현한 클래스

 

 

컬렉션의 종류

컬렉션의 특징

  • 제네릭을 사용한다
  • int나 double 같은 기초 자료형은 저장할 수 없다. 클래스만 가능
  • wrapper 클래스인 Integer나 Double은 사용 가능
    • 기초자료형을 저장하면 자동으로 랩퍼 클래스 객체로 변환됨: 오토박싱(auto boxing)

컬렉션 인터페이스 종류

ArrayList

  • 가변 크기의 배열
    • 삽입, 삭제 시 인덱스 자동 관리
  • 배열의 업그레이드 버전
    • 삽입, 삭제가 쉽다
    • 스레드 간 동기화를 하지 않아 Verter 클래스보다 성능이 좋음

ArrayList vs Vector

기본 연산

Set

 

Map

기본연산

큐(Queue)

  • FIFO
  • 큐를 구현한 3개의 클래스가 주어진다.
    • ArrayDeque
    • LinkedList
    • PriorityQueue

우선순위큐

  • 무작위로 삽입되었더라도 정렬된 상태로 원소들을 추출
    • remove()를 호출할 때마다 가장 작은 원소가 추출
  • 히프(heap)를 내부적으로 사용

Collections 클래스

여러 유용한 알고리즘을 제공함

  • 정렬(Sorting)
  • 섞기(Shuffling)
  • 탐색(Searching)

Ex) 정렬

import java.util.*;
 
public class Sort {
       public static void main(String[] args) {
             String[] sample = { "i", "walk", "the", "line" };


             List<String> list = Arrays.asList(sample);	  // 배열을 리스트로 변경


             Collections.sort(list);
             System.out.println(list);
       }
}
더보기

[i, line, the, walk]

 

'JAVA > 척척학사 스터디' 카테고리의 다른 글

[JAVA] 네트워크 프로그래밍  (1) 2023.06.07
[JAVA] 스레드(thread), 람다식(Lambda)  (0) 2023.05.31