제네릭(generic)

[Java] 제네릭 사용법과 오브젝트와 제네릭의 차이점
Jan 03, 2024
제네릭(generic)
제네릭 프로그래밍(generic programming)이란 다양한 종류의 데이터를 처리할 수 있는 클래스와 메소드를 작성하는 기법이다. 다양한 종류의 데이터를 처리할 수 있는 기법은 Object를 이용한 방법과 generic을 이용한 방법이 있다.
 

generic 사용 간단 예제

class Box<T> { // 클래스 옆에 <T>를 해줌으로써 제네릭 사용 T data; // 데이터 타입을 아직 모르므로 T data } public class GenericEx01 { public static void main(String[] args) { Box<String> box1 = new Box(); // new 할때 타입이 결정됨 Box<Integer> box2 = new Box(); // 기본형(int) 말고 랩핑형(Integer) 변수를 사용하여야함. box1.data = "1"; box2.data = 1; } }
new할때 타입이 결정된다는 것은 static에는 적용될 수 없다.
 

static에 적용 하려면? Object 사용

class Box { static Object data; // Object를 이용하면 된다. } public class GenericEx02 { public static void main(String[] args) { Box.data = 1; Box.data = "문자"; } }
 

generic

Object

  • <타입변수> 를 작성하여 어떤 타입의 데이터도 저장하고 전달가능.
  • new할 때 타입을 결정.
  • new가 되지않으면 타입을 결정할 수 없으므로 static에 적용 불가능.
  • 타입 캐스팅이 필요없어 안정성이 높고 코드가 간결함.
 
  • 최상위 클래스인 Object를 사용하면 어떤 타입의 데이터도 저장하고 전달가능.
  • 데이터를 가져올 때마다 적절한 타입으로 다운 캐스팅 해야하는 번거로움이 있다.
  • 잘못된 타입으로 캐스팅하면 런타임 에러 발생.
  • Object를 쓰는 경우는 싱글톤(한번만 new)을 이용할 때 사용.
class Model<T> { private T data; public void setData(T data) {// 생성자 this.data = data; } public T getData() { // getter 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 GenericEx03 { public static void main(String[] args) { Model<User> m = new Model(); m.setData(new User()); User u = m.getData(); u.hello(); } }
 
class Model { // 싱글톤 private static Model instance = new Model(); // getter 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(); } }
 
Share article
RSSPowered by inblog