Generinc

Jan 03, 2024
Generinc
notion image
class Box<D>{ D data; } public class GenericEx01 { public static void main(String[] args) { Box<String> box1 = new Box(); Box<Integer> box2 = new Box(); box1.data = "1"; box2.data = 1; } }
new할 때 자료형이 결정나기 때문에 static 사용 불가, 랩퍼 클래스로 사용 가능
class Box1{ static Object data; } public class GenericEx02 { public static void main(String[] args) { Box1.data = "1"; Box1.data = 1; } }
static과 Object를 사용하면 자유롭게 자료형 선택 가능
class Dog{ String name; int age; void speak(){ System.out.println("BowWow"); } } class Cat{ String name; int age; void speak(){ System.out.println("naaong"); } } public class GenericEx03 { public static void main(String[] args) { Object[] arr = new Object[2]; arr[0]=new Dog(); arr[1]=new Cat(); Dog d1 = (Dog) arr[0]; Cat c1 = (Cat) arr[1]; d1.speak(); c1.speak(); } }
class는 Object 설계로 만들면 다운캐스팅을 해야하는 번거로움이 생긴다.
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 model = Model.getInstance(); User user = new User(); model.setData(user); User ob = (User) model.getData(); ob.hello(); } }
class Model0<T> { private T data; public T getData() { return data; } public void setData(T data) { this.data = data; } } class User0{ 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) { Model0<User0> model0 = new Model0(); model0.setData(new User0()); User0 user0 = model0.getData(); user0.hello(); } }
Object를 사용해야 하는 경우
미리 만들어져 있는 static은 new 불가능 (사용자가) ⇒ Object, 즉 Generic으로 사용 불가능 = 사용자가 어떤 타입을 사용할 지 모를 경우에 개발자는 object 사용 → 다운 캐스팅으로 코딩
notion image
Share article

from-web-developer