제네릭

Jan 03, 2024
제네릭

제네릭(Generic) : 다양한 종류의 데이터를 처리할 수 있는 작성 기법
자료형을 구체적으로 적지 않고 기호로 적어 놓는 것
→ 자료형을 매개 변수로 만드는 것
💡
main에서 new해서 객체가 생성될 때 타입이 정해짐
static으로 만들 수 없음 / 타이밍의 문제
 
<> : 다이아몬드
💡
타입을 모를 때 : object 사용
object : 모든 타입을 다 받을 수 있음
 
💡
object의 단점 : 메서드 호출을 못함
다운 캐스팅을 해서 메서드를 호출
어쩔 수 없을 때 object를 사용해야 함(싱클톤 등)
사용자가 new를 한번 밖에 못할 때 사용
= 2차 개발자가 객체를 생성할 수 없을 때
notion image
부모가 메서드를 안 가지고 있기에 오버라이딩도 동적바인딩도 못함
하려면 따로 다운 캐스팅 해야 함
 
벡터가 아니라 동일한 object로 묶으니까 메서드 호출을 못함
다운 캐스팅을 해서 메서드를 호출해야 함
** 벡터 : 동일한 타입

object를 사용한 경우 → 다운 캐스팅


package ex13.example4; class Model { private static Model instance = new Model(); public static Model getInstance() { return instance; } private Model() { } private Object data; public void setData(Object data) { this.data = data; } public Object getData() { return data; } } class User { public int id = 1; public String name = "홍길동"; public String email = "ssar@nate.com"; public void hello() { System.out.println("안녕하세요"); } } public class GenericEx04 { public static void main(String[] args) { Model m = Model.getInstance(); User u = new User(); m.setData(u); User ob = (User) m.getData(); ob.hello(); } }

제네릭을 사용한 경우 → 객체 생성시 타입 부여


package ex13.example5; class Model<T> { private T data; public void setData(T data) { this.data = data; } public T getData() { return data; } } class User { public int id = 1; public String name = "홍길동"; public String email = "ssar@nate.com"; public void hello() { System.out.println("안녕하세요"); } } public class GenericEx05 { public static void main(String[] args) { Model<User> m = new Model(); m.setData(new User()); User u = m.getData(); u.hello(); } }

 
 
10개만 수용 가능 할 때
11번째는 웨이팅이 시작됨
10개를 미리 new해서 준비하는 것 : 제네릭
10개를 하고 가비지 컬렉션이 일어나고 다시 하는것 : object
notion image
 

printArray();


package ex13; public class GenericMethodTest { public static <T> void printArray(T[] array) { for (T element : array) { System.out.printf("%s ", element); } System.out.println(); } public static void main(String[] args) { Integer[] iArray = {10, 20, 30, 40, 50}; Double[] dArray = { 1.1, 1.2, 1.3, 1.4, 1.5}; Character[] cArray = { 'K', 'O', 'R', 'E', 'A'}; printArray(iArray); printArray(dArray); printArray(cArray); } }
notion image

정수 배열, 실수 배열, 문자 배열을 모두 출력할 수 있는 제네릭 메서드
 
Share article

vosw1