πŸ“š μ±… μ†Œκ°œν•˜κΈ°

λ‚΄κ°€ μ‚¬μš©ν•œ μžλ°”μ™„μ „μ •λ³΅ μ±… 링크!
γ„΄ κΉ€λ™ν˜• μ§€μŒ, μ΄μ§€μŠ€νΌλΈ”λ¦¬μ‹±

 

 

 

: 좜처 예슀24 ν™ˆνŽ˜μ΄μ§€

 

 

 

이 책을 κ³ λ₯΄κ²Œ 된 μ΄μœ λŠ” 친ꡬ의 μΆ”μ²œμ΄μ—ˆλ‹€. ꡉμž₯히 κΌΌκΌΌν•˜κ²Œ μ ν˜€μžˆμ–΄ μ΄ν•΄ν•˜κΈ° μ‰½λ‹€λŠ” 이유둜 μΉœκ΅¬λŠ” 이 책을 κ³¨λžλ‹€κ³  ν–ˆλ‹€. λ‚˜λ„ κ·Έλž˜μ„œ κ·Έλƒ₯ 따라샀닀. μ‹€μ œλ‘œ 책을 μ‚΄νŽ΄λ³΄λ‹ˆ ꡉμž₯히 κΌΌκΌΌν•˜κ²Œ μ •λ¦¬λ˜μ–΄μžˆλ‹€. λ‹€λ₯Έ 책은 λ³Έ 적이 μ—†μ–΄ 비ꡐ가 λΆˆκ°€ν•˜μ§€λ§Œ, λ‚΄ μƒκ°μœΌλ‘  처음 μžλ°”λ₯Ό κ³΅λΆ€ν•œλ‹€λ©΄ 이 책을 가지고 μΆ©λΆ„νžˆ λ”°λΌκ°ˆ 수 μžˆμ„ λ“― ν•˜λ‹€. λͺ¨λ‘λ“€ ν™”μ΄νŒ…!!

 

 

🐰

 


 

 

βœ”οΈ   상속_ 307p

 

 μƒμ†

λΆ€λͺ¨ 클래슀의 멀버(ν•„λ“œ, λ©”μ„œλ“œ, μ΄λ„ˆ 클래슀)λ₯Ό λ‚΄λ €λ°›μ•„ μžμ‹ 클래슀 내뢀에 ν¬ν•¨μ‹œν‚€λŠ” μžλ°” 문법 μš”μ†Œ

class Human {
     String name;
     int age;
     void eat() {}
     void sleep() {}
}

class Student extends Human {
    int studentID;
    void goToSchool() {}
}
Human h = new Human();
h.name = "κΉ€μžλ°”";
h.age = 1;
h.eat;

Student s = new Student();
s.name = "κΉ€μ™„μ „";
s.age = 2;
s.studentID = 12;
클래슀λ₯Ό 상속할 λ•ŒλŠ” extends ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λ©°, 클래슀λͺ… λ‹€μŒμ— extends λΆ€λͺ¨ 클래슀λͺ…(extends Human)으둜 ν‘œκΈ°ν•˜λ©΄ λœλ‹€. Student ν΄λž˜μŠ€λŠ” Human ν΄λž˜μŠ€μ— μ—†λŠ” ν•„λ“œμ™€ λ©”μ„œλ“œλ₯Ό μΆ”κ°€μ μœΌλ‘œ κ΅¬μ„±ν•˜λ©΄ λ˜λŠ”λ°, 이λ₯Ό 톡해 μ½”λ“œμ˜ 쀑볡성을 μ œκ±°ν•˜λŠ” μž₯점이 μžˆλ‹€. λ˜ν•œ '학생은 학생이닀.' 말고 '학생은 μ‚¬λžŒμ΄λ‹€.' λΌλŠ” 말이 μΆ”κ°€λ˜λ©΄μ„œ λ‹€ν˜•μ  ν‘œν˜„μ΄ κ°€λŠ₯해진닀. λ‹€ν˜•μ„±μ΄λž€, 1개의 객체λ₯Ό μ—¬λŸ¬ 가지 λͺ¨μ–‘μœΌλ‘œ ν‘œν˜„ν•˜λŠ” 것이닀.  'μ‚¬λžŒμ€ 학생이닀.' λΌλŠ” 말을 μ‚΄νŽ΄λ³΄λ©΄ μ΄λŠ” μ˜³μ§€ μ•Šλ‹€λŠ” κ±Έ μ•Œ 수 μžˆλ‹€. 상속이 λ‹€ν˜•μ„±μ΄λž€ μž₯점을 κ°€μ§€μ§€λ§Œ 'μžμ‹ ν΄λž˜μŠ€λŠ” λΆ€λͺ¨ ν΄λž˜μŠ€λ‹€.' λΌλŠ” 말이 μ„±λ¦½λ˜μ§€ μ•Šμ„ 수 μžˆμœΌλ‹ˆ μœ μ˜ν•΄μ•Όν•œλ‹€.

Student ν΄λž˜μŠ€λŠ” ν•„λ“œ 3개, λ©”μ„œλ“œ 3개λ₯Ό κ°€μ§€κ²Œ λœλ‹€.

 

 

Q. μ½”λ“œμ˜ 쀑볡 제거λ₯Ό μœ„ν•΄ 상속을 μ‚¬μš©ν•˜λŠ” 것이 더 효율적일까?

A.
그것은 μ•„λ‹ˆλ‹€. μ½”λ“œμ˜ 쀑볡을 μ œκ±°ν•˜λŠ” 것보닀 상속을 μ‚¬μš©ν•˜λŠ” 것이 ν”„λ‘œμ νŠΈλ₯Ό 더 λ³΅μž‘ν•˜κ²Œ λ§Œλ“€ 수 μžˆλ‹€. 였히렀 κ°„λ‹¨ν•œ μ½”λ“œμ˜ 경우 각각의 ν΄λž˜μŠ€μ— λ„£μ–΄ μž‘μ„±ν•˜λŠ” 것이 효율적이고 λΉ λ₯Ό 수 μžˆλ‹€.

 

 

 

 λ‹€μ€‘ 상속

class B {
    int data = 3;
}

class C {
    int data = 4
}

class A extends B, C {
    ...
}
A a = new A();
System.print.out(a.data);
μžλ°”λŠ” 닀쀑상속을 μ§€μ›ν•˜μ§€ μ•ŠλŠ”λ‹€. κ·Έ μ΄μœ λŠ” 클래슀 B와 클래슀 C에 data ν•„λ“œλ₯Ό ν¬ν•¨ν•˜κ³  μžˆμœΌλ‹ˆ A μž…μž₯μ—μ„œ μ–΄λŠ dataλ₯Ό 가져와야할지 ν˜Όλ™ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. 즉 λͺ¨ν˜Έμ„±μ„ λ°œμƒμ‹œν‚€κΈ° λ•Œλ¬Έμ— 닀쀑상속을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

 

 

 

상속할 λ•Œμ˜ λ©”λͺ¨λ¦¬ ꡬ쑰

class A {
    int m;
    void abc() {}
}

class B extends A {
    int n;
    void bcd() {}
}
B b = new B();
μžμ‹ ν΄λž˜μŠ€μ™€ λΆ€λͺ¨ ν΄λž˜μŠ€λŠ” JVM에 μ˜ν•΄ λ‘œλ”©λ˜λŠ”λ°, 이것을 클래슀 λ‘œλ”©μ΄λΌκ³  ν•œλ‹€. 이제 ν΄λž˜μŠ€κ°€ λ‘œλ”©λ˜λ©΄ λ©”μ„œλ“œ μ˜μ—­μ— ν΄λž˜μŠ€μ— λŒ€ν•œ 정보λ₯Ό μ €μž₯ν•œλ‹€. κ·Έ ν›„ μ‹€μ œ κ°μ²΄λŠ” νž™ λ©”λͺ¨λ¦¬μ— μƒμ„±λœλ‹€. μ²˜μŒμ— λΆ€λͺ¨ 클래슀 객체λ₯Ό μƒμ„±ν•˜κ³  κ·Έ ν›„ μžμ‹ ν΄λž˜μŠ€μ—μ„œ μΆ”κ°€ν•œ ν•„λ“œμ™€ λ©”μ„œλ“œκ°€ 객체에 μΆ”κ°€λœλ‹€. 즉, μžμ‹ 클래슀 객체의 내뢀에 λΆ€λͺ¨ 클래슀 객체가 ν¬ν•¨λœλ‹€.

μ°Έμ‘° λ³€μˆ˜ bλŠ” B νƒ€μž…μœΌλ‘œ 선언됐닀. 그렇기에 B νƒ€μž… κ°μ²΄λ§Œμ„ 가리킬 수 μžˆλŠ”λ°, 객체 B μ•ˆμ—λŠ” λΆ€λͺ¨ ν΄λž˜μŠ€λ„ ν•¨κ»˜ μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ—  μžμ‹ 클래슀 κ°μ²΄μ—μ„œ λΆ€λͺ¨ 클래슀의 멀버λ₯Ό μ‚¬μš©ν•  수 있게 λœλ‹€.

 

 

 

 μƒμ„±μžμ˜ 상속 μ—¬λΆ€

class A {
    A() {
    }
}

class B extends A {
}
μƒμ„±μžλŠ” μžμ‹ 클래슀인 B ν΄λž˜μŠ€μ— μƒμ†λ˜μ§€ μ•ŠλŠ”λ‹€. κ·Έ μ΄μœ λŠ” μƒμ„±μžλ₯Ό 클래슀 Bκ°€ μƒμ†ν•˜κ²Œλ˜λ©΄ 클래슀λͺ…κ³Ό μƒμ„±μžλͺ…이 λ‹¬λΌμ§€λ©΄μ„œ μƒμ„±μžκ°€ 될 수 μ—†λ‹€. λ©”μ„œλ“œκ°€ 되기 μœ„ν•΄μ„  리턴 νƒ€μž…μ„ μ •ν•΄μ•Όν•˜λŠ”λ°, 리턴 νƒ€μž…λ„ μ—†μ–΄μ„œ λ©”μ„œλ“œκ°€ 될 수 μ—†λ‹€. κ²°κ΅­ μžμ‹ ν΄λž˜μŠ€κ°€ μƒμ„±μžλ₯Ό λ°›κ²Œλ˜λ©΄ 였λ₯˜κ°€ λ°œμƒν•˜κ²Œλœλ‹€.

 

 

 

 


 

 

 

 

βœ”οΈ   μ—…μΊμŠ€νŒ…κ³Ό λ‹€μš΄μΊμŠ€νŒ…_ 319p

 

 μΊμŠ€νŒ…

λ“±ν˜Έλ₯Ό μ€‘μ‹¬μœΌλ‘œ 항상 μ™Όμͺ½κ³Ό 였λ₯Έμͺ½μ˜ μžλ£Œν˜•μ΄ μΌμΉ˜ν•΄μ•Όν•˜λŠ”λ°, μžλ£Œν˜•μ΄ λ‹€λ₯Έ 경우 νƒ€μž…μ„ λ³€ν™”ν•΄μ£ΌλŠ” 것을 μ˜λ―Έν•œλ‹€.

 

 μ—…μΊμŠ€νŒ…

λ²”μœ„κ°€ 쒁은 μͺ½μ—μ„œ 넓은 μͺ½μœΌλ‘œ μΊμŠ€νŒ…λœλ‹€. (μžμ‹ ν΄λž˜μŠ€μ—μ„œ λΆ€λͺ¨ 클래슀둜 λ³€ν™˜)

class A {}
class B extends A {}
class C extends B {}
B b1 = new B();
A a1 = b1;

C c2 = new C();
B b2 = (B) c2;
μ—…μΊμŠ€νŒ…μ€ μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ νƒ€μž…μ„ λ³€ν™˜ν•΄μ€€λ‹€. κ·Έλž˜μ„œ A a1 = (A) b1;으둜 적지 μ•Šμ•„λ„ (A)λ₯Ό μ»΄νŒŒμΌλŸ¬κ°€ μ•Œμ•„μ„œ μΆ”κ°€ν•œλ‹€. 클래슀 AλŠ” 클래슀 Bλ₯Ό μƒμ†ν•œλ‹€. 클래슀 BλŠ” 클래슀 Cλ₯Ό μƒμ†ν•œλ‹€. 그러면 b1은 Aνƒ€μž…μœΌλ‘œ λ³€ν™˜ν•  수 μžˆλ‹€. 그리고 CλŠ” B와 A둜 νƒ€μž…μ„ λ³€ν™˜ν•  수 μžˆλ‹€.

μ’€ 더 μ‰½κ²Œ μ„€λͺ…ν•˜μžλ©΄ A ν΄λž˜μŠ€κ°€ μ‚¬λžŒ, B ν΄λž˜μŠ€κ°€ 학생이라고 κ°€μ •ν•œλ‹€λ©΄ '학생은 μ‚¬λžŒμ΄λ‹€.'λŠ” μ–Έμ œλ‚˜ λ§žλŠ” λ§μ΄λ‹ˆ μ—…μΊμŠ€νŒ…μ΄ κ°€λŠ₯ν•  것이닀.

 

 

λ‹€μš΄μΊμŠ€νŒ…

λ²”μœ„κ°€ 넓은 μͺ½μ—μ„œ 쒁은 μͺ½μœΌλ‘œ μΊμŠ€νŒ…λœλ‹€. (λΆ€λͺ¨ ν΄λž˜μŠ€μ—μ„œ μžμ‹ 클래슀둜 λ³€ν™˜)

class A {}
class B extends A {}
class C extends B {}
A a1 = new A();
B b1 = (B) a1;

A a2 = new B();
B b2 = (B) a2;
C c2 = (C) a2;
Aνƒ€μž…μΈ μƒμ„±μž a1은 Bνƒ€μž…μœΌλ‘œ λ‹€μš΄ μΊμŠ€νŒ… 될 수 μ—†λ‹€. μ™œλƒν•˜λ©΄ 클래슀 AλŠ” 클래슀 Bλ‚˜ Cλ₯Ό μƒμ†ν•˜κ³  μžˆμ§€ μ•Šλ‹€. κ·ΈλŸ¬λ―€λ‘œ B b1= (B) a1;은 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

μƒμ„±μž a2λ₯Ό μ‚΄νŽ΄λ³΄μž. μ—¬κΈ°μ„œ μ°Έμ‘° λ³€μˆ˜ νƒ€μž…κ³Ό μ‹€μ œ 객체 νƒ€μž…μ΄ λ™μΌν•˜μ§€ μ•Šλ‹€. μ°Έμ‘° λ³€μˆ˜ νƒ€μž…μ€ Aκ°€ 되고 μ‹€μ œ 객체 νƒ€μž…μ€ Bκ°€ λœλ‹€. λ©”λͺ¨λ¦¬λ‘œ μ‚΄νŽ΄λ³΄λ©΄ BλŠ” A 클래슀λ₯Ό μƒμ†ν•˜λ―€λ‘œ νž™ λ©”λͺ¨λ¦¬μ— 이미 Bνƒ€μž… μ•ˆμ— Aνƒ€μž…μ΄ μžˆλŠ” ν˜•νƒœμΌ 것이닀. κ²°κ΅­ μ‹€μ œ 객체 νƒ€μž…μ€ Bκ°€ λ˜λ©΄μ„œ, a2λŠ” B 객체λ₯Ό κ°€λ¦¬ν‚€κ²Œ λœλ‹€. κ·ΈλŸ¬λ―€λ‘œ a2λŠ” Bνƒ€μž…μœΌλ‘œ λ‹€μš΄ μΊμŠ€νŒ…μ΄ κ°€λŠ₯ν•˜λ‹€.

그러면 c2λ₯Ό μ‚΄νŽ΄λ³΄μž. 클래슀 BλŠ” 클래슀 Cλ₯Ό μƒμ†ν•˜μ§€ μ•ŠλŠ”λ‹€. νž™ λ©”λͺ¨λ¦¬μ— Cνƒ€μž… 객체가 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€. (λ§Œλ“€μ–΄μ§„ 적이 μ—†κΈ° λ•Œλ¬Έμ—) 그렇기에 ClassCastException을 λ°œμƒμ‹œν‚¨λ‹€.

결둠적으둜 λ‹€μš΄μΊμŠ€νŒ…μ€ μ°Έμ‘° λ³€μˆ˜ νƒ€μž…λ³΄λ‹€ μ‹€μ œ 객체 νƒ€μž…μ— 쀑점을 λ‘”λ‹€. μ‹€μ œ 객체 νƒ€μž…μ΄ μ–΄λŠ 클래슀λ₯Ό μƒμ†ν•˜λŠ”μ§€μ— 따라 λ‹€μš΄μΊμŠ€νŒ…μ˜ μ—¬λΆ€κ°€ κ²°μ •λœλ‹€.

 

 

Q. μ°Έμ‘° λ³€μˆ˜ νƒ€μž…κ³Ό μ‹€μ œ 객체 νƒ€μž…μ˜ 차이점은?

A.
μ°Έμ‘° λ³€μˆ˜ νƒ€μž…μ€ 컴파일 μ‹œμ μ— 영ν–₯을 λ―ΈμΉœλ‹€. μ°Έμ‘° λ³€μˆ˜ νƒ€μž…μ— 따라 호좜 κ°€λŠ₯ν•œ λ©”μ„œλ“œμ™€ μ ‘κ·Ό κ°€λŠ₯ν•œ ν•„λ“œμ— μ œν•œμ΄ μƒκΈ°λŠ”λ°, 정적 λ°”μΈλ”©μœΌλ‘œ λ™μž‘ν•œλ‹€. μƒμœ„ νƒ€μž…μœΌλ‘œ μ„ μ–Έν•  경우 μžμ‹ 클래슀의 객체λ₯Ό μ°Έμ‘°ν•  수 μžˆλ‹€. (λ‹€ν˜•μ„±)
new ν‚€μ›Œλ“œλ₯Ό 톡해 μƒμ„±λœ 객체 νƒ€μž…μœΌλ‘œ λŸ°νƒ€μž„ μ‹œμ μ— 영ν–₯을 λ―ΈμΉœλ‹€. μ‹€μ œ 객체 νƒ€μž…μ— 따라 λ™μž‘μ— 영ν–₯을 λ―ΈμΉ˜λŠ”λ° 동적 λ°”μΈλ”©μœΌλ‘œ λ™μž‘ν•œλ‹€. (μΊμŠ€νŒ…)

 

 

 


 

 

 

βœ”οΈ   νƒ€μž…에 λ”°λ₯Έ 차이점_323p (λ‚΄μš© 닀름)

μ‹€μ œ 객체 νƒ€μž…

λŸ°νƒ€μž„ μ‹œμ μ— 영ν–₯을 μ£Όλ©°, λ™μ λ°”μΈλ”©μœΌλ‘œ λ™μž‘ν•œλ‹€.

 

Cat νƒ€μž…, Cat μƒμ„±μž

interface Animal {
    void sound();
}

class Cat implements Animal {
    @Override
    public void sound() {
        System.out.println("Meow");
    }

    public void scratch() {
        System.out.println("Cat is scratching");
    }
}

public class Main {
    public static void main(String[] args) {
        Cat a2 = new Cat();
        a2.sound();   
        a2.scratch(); 
    }
}
μƒμ„±μž a2λŠ” μ°Έμ‘° λ³€μˆ˜ νƒ€μž…κ³Ό μ‹€μ œ 객체 νƒ€μž…μ΄ Cat으둜 λ™μΌν•˜λ‹€. 이런 경우 a2λŠ” Cat에 μžˆλŠ” λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄μ•Όν•œλ‹€. 그렇기에 sound 값은 "Meow"κ°€ 될 것이닀. scratchλŠ” 잘 μ‹€ν–‰λ˜μ–΄ "Cat is scratching"으둜 좜λ ₯될 것이닀.

 

 

Animal νƒ€μž…, Cat μƒμ„±μž

interface Animal {
    void sound(); 
}

class Cat implements Animal {
    @Override
    public void sound() {
        System.out.println("Meow");
    }

    public void scratch() {
        System.out.println("Cat is scratching");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal a2 = new Cat();
        a2.sound();

        a2.scratch();
    }
}
μ˜€λ²„λΌμ΄λ”©λœ λ©”μ„œλ“œλ₯Ό μ‚΄νŽ΄λ³Ό 것이닀. μΈν„°νŽ˜μ΄μŠ€μΈ Animal을 μƒμ†ν•˜λŠ” Cat ν΄λž˜μŠ€λŠ” sound( ) λ©”μ„œλ“œλ₯Ό κ°€μ‘Œμ§€λ§Œ, Animal μΈν„°νŽ˜μ΄μŠ€λ„ λ˜‘κ°™μ΄ sound( ) λ©”μ„œλ“œκ°€ μžˆλ‹€.

μ°Έμ‘° λ³€μˆ˜ νƒ€μž…μ€ Animal이고 μ‹€μ œ 객체 νƒ€μž…μ€ Cat인 μƒμ„±μž a2λŠ” sound( )λ©”μ„œλ“œμ™€ scratch( )λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜κ³ μž ν•œλ‹€. μ΄λ•Œ sound λ©”μ„œλ“œλŠ” μ˜€λ²„λΌμ΄λ”©μ΄ λ˜μ–΄ Cat의 sound λ©”μ„œλ“œκ°€ ν˜ΈμΆœλ˜μ–΄ (동적바인딩) "Meow"κ°€ 좜λ ₯될 것이닀. 그런데 Animal ν΄λž˜μŠ€μ—λŠ” scratch λ©”μ„œλ“œκ°€ μ‘΄μž¬ν•˜μ§€ μ•Šμ•˜λ‹€. 그렇기에 Animal νƒ€μž…μΈ a2λŠ” scratch λ©”μ„œλ“œλŠ” 뢈러올 수 μ—†λ‹€.

 

 

 

 μ°Έμ‘° λ³€μˆ˜ νƒ€μž…

컴파일 μ‹œμ μ— 영ν–₯을 μ£Όλ©°, 정적 λ°”μΈλ”©μœΌλ‘œ λ™μž‘ν•œλ‹€.

interface Animal {
    void sound(); 
}

class Cat implements Animal {
    @Override
    public void sound() {
        System.out.println("Meow");
    }

    public void scratch() {
        System.out.println("Cat is scratching");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal a2 = new Cat(); 
        a2.sound();

        Cat a = (Cat) a2;
        a.scratch();
    }
}
μœ„μ˜ μ½”λ“œμ—μ„œ a2.scratchλŠ” 였λ₯˜κ°€ λ°œμƒν–ˆλ‹€. κ·Έλ ‡λ‹€λ©΄ 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•Šκ²Œ ν•˜κΈ° μœ„ν•΄μ„œλŠ” μƒμ„±μž a2λ₯Ό λ‹€μš΄μΊμŠ€νŒ… ν•΄μ£Όλ©΄ λœλ‹€. a2κ°€ Animal νƒ€μž…μ„ 가지고 μžˆμ–΄μ„œ Animal에 μžˆλŠ” λ©”μ„œλ“œλ§Œ μ‹€ν–‰κ°€λŠ₯ν–ˆλ‹€. 그러면 a2λ₯Ό Cat νƒ€μž…μœΌλ‘œ λ°”κΏ”μ£Όλ©΄ λœλ‹€. μ°Έμ‘° λ³€μˆ˜ νƒ€μž…μ„ λ³€κ²½ν•˜κΈ° μœ„ν•΄ λ‹€μš΄μΊμŠ€νŒ…μ„ 해쀬닀. 그러면 scratch λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

 

 

 


 

 

βœ”οΈ   instanceof_ 326p

instanceof

μΊμŠ€νŒ… κ°€λŠ₯ μ—¬λΆ€λ₯Ό λΆˆλ¦¬μ–Έ νƒ€μž…μœΌλ‘œ 확인할 수 μžˆλ‹€.

C c = new C();

System.out.println(c instanceof A);
[ μ°Έμ‘° λ³€μˆ˜ instanceof νƒ€μž… ] ν˜•μ‹μœΌλ‘œ 쓰이며, μΊμŠ€νŒ…μ΄ κ°€λŠ₯ν•˜λ©΄ true둜 λΆˆκ°€λŠ₯ν•˜λ©΄ false둜 확인할 수 μžˆλ‹€. instanceof ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ 상속 κ΄€κ³„λ‚˜ 객체λ₯Ό λ§Œλ“  μƒμ„±μžλ₯Ό 직접 ν™•μΈν•˜μ§€ μ•Šκ³ λ„ μΊμŠ€νŒ… κ°€λŠ₯ μ—¬λΆ€λ₯Ό 확인할 수 μžˆλ‹€.

+ Recent posts