///////
Search

제네릭_조문주

제네릭이란?

컴파일시 타입을 체크해주는 기능
객체의 타입 안정성을 높이고 형변환의 번거로움을 줄여줌

제네릭 클래스의 선언

Object타입 대신 T와 같은 타입변수를 사용
참조변수, 생성자에 T 대신 실제 타입을 지정하면 형변환 생략 가능
// 제네릭 이전의 코드 class Box { Object obj; public void set(Object obj) { this.obj = obj; } public Object get() { return obj;} } public class GenericTest { public static void main(String[] args) { Box1 aBox = new Box1(); Box1 oBox = new Box1(); aBox.set(new Apple()); oBox.set(new Orange()); // aBox.set("apple"); // 컴파일이 잡아내지 못하는 에러 발생 Apple ap = (Apple)aBox.get(); // 형변환 과정이 반드시 필요함 Orange og = (Orange)oBox.get(); // 형변환 과정이 반드시 필요함 } }
Java
복사
// 제네릭 사용 코드 class Box<T> { private T obj; public void set(T obj) { this.obj = obj; } public T get() { return obj; } } public class GenericTest { public static void main(String[] args) { Box<Apple> aBox = new Box<Apple>(); Box<Orange> oBox = new Box<Orange>(); aBox.set(new Apple()); oBox.set(new Orange()); // aBox.set("Apple"); // 이제는 컴파일 에러가 남 Apple ap = aBox.get(); // 형변환 생략 가능 Orange og = oBox.get(); // 형변환 생략 가능 } }
Java
복사
제네릭의 장점 : 타입 안정성, 타입체크 & 형변환 생략 가능

제네릭의 용어

class Box<T> { }
Java
복사

자주 사용하는 타입 매개변수

제네릭 클래스의 제한

class Box<T extends Number> { ... }
Java
복사
→ 제네릭 타입에 extends를 사용하면 특정 타입의 자손들만 대입할 수 있게 제한할 수 있음
interface Box { } class AppleBox<T extends Box> { ... }
Java
복사
→ 인터페이스의 경우에도 extends 사용