21/06/13 JAVA <제네릭(Generic) 프로그래밍>

yeoni·2021년 10월 26일

JAVA

목록 보기
8/18

제네릭(Generic)

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

자료형 매개변수

여러 참조 자료형으로 대체될 수 있는 부분을 하나의 문자로 표현하는 것

public class Generic<T>{
		private T material;

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

자료형 매개변수 T

Type의 의미로 T를 많이 사용
<>: 다이아몬드 연산자
static키워드는 T를 사용할 수 없음
다이아몬드 연산자 내부에서 자료형은 생략 가능 함
제네릭에서 자료형 추론
ex)

ArrayList<String> List = new ArrayList<String>();
->
var list = new ArrayList<String>();
// var는 명확하지 않으면 사용할 수 없음

예제

package generic;

public class Powder {
	public void doPrinting() {
		System.out.println("Powder 재료를 출력합니다.");

	}

	public String toString() {
		return "재료는 Powder입니다";
	}
}
public class Plastic {
	public void doPrinting() {
		System.out.println("Plastic 재료를 출력합니다");
	}

	public String toString() {
		return "재료는 Plastic 입니다";
	}
}
public class GenericPrinter<T> {
	
	private T material;
	
	public void setMaterial(T material) {
		this.material = material;
}
	public T getMaterial() {
		return material;
		
	}
	public String toString() {
		return material.toString();
		}
}
public class GenericPrinterTest {
public static void main(String[] args) {
	GenericPrinter<Powder> powderPrinter = new GenericPrinter<Powder>();
	powderPrinter.setMaterial(new Powder());
	Powder powder = powderPrinter.getMaterial();
	System.out.println(powderPrinter);
	System.out.println(powder);



	GenericPrinter<Plastic> plasticPrinter = new GenericPrinter<Plastic>();
	plasticPrinter.setMaterial(new Plastic());
	Plastic plastic = plasticPrinter.getMaterial();
	System.out.println(plasticPrinter);
	System.out.println(plastic);
}
}

제네릭에서 대입된 자료형을 명시하지 않는 경우
자료형을 명시하지않고 사용하는 경우 자료형을 명시하라는 경고 표시
반환 형에 따라 강제 형 변환을 해야 함

GenericPrinter<> powderPrinter = new GenericPrinter<>();
	powderPrinter.setMaterial(new Powder());
	Powder powder = (Powder)powderPrinter.getMaterial();
	System.out.println(powderPrinter);

T extends 클래스

T가 사용될 클래스를 제한하기 위해 사용
상위클래스에 정의된 메서드를 공유할 수 있음
상위클래스에서 상속받지 않은 하위 클래스는 프린터 재료로 사용할 수 없다
제네릭 메서드 활용
메서드의 매개변수를 <자료형 매개변수>로 사용하는 경우
자료형 매개변수가 하나 이상인 경우
제네릭 제한 이유
⇒ 구조와 역할을 다시 이해하고 재정리하기!

자료형 매개변수가 두 개인 경우
class GenericMethod 코드 확인하기 ( toString으로 매개변수 두개를 전달받고 출력함)

profile
24시간이 부족한 개발자

0개의 댓글