π™ΉπšŠπšŸπšŠ

[Java] μƒμ†μ΄λž€ / μžμ‹ν΄λž˜μŠ€ / 포함관계 / 단일 상속 / 닀쀑 상속 / Object 클래슀

ν•΄λ²„λ‹ˆ 2024. 4. 12. 15:14
λ°˜μ‘ν˜•

상속

μƒμ†μ΄λž€

기쑴의 클래슀λ₯Ό μž¬μ‚¬μš©ν•˜μ—¬ μƒˆλ‘œμš΄ 클래슀λ₯Ό μž‘μ„±ν•˜λŠ” 것이닀.



β“μ™œ 써❓

적은 μ–‘μ˜ μ½”λ“œλ‘œ μƒˆλ‘œμš΄ 클래슀 μž‘μ„± κ°€λŠ₯

μ½”λ“œλ₯Ό κ³΅ν†΅μ μœΌλ‘œ 관리할 수 있음 β†’ μ½”λ“œμ˜ μΆ”κ°€ 및 변경이 맀우 용이



class Parent {
    int age;
}

class Child extends Parent {
    void play() {
        System.out.println("λ†€μž~");
    }
}

μžμ† ν΄λž˜μŠ€λŠ” 쑰상 클래슀의 λͺ¨λ“  멀버λ₯Ό 상속 λ°›μœΌλ―€λ‘œ 항상 쑰상 ν΄λž˜μŠ€λ³΄λ‹€ κ°™κ±°λ‚˜ λ§Žμ€ 멀버λ₯Ό κ°–λŠ”λ‹€.

μƒμ†λ°›λŠ”λ‹€ = μ‘°μƒν΄λž˜μŠ€λ₯Ό ν™•μž₯ν•œλ‹€

λΌλŠ” 의미둜 해석할 수 μžˆμ–΄μ„œ ν‚€μ›Œλ“œκ°€ extends 인 것도 μžˆλ‹€.




class Parent {
    int age;
}

class Child1 extends Parent {
    void play() {
        System.out.println("λ†€μž~");
    }
}

class Child2 extends Parent {
    void eat() {
        System.out.println("떑볢희 먹으러 κ°€μž~");
    }
}

Child1, Child2 λ‘˜ λ‹€ Parent클래슀λ₯Ό 상속받고 μžˆμ§€λ§Œ,

클래슀 Child1κ³Ό Child2 κ°„μ—λŠ” μ„œλ‘œ μ•„λ¬΄λŸ° 관계도 μ„±λ¦½λ˜μ§€ μ•ŠλŠ”λ‹€. (독립)




포함관계

ν•œ 클래슀의 λ©€λ²„λ³€μˆ˜λ‘œ λ‹€λ₯Έ 클래슀 νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” 것을 λ§ν•œλ‹€.

class Circle {
    int x;
    int y;
    int r;
}

class Point {
    int x;
    int y;
}

class Circle {
    Point c = new Point();
    int r;
}

λ‘λ²ˆμ§Έ μ½”λ“œλ₯Ό 포함관계라고 ν•œλ‹€.



❓포함관계λ₯Ό 쓸지 VS 상속을 쓸지❓

~은 ~이닀(is-a) 와 ~은 ~을 가지고 μžˆλ‹€(has-a) λ₯Ό λ„£μ–΄μ„œ λ¬Έμž₯을 λ§Œλ“€μ–΄ 보면 λœλ‹€.

상속 원은 점이닀. - Circle is a Point.

포함 원은 점을 가지고 μžˆλ‹€. - Circle has a Point.

이 κ²½μš°μ—λŠ” 두 번째 λ¬Έμž₯이 더 μ˜³λ‹€.

κ·Έλž˜μ„œ 상속보단 ν¬ν•¨κ΄€κ³„λ‘œ μ“°λŠ” 것이 μ’‹λ‹€.

예λ₯Ό λ“€μ–΄ 원은 λ„ν˜•μ΄κ³ (is) 원은 점을 가지고(has) μžˆλ‹€.




class Shape {
    String color = "black";
}

class Circle extends Shape {
}

class Circle extends Shape {
    Point center;
    int r;
}






단일 상속(single inheritance)

C++μ—μ„œλŠ” 닀쀑 상속을 ν—ˆμš©ν•˜μ§€λ§Œ μžλ°”μ—μ„œλŠ” 였직 단일 μƒμ†λ§Œμ„ ν—ˆμš©ν•œλ‹€.


class TVCR extends TV, VCR { // μ—λŸ¬. 쑰상은 ν•˜λ‚˜λ§Œ ν—ˆμš©λœλ‹€.
    // ... 
}



닀쀑 μƒμ†μ˜ μž₯점

μ—¬λŸ¬ ν΄λž˜μŠ€λ‘œλΆ€ν„° 상속받을 수 있기 λ•Œλ¬Έμ— 볡합적인 κΈ°λŠ₯을 가진 클래슀λ₯Ό μ‰½κ²Œ μž‘μ„±ν•  수 μžˆλ‹€.


닀쀑 μƒμ†μ˜ 단점

ν΄λž˜μŠ€κ°„μ˜ 관계가 맀우 λ³΅μž‘ν•΄μ§

μ„œλ‘œ λ‹€λ₯Έ ν΄λž˜μŠ€λ‘œλΆ€ν„° 상속받은 λ©€λ²„κ°„μ˜ 이름이 같은 경우 ꡬ별할 수 μžˆλŠ” 방법이 μ—†λ‹€.

(예 : TVν΄λž˜μŠ€μ—λ„ power() λ©”μ„œλ“œκ°€, VCR ν΄λž˜μŠ€μ—λ„ power()λΌλŠ” λ©”μ„œλ“œκ°€ μžˆμ„ λ•Œ μžμ†μ€ TVCRν΄λž˜μŠ€λŠ” μ–΄λŠ μ‘°μƒν΄λž˜μŠ€μ˜ power()λ₯Ό μƒμ†λ°›κ²Œ λ˜λŠ” κ²ƒμΌκΉŒ? λœλ‹€ν•΄λ„ μ–΄λ–»κ²Œ ꡬ별할 것인가?)

μœ„μ˜ λ‹¨μ μœΌλ‘œ μΈν•˜μ—¬ μžλ°”μ—μ„œλŠ” λ‹¨μΌμƒμ†λ§Œμ„ ν—ˆμš©ν•œλ‹€.






Object클래슀 - λͺ¨λ“  클래슀의 쑰상

Object ν΄λž˜μŠ€λŠ” λͺ¨λ“  클래슀 μƒμ†κ³„μΈ΅λ„μ˜ μ΅œμƒμœ„μ— μžˆλŠ” μ‘°μƒν΄λž˜μŠ€μ΄λ‹€.


class Tv {
    ...
}

class Tv extends Object {
    ...
}

μ»΄νŒŒμΌμ„ ν•˜λ©΄ μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ μ΅œμƒμœ„ 쑰상인 Object 클래슀λ₯Ό μΆ”κ°€ν•΄ μ€€λ‹€.

toString()μ΄λ‚˜ equals와 같은 λ©”μ„œλ“œλ₯Ό λ”°λ‘œ μ •μ˜ν•˜μ§€ μ•Šκ³ λ„ μ‚¬μš©ν•  수 μžˆμ—ˆλ˜ μ΄μœ λŠ” 이 λ©”μ„œλ“œλ“€μ΄ Object ν΄λž˜μŠ€μ— μ •μ˜λœ 것듀이기 λ•Œλ¬Έμ΄λ‹€.

λ°˜μ‘ν˜•