모든 클래스의 부모(생략되어 있다.)
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