πŸ“– 좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€μ˜ 차이


좔상 클래슀

κ°„λ‹¨νžˆ λ§ν•˜λ©΄β€¦
클래슀λ₯Ό 섀계도라 ν•˜λ©΄, 좔상 ν΄λž˜μŠ€λŠ” λ―Έμ™„μ„± 섀계도에 λΉ„μœ ν•  수 μžˆλ‹€.
(μ—¬κΈ°μ„œ ν΄λž˜μŠ€κ°€ λ―Έμ™„μ„±μ΄λΌλŠ” 것은 좔상 λ©”μ„œλ“œλ₯Ό ν¬ν•¨ν•˜κ³  μžˆλ‹€λŠ” μ˜λ―Έμ΄λ‹€.)

예λ₯Ό λ“€λ©΄, 같은 크기의TV라도 κΈ°λŠ₯의 차이에 따라 μ—¬λŸ¬ μ’…λ₯˜μ˜ λͺ¨λΈμ΄ μžˆμ§€λ§Œ
섀계도 90은 λ™μΌν• ν…Œλ‹ˆ, μ–΄λŠμ •λ„ 틀을 κ°–μΆ˜ μƒνƒœμ—μ„œ μ§„ν–‰ν•˜λŠ” 것이 μ’‹λ‹€.
μ΄λ•Œ μ‚¬μš©ν•  수 μžˆλŠ” 것이 좔상 ν΄λž˜μŠ€μ΄λ‹€.

좔상 λ©”μ„œλ“œ ?

μ„ μ–ΈλΆ€λ§Œ μž‘μ„±ν•˜κ³  κ΅¬ν˜„λΆ€λŠ” μž‘μ„±ν•˜μ§€ μ•Šμ€ μ±„λ‘œ 남겨 λ‘” 것이 μΆ”μƒλ©”μ„œλ“œμ΄λ‹€.
좔상 λ©”μ„œλ“œλŠ” μƒμ†λ°›λŠ” ν΄λž˜μŠ€μ— 따라 λ‹¬λΌμ§ˆ 수 μžˆλ‹€.

좔상 클래슀 κ·œμΉ™

  • 좔상 ν΄λž˜μŠ€λŠ” ν‚€μ›Œλ“œ abstractλ₯Ό λΆ™μ—¬ ν‘œν˜„ν•œλ‹€. 좔상 λ©”μ„œλ“œλ₯Ό ν¬ν•¨ν•˜μ§€ μ•Šμ€ ν΄λž˜μŠ€μ—μ„œλ„ abstractλ₯Ό λΆ™μ—¬μ„œ 좔상 클래슀둜 지정할 μˆ˜λ„ μžˆλ‹€.
  • 클래슀λ₯Ό abstract둜 μ§€μ •ν•˜λ©΄ newλ₯Ό 톡해 객체λ₯Ό 직접 생성할 수 μ—†λ‹€.
  • λ©”μ†Œλ“œμ— abstractλ₯Ό μ‚¬μš©ν•  경우 interface의 λ©”μ†Œλ“œμ™€ 같이 κ΅¬ν˜„ 뢀뢄은 μ—†λ‹€.
  • abstract둜 μ„ μ–Έν•œ λ©”μ†Œλ“œλ₯Ό μžμ‹ ν΄λž˜μŠ€μ—μ„œ λ°˜λ“œμ‹œ κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€. (μ˜€λ²„λΌμ΄λ”©) μ΄λŠ” μžμ‹ ν΄λž˜μŠ€μ—μ„œ 좔상 λ©”μ„œλ“œλ₯Ό λ°˜λ“œμ‹œ κ΅¬ν˜„ν•˜λ„λ‘ κ°•μ œν•˜λŠ” 것이닀.

λ‹€μŒ 예제λ₯Ό λ³΄λ©΄μ„œ 좔상 ν΄λž˜μŠ€μ— λŒ€ν•΄ μ•Œμ•„λ³΄μž !

Exmaple

public abstract class Player {
    boolean pause;
    int currentPos;

    public Player() {
        this.pause = false;
        this.currentPos = 0;
    }
    // μ§€μ •λœ μœ„μΉ˜μ—μ„œ μž¬μƒμ„ μ‹œμž‘ν•˜λŠ” κΈ°λŠ₯ μˆ˜ν–‰λ˜λ„λ‘ μž‘μ„±
    abstract void play(int pos);
    // μž¬μƒμ„ μ¦‰μ‹œ λ©ˆμΆ”λŠ” κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λ„λ‘ μž‘μ„±
    abstract void stop();

    void pause() {
        if (pause) {
            pause = false;
            play(currentPos);
        } else {
            pause = true;
            stop();
        }
    }
}

Player 좔상 ν΄λž˜μŠ€λŠ”
VCRμ΄λ‚˜ Audio 같은 μž¬μƒμ΄ κ°€λŠ₯ν•œ 기기의 λΆ€λͺ¨ ν΄λž˜μŠ€κ°€ 될 수 μžˆλ‹€.
이제 Player 좔상 클래슀λ₯Ό μƒμ†λ°›λŠ” CDPlayer 클래슀λ₯Ό λ§Œλ“€μ–΄λ³΄μž πŸ”¨

public class CDPlayer extends Player {
    @Override
    void play(int pos) {
        // κ΅¬ν˜„ μƒλž΅
    }

    @Override
    void stop() {
        // κ΅¬ν˜„ μƒλž΅
    }

    //CDPlayer ν΄λž˜μŠ€μ— μΆ”κ°€λ‘œ μ •μ˜λœ 멀버
    int currentTrack;

    void nextTrack() {
        currentTrack++;
        // ...
    }

    void preTrack() {
        if (currentTrack > 1) {
            currentTrack--;
        }
        // ...
    }
}

λΆ€λͺ¨ 클래슀의 μΆ”μƒλ©”μ„œλ“œλ₯Ό CDPlayer에 맞게 μ˜€λ²„λΌμ΄λ”©ν•΄μ£Όκ³ ,
CDPlayer만의 μƒˆλ‘œμš΄ 멀버듀을 μΆ”κ°€ν•΄μ£Όμ—ˆλ‹€.

μΈν„°νŽ˜μ΄μŠ€

κ°„λ‹¨νžˆ λ§ν•˜λ©΄β€¦
μΈν„°νŽ˜μ΄μŠ€λŠ” μΌμ’…μ˜ 좔상 클래슀둜, 좔상 λ©”μ„œλ“œλ₯Ό κ°–μ§€λ§Œ
좔상 ν΄λž˜μŠ€λ³΄λ‹€ 좔상화 정도가 λ†’μ•„
좔상 ν΄λž˜μŠ€μ™€ 달리 λͺΈν†΅μ„ κ°–μΆ˜ 일반 λ©”μ„œλ“œ, 멀버 λ³€μˆ˜λ₯Ό κ΅¬μ„±μ›μœΌλ‘œ κ°€μ§ˆ 수 μ—†λ‹€.
좔상 클래슀λ₯Ό λ―Έμ™„μ„± 섀계도라 ν•˜λ©΄, μΈν„°νŽ˜μ΄μŠ€λŠ” κ΅¬ν˜„λœ 것은 아무 것도 μ—†λŠ”,
λ°‘κ·Έλ¦Όλ§Œ 그렀진 κΈ°λ³Έ 섀계도라고 ν•  수 μžˆλ‹€.

μΈν„°νŽ˜μ΄μŠ€ κ·œμΉ™

  • 좔상 클래슀처럼 λΆˆμ™„μ „ν•œ 것이기 λ•Œλ¬Έμ— κ·Έ 자체만으둜 μ‚¬μš©λ˜κΈ° 보닀, λ‹€λ₯Έ 클래슀λ₯Ό μž‘μ„±ν•˜λŠ”λ° 도움을 쀄 λͺ©μ μœΌλ‘œ μž‘μ„±λœλ‹€.
  • 일반 λ©”μ„œλ“œ λ˜λŠ” 멀버 λ³€μˆ˜λ₯Ό κ΅¬μ„±μ›μœΌλ‘œ κ°€μ§ˆ 수 μ—†λ‹€.
  • λͺ¨λ“  멀버 λ³€μˆ˜λŠ” public static final이어햐 ν•˜λ©°, 이λ₯Ό μƒλž΅ν•  수 μžˆλ‹€.
  • λͺ¨λ“  λ©”μ„œλ“œλŠ” public abtract이어야 ν•˜λ©°, 이λ₯Ό μƒλž΅ν•  수 μžˆλ‹€. (단, JDK1.8λΆ€ν„° static λ©”μ„œλ“œμ™€ default λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.)

πŸ€” public static final의 μ‚¬μš© λͺ©μ  ?
μΈν„°νŽ˜μ΄μŠ€ λ³€μˆ˜λŠ” 아무 μΈμŠ€ν„΄μŠ€λ„ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μ‹œμ μ΄κΈ° 떄문에 슀슀둜 μ΄ˆκΈ°ν™” 될 κΆŒν•œμ΄ μ—†λ‹€.
λ•Œλ¬Έμ— public static finalλ₯Ό μ‚¬μš©ν•΄ κ΅¬ν˜„ 객체의 같은 μƒνƒœλ₯Ό 보μž₯ν•œλ‹€.

μΈν„°νŽ˜μ΄μŠ€μ˜ 닀쀑 상속

μΈν„°νŽ˜μ΄μŠ€λŠ” μΈν„°νŽ˜μ΄μŠ€λ‘œλΆ€ν„°λ§Œ 상속받을 수 있으며,
ν΄λž˜μŠ€μ™€ 달리 닀쀑상속을 λ°›λŠ” 것이 κ°€λŠ₯ν•˜λ‹€.

public interface Movable {
    void move(int x, int y);
}

interface Attackable {
    void attack(Unit u);
}

interface Fightable extends Movable, Attackable {
}

클래슀의 상속과 λ§ˆμ°¬κ°€μ§€λ‘œ μžμ‹ μΈν„°νŽ˜μ΄μŠ€λŠ” λΆ€λͺ¨ μΈν„°νŽ˜μ΄μŠ€μ— μ •μ˜λœ 멀버 λͺ¨λ‘ μƒμ†λ°›λŠ”λ‹€.

μΈν„°νŽ˜μ΄μŠ€κ°€ 닀쀑 상속이 κ°€λŠ₯ν•œ μ΄μœ λŠ”? μΈν„°νŽ˜μ΄μŠ€λŠ” abstract λ©”μ†Œλ“œλ§Œμ„ 가지고 μžˆλŠ”λ°,
이λ₯Ό 상속할 경우 μƒμ†ν•˜λŠ” ν΄λž˜μŠ€μ—μ„œ 무쑰건 κ·Έ λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•΄μ£Όμ–΄μ•Ό ν•˜λŠ”λ°,
이 경우 닀쀑 μƒμ†ν•˜κ³  μžˆλŠ” μΈν„°νŽ˜μ΄μŠ€λ“€μ— λ™μΌν•œ λ©”μ„œλ“œκ°€ μ‘΄μž¬ν•œλ‹€ ν•˜λ”λΌλ„,
κ·Έ λ‚΄λΆ€ κ΅¬ν˜„μ€ μ •μ˜λ˜μ§€ μ•Šμ•˜μœΌλ‹ˆ 문제될 것이 μ—†κΈ° λ•Œλ¬Έμ΄ μ•„λ‹κΉŒ ν•œλ‹€.

그런데 이제 μΈν„°νŽ˜μ΄μŠ€μ—μ„œ default λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•  수 μžˆλŠ”λ°
λ‘κ°œμ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 닀쀑 μƒμ†ν•˜λŠ” 경우,
이 default λ©”μ†Œλ“œκ°€ 쀑볡이 되면 μ–΄λ–»κ²Œ λ˜λŠ”κ±°μ§€?

이 μ§ˆλ¬Έμ— λŒ€ν•œ 닡을 ν…ŒμŠ€νŠΈ ν•΄λ³΄μ•˜λ‹€.

λ™μΌν•œ printStatic() 을 가진 μΈν„°νŽ˜μ΄μŠ€ C와 Bλ₯Ό μƒμ†ν•˜λŠ”
μΈν„°νŽ˜μ΄μŠ€ AλŠ” printStatic()λ₯Ό 무쑰건 μ˜€λ²„λΌμ΄λ”©ν•˜κ²Œ λ˜μ–΄ μžˆμ—ˆλ‹€β€¦
λ§Œμ•½ 쀑볡 λ©”μ„œλ“œκ°€ 없을 경우 μ˜€λ²„λΌμ΄λ”©μ„ ν•˜μ§€ μ•Šμ•„λ„ 컴파일 μ—λŸ¬κ°€ λ‚˜μ§€ μ•ŠλŠ”λ‹€.

🍯 Tip

μΈν„°νŽ˜μ΄μŠ€ λͺ…은 λŒ€λΆ€λΆ„ β€œ~을 ν•  수 μžˆλŠ”β€μ˜ 의미인 able둜 λλ‚˜λŠ” 것듀이 λ§Žλ‹€κ³  ν•œλ‹€.
κ·Έ μ΄μœ λŠ” μ–΄λ–€ κΈ°λŠ₯ λ˜λŠ” ν–‰μœ„λ₯Ό ν•˜λŠ”λ° ν•„μš”ν•œ λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•œλ‹€λŠ” 의미λ₯Ό κ°•μ‘°ν•˜κΈ° μœ„ν•΄μ„œλ‹€.
λ•Œλ¬Έμ— κ·Έ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” ν΄λž˜μŠ€λŠ” β€œ~λ₯Ό ν•  수 μžˆλŠ”β€ λŠ₯λ ₯을 κ°–μΆ”μ—ˆλ‹€λŠ” μ˜λ―Έμ΄κΈ°λ„ ν•˜λ‹€.

좔상 클래슀 VS μΈν„°νŽ˜μ΄μŠ€

곡톡점 ?

λ¨Όμ € 좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€μ˜ 곡톡점을 μ°Ύμ•„λ³΄μž.
좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€ λ‘˜ λ‹€ 가지고 μžˆλŠ” 좔상 λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•˜λ„λ‘ κ°•μ œν•œλ‹€.
또 μΈμŠ€ν„΄μŠ€ν™”κ°€ λΆˆκ°€λŠ₯ν•˜λ‹€.

κ·Έλ ‡λ‹€λ©΄ 좔상 클래슀 μ•ˆμ— μ›ν•˜λŠ” κ²ƒλ§Œ 좔상 λ©”μ„œλ“œλ₯Ό μ—¬λŸ¬κ°œ λ‘κ±°λ‚˜,
μ „λΆ€ 좔상 λ©”μ„œλ“œλ‘œ λ§Œλ“€λ©΄ λ˜μ–΄ 좔상 ν΄λž˜μŠ€κ°€ μΈν„°νŽ˜μ΄μŠ€ 역할을 ν•  수 μžˆλ‹€.
λ§Œμ•½ λͺ¨λ“  ν΄λž˜μŠ€κ°€ μΈν„°νŽ˜μ΄μŠ€λ§Œ μ‚¬μš©ν•΄μ„œ κ΅¬ν˜„ν•œλ‹€λ©΄,
λͺ¨λ“  ν΄λž˜μŠ€μ—μ„œ κ³΅ν†΅μœΌλ‘œ ν•„μš”ν•œ κΈ°λŠ₯듀은 각각 μ˜€λ²„λΌμ΄λ”© ν•˜κ²Œ λ˜λ‹ˆ μ½”λ“œμ˜ 쀑볡이 λ°œμƒν•œλ‹€.
λ•Œλ¬Έμ— 이 κ³΅ν†΅μœΌλ‘œ ν•„μš”ν•œ κΈ°λŠ₯듀을 λΆ€λͺ¨ ν΄λž˜μŠ€μ—μ„œ 일반 λ©”μ„œλ“œλ‘œ κ΅¬ν˜„ν•œ
μΆ”μƒν΄λž˜μŠ€λ₯Ό 상속 λ°›μ•„ μžμ‹ ν΄λž˜μŠ€μ—μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•˜λ©΄ 될거같은데…
μ™œ μΈν„°νŽ˜μ΄μŠ€λŠ” μ™œ ν•„μš”ν•œκ±ΈκΉŒ? πŸ€”

μ ‘κ·Όμž

μΈν„°νŽ˜μ΄μŠ€μ—μ„œ λͺ¨λ“  λ³€μˆ˜λŠ” public static final,
λͺ¨λ“  λ©”μ†Œλ“œλŠ” public abstract이닀.
ν•˜μ§€λ§Œ 좔상 ν΄λž˜μŠ€μ—μ„œλŠ” staticμ΄λ‚˜ final이 μ•„λ‹Œ ν•„λ“œλ₯Ό κ°€μ§ˆ 수 있고,
public, protected, private λͺ¨λ‘ κ°€μ§ˆ 수 μžˆλ‹€.

개인적인 μƒκ°μœΌλ‘œλŠ” μΈν„°νŽ˜μ΄μŠ€λ§Œμ„ κ΅¬ν˜„ν•˜λ©΄ public static finalλ§Œμ„ μ‚¬μš©ν•΄
κ΅¬ν˜„ 객체의 같은 μƒνƒœλ₯Ό κ³΅μœ ν• μˆ˜ 밖에 μ—†λŠ”λ°,
좔상 ν΄λž˜μŠ€λŠ” staticμ΄λ‚˜ final이 μ•„λ‹Œ ν•„λ“œλ˜ν•œ κ°€μ§ˆ 수 있기 λ•Œλ¬Έμ—
좔상 클래슀λ₯Ό 상속 받은 객체듀이 같은 μƒνƒœλ₯Ό 가지고 μžˆμ„ 수 μžˆλ‹€.

닀쀑 상속 μ—¬λΆ€

μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” ν΄λž˜μŠ€λŠ” λ‹€λ₯Έ μ—¬λŸ¬κ°œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν•¨κ»˜ κ΅¬ν˜„ν•  수 μžˆλ‹€.
ν•˜μ§€λ§Œ μžλ°”μ—μ„œλŠ” 닀쀑 상속을 μ§€μ›ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ—¬λŸ¬ 좔상 클래슀λ₯Ό 상속할 수 μ—†λ‹€.

μ‚¬μš© μ˜λ„

λ¬Όλ‘  닀쀑 상속 μ—¬λΆ€μ˜ μ°¨μ΄λŠ” μžˆμ§€λ§Œ 이것이 ν¬μΈνŠΈκ°€ μ•„λ‹ˆλΌ,
이에 λ”°λ₯Έ μ‚¬μš© λͺ©μ μ΄ λ‹€λ₯΄λ‹€λŠ” 것에 포인트λ₯Ό 맞좰보자.
μœ„μ—μ„œ λ§ν•œ 닀쀑 상속 여뢀에 따라 좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€μ˜ μ‚¬μš© μ˜λ„ λ˜ν•œ λ‹€λ₯΄λ‹€.

좔상 ν΄λž˜μŠ€λŠ” 이λ₯Ό 상속할 각 κ°μ²΄λ“€μ˜ 곡톡점을 μ°Ύμ•„ μΆ”μƒν™”μ‹œμΌœ 놓은 κ²ƒμœΌλ‘œ,
상속 관계λ₯Ό 타고 μ˜¬λΌκ°”μ„ λ•Œ 같은 λΆ€λͺ¨ 클래슀λ₯Ό μƒμ†ν•˜λ©°
λΆ€λͺ¨ ν΄λž˜μŠ€κ°€ 가진 κΈ°λŠ₯듀을 κ΅¬ν˜„ν•΄μ•Όν•  경우 μ‚¬μš©ν•œλ‹€.

μΈν„°νŽ˜μ΄μŠ€λŠ” 상속 관계λ₯Ό 타고 μ˜¬λΌκ°”μ„ λ•Œ
λ‹€λ₯Έ 쑰상 클래슀λ₯Ό μƒμ†ν•˜λ”λΌλ„, 같은 κΈ°λŠ₯이 ν•„μš”ν•  경우 μ‚¬μš©ν•œλ‹€.
ν΄λž˜μŠ€μ™€ λ³„λ„λ‘œ κ΅¬ν˜„ 객체가 같은 λ™μž‘μ„ ν•œλ‹€λŠ” 것을 보μž₯ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€.

Exmaple

μ•„λž˜μ™€ 같은 관계λ₯Ό κ°–λŠ” 예제λ₯Ό μ‚΄νŽ΄λ³Έλ‹€.

제일 λΆ€λͺ¨ 클래슀인 Creature은 생물에 λŒ€ν•œ Abstract Class이닀.
각 생물은 ꡬ뢄에 따라 Animal λ˜λŠ” Plantλ₯Ό μƒμ†ν•œλ‹€.
그리고 각각이 ν•  수 μžˆλŠ” 좔가적인 κΈ°λŠ₯듀을 μΈν„°νŽ˜μ΄μŠ€λ‘œ κ΅¬ν˜„ν–ˆλ‹€.

Animal을 μƒμ†λ°›λŠ” Amazzi(λ‚˜^^), Dog, Cat은 Plant와 λ‹€λ₯΄κ²Œ
bark(μ§–λ‹€) ν•  수 μžˆμœΌλ‹ˆ Barkable μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜μ˜€λ‹€.

μ—¬κΈ°μ„œ λˆˆμ—¬κ²¨ λ³Ό 것은 λ°”λ‘œ Eatable인데,
Eatable μΈν„°νŽ˜μ΄μŠ€λŠ” ν˜„μž¬ 상속 관계가 λ‹€λ₯Έ Amazzi(λ‚˜^^), Dog, Cat, FlyHellPlantμ—κ²Œ
곡톡적인 κΈ°λŠ₯인 Eat κΈ°λŠ₯을 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•¨μœΌλ‘œ 같은 κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λ„λ‘ κ°•μ œν•˜κ³  μžˆλ‹€.

그러면 κ²°κ΅­ 이 4가지 클래슀 λͺ¨λ‘ 생물 클래슀λ₯Ό μƒμ†ν•˜κ³  μžˆλŠ”λ°,
생물 ν΄λž˜μŠ€μ— eatμ΄λΌλŠ” 좔상 λ©”μ„œλ“œλ₯Ό λ§Œλ“€λ©΄ μ•ˆλ˜λŠ”κ°€?라고 생각할 수 μžˆμ§€λ§Œ
Plantλ₯Ό 상속받은 RoseλŠ” eat λ©”μ†Œλ“œλ₯Ό κ°€μ§ˆ 수 μ—†λ‹€.

그러면 μ–΄λ–»κ²Œν•˜μ§€ πŸ€·β€β™€οΈ

μ΄λ•Œ λ°”λ‘œ μΈν„°νŽ˜μ΄μŠ€λ‘œ λ”°λ‘œ 선언을 ν•΄μ£Όμ–΄ 각각 eat을 ν•  수 μžˆλŠ”
ν΄λž˜μŠ€μ— implementsν•΄μ£Όμ–΄ λ§Œλ“€μ–΄ μ£Όλ©΄ 가독성이 μ˜¬λΌκ°€λ©° μœ μ§€λ³΄μˆ˜ λ˜ν•œ μ‰¬μ›Œμ§„λ‹€.

각각의 μ μ ˆν•œ μ‚¬μš© μΌ€μ΄μŠ€ 정리

좔상 클래슀

  • 관련성이 높은 클래슀 간에 μ½”λ“œλ₯Ό κ³΅μœ ν•˜κ³  싢은 경우
  • 좔상 클래슀λ₯Ό 상속 받을 ν΄λž˜μŠ€λ“€μ΄ κ³΅ν†΅μœΌλ‘œ κ°€μ§€λŠ” λ©”μ†Œλ“œμ™€ ν•„λ“œκ°€ λ§Žκ±°λ‚˜, publicμ΄μ™Έμ˜ μ ‘κ·Όμž(protected, private) 선언이 ν•„μš”ν•œ 경우
  • non-static, non-final ν•„λ“œ 선언이 ν•„μš”ν•œ 경우 (각 μΈμŠ€ν„΄μŠ€μ—μ„œ μƒνƒœ 변경을 μœ„ν•œ λ©”μ†Œλ“œκ°€ ν•„μš”ν•œ 경우)

μΈν„°νŽ˜μ΄μŠ€

  • μ„œλ‘œ 관련성이 μ—†λŠ” ν΄λž˜μŠ€λ“€μ΄ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜κ²Œ λ˜λŠ” 경우. ex) Comparable, Cloneable μΈν„°νŽ˜μ΄μŠ€λŠ” μ—¬λŸ¬ ν΄λž˜μŠ€λ“€μ—μ„œ κ΅¬ν˜„λ˜λŠ”λ°, κ΅¬ν˜„ν΄λž˜μŠ€λ“€ 간에 관련성이 μ—†λ‹€.
  • νŠΉμ • 데이터 νƒ€μž…μ˜ 행동을 λͺ…μ‹œν•˜κ³  싢은데, μ–΄λ””μ„œ κ·Έ 행동이 κ΅¬ν˜„λ˜λŠ”μ§€λŠ” 신경쓰지 μ•ŠλŠ” 경우.
  • 닀쀑상속을 ν—ˆμš©ν•˜κ³  싢은 경우

참고 자료

  • [[JAVA] μΆ”μƒν΄λž˜μŠ€ VS μΈν„°νŽ˜μ΄μŠ€ μ™œ μ‚¬μš©ν• κΉŒ? 차이점, 예제둜 확인 :: 마이자λͺ½](