[JAVA]58.Object &Generic 기본기

손영민's avatar
Mar 09, 2025
[JAVA]58.Object &Generic 기본기
모든 클래스의 부모(생략되어 있다.)

1.Object타입 일치

타입 일치, instanceof 다운캐스팅
package ex17; class Dog { String name = "강아지"; } class Cat { String name = "고양이"; } public class Ob01 { static void callName(Object u) { if (u instanceof Dog) { //메모리에 dog가 떳는지 확인하고 다운캐스팅 Dog d = (Dog) u; System.out.println(d.name); } else if (u instanceof Cat) { //메모리에 Cat가 떳는지 확인하고 다운캐스팅 Cat c = (Cat) u; System.out.println(c.name); } } public static void main(String[] args) { callName(new Dog()); callName(new Cat()); } }

2.Generic 기본기

new할때 타입을 결정할수 있다.
package ex17; class Box<T> { T date; } public class Ge01 { public static void main(String[] args) { Box<String> b = new Box(); //new할때 타입이 결정되고 타입을 아무것도 안정하면 오브젝트로 출력 b.date = "hello"; Box<Integer> i = new Box<Integer>(); i.date = 10; } }

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

package ex17; class Acom<T> { void save(T date) { System.out.println(date + "가 저장되었습니다."); } } class Bcom { void save(Object date) { System.out.println(date + "가 저장되었습니다."); } } //타입일치 ? 동적바인딩이 더좋은거 아닌가? //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("문자열"); } }
 

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 FCom { Object date; void save(Object u) { date = u; } } class KCom<T> { T date; void save(T u) { date = u; } } //왜 제네릭이 유리한가? -> 다운캐스팅이 필요없다. public class Ge02 { public static void main(String[] args) { FCom F1 = new FCom(); F1.save(new Teacher()); Teacher T1 = (Teacher) F1.date; System.out.println(T1.getName()); // System.out.println(F1.date); //toString 생략되어서 출력 KCom<Student> K1 = new KCom(); K1.save(new Student()); System.out.println(K1.date); } }
 

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; // 속성 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

sson17