Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

Super Coding Addict

Ch11. 컬렉션 프레임 워크 - 제네릭 프로그래밍 본문

JAVA 문법

Ch11. 컬렉션 프레임 워크 - 제네릭 프로그래밍

밍응애 2021. 3. 4. 21:24

* 제네릭 프로그래밍

- 변수의 선언이나 메서드의 매개변수를 하나의 참조 자료형이 아닌 여러 자료형으로 변환할 수 있도록 하는 프로그래밍 

- 실제 사용되는 참조 자료형으로의 변환은 컴파일러가 검증하므로 안정적인 프로그래밍 방식

 

=> 자료형 매개변수

 

* <T extends 클래스>

- T 대신에 사용될 자료형을 '제한'하기 위해 사용

 

* 제네릭 메서드

- 메서드의 매개 변수를 자료형 매개 변수로 사용하는 메서드

- 일반 클래스에서도 사용 가능

- 메서드 내의 자료형 매개변수는 지역변수처럼 메서드 내에서만 유효

 

- 예제

# GenericPrinter

=> 3D프린터, 재료는 Plastic이나 Powder

 

 

package ch11.generic;

public abstract class Material {

	public abstract void doPrinting();
}

--> 3D프린터의 재료로 아무거나 쓸 수 없도록 제한을 하기 위해 만든 material(재료) 추상클래스

--> 이 클래스를 상속받는 재료클래스는 doPrinting() 추상메서드를 implements

 

package ch11.generic;

public class Plastic extends Material{

	public String toString() {
		return "재료는 Plastic 입니다";
	}

	@Override
	public void doPrinting() {
		System.out.println("Plastic으로 프린팅 합니다");
		
	}
}

--> Plastic 클래스는 Material 클래스 상속

 

package ch11.generic;

public class Powder extends Material{

	public String toString() {
		return "재료는 Powder 입니다";
	}

	@Override
	public void doPrinting() {
		System.out.println("Powder로 프린팅 합니다");
		
	}
}

--> Powder 클래스는 Material 클래스 상속

 

package ch11.generic;

public class GenericPrinter<T extends Material>{

	private T material;

	public T getMaterial() {
		return material;
	}

	public void setMaterial(T material) {
		this.material = material;
	}
	
	public String toString() {
		return material.toString();
	}
	
	public void printing() {
		material.doPrinting();
	}
}

--> 자료형 매개변수 T는 Material을 상속

 

package ch11.generic;

public class GenericPrinterTest {

	public static void main(String[] args) {
		
		GenericPrinter<Powder> powderPrinter = new GenericPrinter<>();
		Powder powder = new Powder();
		powderPrinter.setMaterial(powder);
		System.out.println(powderPrinter);
		
		GenericPrinter<Plastic> plasticPrinter = new GenericPrinter<>();
		Plastic plastic = new Plastic();
		plasticPrinter.setMaterial(plastic);
		System.out.println(plasticPrinter);
		
		powderPrinter.printing();
		plasticPrinter.printing();
		
		GenericPrinter printer = new GenericPrinter(); //Object로 취급

	}

}

--> 제네릭 클래스로 인스턴스를 만들 때에는 자료형 매개변수 T에 해당하는 클래스 객체를 생성한 뒤 setter로 넣어줌