[자바 제네릭 & Wrapper] 70. Object

김건우's avatar
Feb 18, 2025
[자바 제네릭 & Wrapper] 70. Object
💡
모든 클래스의 부모 (생략 되어있다)

1. Object 타입 일치

💡
다운 캐스팅, inatance of
package ex17; class Dog { String name = "강아지"; } class Cat { String name = "고양이"; } public class Ob01 { static void callName(Object u) { if (u instanceof Dog) { Dog d = (Dog) u; System.out.println(d.name); } else if (u instanceof Cat) { Cat c = (Cat) u; System.out.println(c.name); } } public static void main(String[] args) { callName(new Dog()); callName(new Cat()); } }

2. 제네릭 기본기

💡
new 할 때 타입을 결정할 수 있다.
package ex17; class Box<T> { T data; } // new 할 때 자료형의 타입을 결정할 수 있다 public class Ge01 { public static void main(String[] args) { Box<String> b = new Box(); b.data = "Hello"; Box<Integer> i = new Box(); i.data = 10; } }

3. 오브젝트로 저장하든, 제네릭으로 저장하든 무슨 차이가 있는거지?

package ex17; class ACom<T> { void save(T data) { System.out.println(data + "가 저장되었습니다"); } } class BCom { void save(Object data) { System.out.println(data + "가 저장되었습니다"); } } // 타입일치? 동적바인딩이 더 좋은 거 아닌가? // 1. object를 쓸 수 밖에 없는 경우 ( // 2. 제네릭을 써야 되는 경우 (무조건 제네릭을 저장하는 게 유리하다) public class Ob02 { public static void main(String[] args) { ACom<String> ac = new ACom(); ac.save("문자열"); BCom bc = new BCom(); bc.save(10); } }

4. 데이터 저장은 제네릭이 무조건 유리하다

💡
new 할 수 있다면 !!
package ex17; class Teacher extends Object { private String name = "선생님"; public String getName() { return name; } } class Student extends Object { private String name = "학생"; public String getName() { return name; } } class FCup { Object data; void save(Object u) { data = u; } } class KCup<T> { T data; void save(T u) { data = u; } } // 왜 제네릭이 유리한가? -> 다운 캐스팅이 필요없다. public class Ge02 { public static void main(String[] args) { FCup f1 = new FCup(); f1.save(new Teacher()); Teacher t1 = (Teacher) f1.data; System.out.println(t1.getName()); KCup<Student> k1 = new KCup(); System.out.println(k1.data.getName()); } }

5. new 할 수 없다면 오브젝트로 저장

💡
가령 싱글톤 패턴일 때!!
미리 클래스를 메모리에 올려놔야할 때, 무슨 타입이 들어올지 모르겠으면, object 타입으로 저장한다.
package ex17; class Banana extends Object { private String name = "바나나"; public String getName() { return name; } } class Apple extends Object { private String name = "사과"; public String getName() { return name; } } // 저장소 -> 한개만 ! class Session { private static Session session = new Session(); private Session() { } public static Session getSession() { return session; } private Object attribute; // 속성 property public void setAttribute(Object attribute) { this.attribute = attribute; } public Object getAttribute() { return attribute; } } public class Ob03 { public static void main(String[] args) { Session session = Session.getSession(); session.setAttribute(new Banana()); Banana ob = (Banana) session.getAttribute(); System.out.println(ob.getName()); } }
Share article

gunwoo