컬렉션 프레임워크1

1. 제네릭 클래스

  • 변수의 선언, 메서드의 매개변수를 하나의 참조 자료형이 아닌 여러 자료형으로 변환될 수 있도록 프로그래밍하는 것
  • 실제 사용되는 참조 자료형으로의 변환은 컴파일러가 검증하므로 안정적인 프로그래밍 방식
  • 컬렉션 프레임워크에서 많이 사용

2. 제네릭 클래스 정의하기

  • 여러 참조 자료형으로 대체될 수 있는 부분(매개 변수)을 하나의 문자로 표현

  • 예시

public abstract class Material {
	public abstract void doPrinting();
}
//<T extends Material>을 통해 Material 클래스를 상속한 클래스만 제네릭 타입에 입력 가능하도록 제한
public class ThreeDPrinter<T extends Material> { 
	private T material;

	public T getMaterial() {
		return material;
	}

	public void setMaterial(T material) {
		this.material = material;
	}

	@Override
	public String toString() {
		return material.toString();
	}
	
	public void printing() {
		material.doPrinting();
	}
}
public class Plastic extends Material {
	public String toString() {
		return "재료는 Plastic입니다.";
	}

	@Override
	public void doPrinting() {
		System.out.println("Plastic재료로 출력 중입니다.");
	}
}
public class Powder extends Material {
	public String toString() {
		return "재료는 Powder입니다.";
	}

	@Override
	public void doPrinting() {
		System.out.println("Powder재료로 출력 중입니다.");
	}
}
public class Water {
	public String toString() {
		return "재료는 Water입니다.";
	}
}
public class ThreeDPrinterTest {

	public static void main(String[] args) {
		ThreeDPrinter<Powder> printer = new ThreeDPrinter<Powder>();
		printer.setMaterial(new Powder());
		Powder powder = printer.getMaterial();
		System.out.println(printer); //재료는 Powder입니다.
		
		ThreeDPrinter<Plastic> plasticPrinter = new ThreeDPrinter<Plastic>();
		plasticPrinter.setMaterial(new Plastic());
		Plastic plastic = plasticPrinter.getMaterial();
		System.out.println(plasticPrinter); //재료는 Plastic입니다.
		
		// Water 클래스가 Material 클래스를 상속하지 않아 사용 불가
		/*
		ThreeDPrinter<Water> waterPrinter = new ThreeDPrinter<Water>();
		waterPrinter.setMaterial(new Water());
		System.out.println(waterPrinter); //재료는 Water입니다.
		*/
		
		plasticPrinter.printing(); //Plastic재료로 출력 중입니다.
	}

}

3. 자료형 매개변수 T

  • type의 의미로 T를 많이 사용한다
  • 에서 <>는 다이아몬드 연산자라고 한다
  • static 키워드는 T에 사용할 수 없다
  • 다이아몬드 연산자 내부에서 자료형은 생략 가능
ArrayList<String> list = new ArrayList<>();

4. 제네릭 메서드 활용하기

  • 메서드의 매개변수를 자료형 매개변수로 사용하는 경우
  • 자료형 매개 변수가 하나 이상인 경우

태그:

카테고리:

업데이트: