백엔드 개발 공부 일지
Java Basic - 컬렉션 프레임 워크 본문
● 컬렉션 프레임 워크
우리가 사용하는 프로그램은 대부분 데이터를 사ㅏ용하여 구현한다. 메일 시스템은 메일을, 채팅앱은 친구 목록과 채팅 내용등을 관리한다. 프로그램을 실행할 때 데이터를 효율적으로 관리하기 위해 자료구 조를 사용한다. 이 포스트에서는 자료 구조를 구현한 다양한 인터페이스와 클래스를 소개한다.
1. 제네릭
어떤 값이 하나의 참조 자료형이 아닌 여러 참조 자료형을 사용할 수 있도록 프로그래밍 하는 것을 '제네릭 프로그래밍'이라고 한다.
우리가 학습할 컬렉션 프레임워크에서도 많은 부분이 제네릭으로 구현되어 있다.
제네릭 클래스 정의
제네릭에서는 여러 참조 자료형을 사용해야하는 부분에 Object가 아닌 하나의 문자로 표현합니다.
public class GenericPrinter<T> {
private T material;
public void setMaterial(T material){
this.material = material;
}
public T getMaterial(){
return material;
}
}
T는 자료형 매개변수(type parameter)라고 불린다. 나중에 이 클래스를 사용할 때 T위치에 실제 자료형을 지정한다.
클래스의 각 메서드에서는 해당 자료형이 필요한 부분에 모두 T문자를 사용하여 구현한다.
1) 다이아몬드 연산자
Arraylist<String> list = new ArrayList< >( );
2) 자료형 매개변수 T와 static
static 변수의 자료형이나 static 메서드 내부 변수의 자료형으로 T(자료형 매개변수)는 사용할 수 없다.
(제네릭 클래스의 인스턴스 보다 static형이 먼저 생성되기 때문에~)
3) 제네릭에서 자료형 추론하기
지역 변수에 한하여 자료형 추론이 가능하다.(자바 10부터)
아래의 예시는 생성되는 인스턴스를 바탕으로 list 자료형이 ArrayList<String>임을 추론할 수 있다.
(물론 list가 지역변수로 선언되는 경우에만 가능)
var list = new AraayList<String>( );
package generics;
public class GenericPrinterTest {
public static void main(String[] args){
GenericPrinter<Powder> powderPrinter = new GenericPrinter<>();
powderPrinter.setMaterial(new Powder());
// Powder powder = powderPrinter.getMaterial();
System.out.println(powderPrinter);
GenericPrinter<Plastic> plasticPrinter = new GenericPrinter<>();
plasticPrinter.setMaterial(new Plastic());
// Plastic plastic = plasticPrinter.getMaterial();
System.out.println(plasticPrinter);
}
}
재료는 Powder 입니다.
재료는 Plastic입니다.
T 자료형에서 사용할 자료형을 제한하는 <T extends 클래스>
public class GenericPrinter<T extends Material> {
private T material;
...
}
클래스 이름에 <T extends Material>이라고 명시하여 사용할 수 있는 자료형에 제한을 둘 수 있따.
'Java 입문' 카테고리의 다른 글
JAVA Basic - 자바 입출력 (0) | 2022.12.14 |
---|---|
JAVA Basic - 예외처리 (0) | 2022.12.12 |
JAVA Basic - 기본 클래스 (0) | 2022.12.12 |
JAVA Basic - 인터페이스 (0) | 2022.12.08 |
JAVA Basic - 추상 클래스 (0) | 2022.12.08 |