🧩 좔상 클래슀

κΉ€ν—Œκ·œΒ·μ–΄μ œ
0
post-thumbnail

🧐 좔상 ν΄λž˜μŠ€λž€?

μΆ”μƒν΄λž˜μŠ€λŠ” μ—¬λŸ¬ 클래슀 간에 κ³΅ν†΅λœ ν•„λ“œμ™€ λ©”μ„œλ“œλ₯Ό μΆ”μΆœν•˜μ—¬ μ •μ˜ν•œ ν΄λž˜μŠ€μ΄λ‹€.

예λ₯Ό λ“€μ–΄, μš°λ¦¬κ°€ Phoneμ΄λΌλŠ” 클래슀λ₯Ό λ§Œλ“ λ‹€κ³  κ°€μ •ν•΄ 보자. 이λ₯Ό 기반으둜 SmartPhoneκ³Ό TelePhoneμ΄λΌλŠ” 클래슀λ₯Ό λ§Œλ“€ 수 μžˆλ‹€. SmartPhoneκ³Ό TelePhone은 각기 λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ λ™μž‘ν•˜μ§€λ§Œ, λ‘˜ λ‹€ "μ „ν™”"λ₯Ό ν•œλ‹€λŠ” 곡톡점이 μžˆλ‹€. λ˜ν•œ, μ „ν™”λ₯Ό κ±ΈκΈ° μœ„ν•΄ μ „ν™”λ²ˆν˜Έλ₯Ό μž…λ ₯ν•  λ•Œ 닀이얼을 λˆ„λ₯Έλ‹€λŠ” κ³΅ν†΅λœ λ™μž‘μ΄ μ‘΄μž¬ν•œλ‹€. λ‹€λ§Œ, SmartPhone은 ν„°μΉ˜ λ°©μ‹μœΌλ‘œ 닀이얼을 μž…λ ₯ν•˜κ³ , TelePhone은 λ²„νŠΌ λ°©μ‹μœΌλ‘œ 닀이얼을 μž…λ ₯ν•œλ‹€λŠ” 차이가 μžˆλ‹€.

이처럼 κ³΅ν†΅λœ νŠΉμ„±(예: "닀이얼"κ³Ό "μ „ν™” κΈ°λŠ₯")을 μΆ”μΆœν•˜μ—¬ μ •μ˜ν•œ 클래슀λ₯Ό 좔상 클래슀라고 ν•œλ‹€. (ν΄λž˜μŠ€μ—μ„œμ˜ κ³΅ν†΅λœ νŠΉμ„±μ€ ν•„λ“œμ™€ λ©”μ†Œλ“œλ₯Ό λ§ν•œλ‹€.) 좔상 ν΄λž˜μŠ€λŠ” μ‹€μ œλ‘œ 객체λ₯Ό 생성할 μˆ˜λŠ” μ—†μ§€λ§Œ, 이λ₯Ό 기반으둜 λ§Œλ“€μ–΄μ§„ 클래슀(SmartPhone, TelePhone)μ—μ„œ ꡬ체적인 λ™μž‘μ„ κ΅¬ν˜„ν•  수 μžˆλ‹€. μ΄λ ‡κ²Œ 좔상 클래슀λ₯Ό 상속받아 ꡬ체적인 객체λ₯Ό μƒμ„±ν•˜λŠ” 클래슀λ₯Ό 싀체 클래슀라고 ν•œλ‹€.

μ΄λ ‡κ²Œ 좔상 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄ μ½”λ“œμ˜ 쀑볡을 쀄이고, 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ 일관성을 μœ μ§€ν•  수 μžˆλ‹€.



πŸ“‹ 좔상 클래슀의 μš©λ„

μ΄λ ‡κ²Œ 싀체 클래슀의 곡톡적인 νŠΉμ„±(ν•„λ“œ, λ©”μ†Œλ“œ)을 뽑아내어 좔상 클래슀둜 λ§Œλ“œλŠ” μ΄μœ κ°€ λ¬΄μ—‡μΌκΉŒ?

κ³΅ν†΅λœ ν•„λ“œμ™€ λ©”μ†Œλ“œμ˜ 이름을 톡일할 λͺ©μ 

λ§Œμ•½ 싀체 클래슀λ₯Ό μ„€κ³„ν•˜λŠ” μ‚¬λžŒμ΄ μ—¬λŸ¬ λͺ…일 경우, 싀체 ν΄λž˜μŠ€λ§ˆλ‹€ ν•„λ“œμ™€ λ©”μ†Œλ“œκ°€ 제각기 λ‹€λ₯Έ 이름을 κ°€μ§€κ²Œ 될 것이닀.

예λ₯Ό λ“€μ–΄, Telephoneμ—μ„œλŠ” μ†Œμœ μžμ˜ 이름을 μ €μž₯ν•˜λŠ” ν•„λ“œλ₯Ό user, SmartPhoneμ—μ„œλŠ” member라고 μ •μ˜ν•˜κ³  μ „ν™”λ₯Ό κ±°λŠ” λ©”μ†Œλ“œλ₯Ό TelePhoneμ—μ„œλŠ” makeCall(), SmartPhoneμ—μ„œλŠ” ring()이라고 ν•œλ‹€λ©΄ κ°œλ°œμ„ ν•˜λ©΄μ„œ κ°œλ°œμžλ§ˆλ‹€ μ“°λŠ” ν•„λ“œλͺ…κ³Ό λ©”μ†Œλ“œλͺ…이 λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— ν˜Όλ™μ΄ μ‰½κ²Œ λ°œμƒν•˜κ²Œ λœλ‹€.

μ΄λŸ¬ν•œ 것을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ 좔상 클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” 것이닀. μ•žμ„  μ˜ˆμ‹œμ—μ„œ μ μš©ν•˜μžλ©΄ 좔상 ν΄λž˜μŠ€μ— user ν•„λ“œμ™€ makeCall() λ©”μ†Œλ“œλ₯Ό κ³΅ν†΅μ μœΌλ‘œ μ„ μ–Έν•˜μ—¬ 좔상 클래슀λ₯Ό κ΅¬μΆ•ν•˜λ©΄ λœλ‹€. 좔상 ν΄λž˜μŠ€μ—μ„œλŠ” 미리 μ •μ˜ν•œ ν•„λ“œμ™€ λ©”μ„œλ“œκ°€ μžˆλ‹€λ©΄, 싀체 ν΄λž˜μŠ€μ—μ„œ 좔상 클래슀의 ν•„λ“œμ™€ λ©”μ„œλ“œλͺ…을 λ³€κ²½ν•  수 μ—†κ³  무쑰건 ν•΄λ‹Ή λͺ…λͺ…μœΌλ‘œ κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€. λ”°λΌμ„œ, ν•„λ“œμ™€ λ©”μ„œλ“œ 이름을 ν†΅μΌν•˜μ—¬ μœ μ§€ λ³΄μˆ˜μ„±μ„ 높이고 톡일성을 μœ μ§€ν•  수 있게 λœλ‹€.

싀체 클래슀λ₯Ό μž‘μ„±ν•  λ•Œ μ‹œκ°„ μ ˆμ•½

곡톡적인 ν•„λ“œμ™€ λ©”μ†Œλ“œλŠ” 좔상 ν΄λž˜μŠ€μ— λͺ¨λ‘ μ„ μ–Έν•˜κ³ , λ‹€λ₯Έ νŠΉμ„± 및 μΆ”κ°€λœ νŠΉμ„±λ§Œ 싀체 ν΄λž˜μŠ€μ— μ„ μ–Έν•˜λ©΄ 싀체 클래슀λ₯Ό μž‘μ„±ν•˜λŠ” 데 μ‹œκ°„μ„ μ ˆμ•½ν•  수 μžˆλ‹€.

μ•žμ˜ μ˜ˆμ‹œμ—μ„œ TelePhoneκ³Ό SmartPhone은 Phone을 상속받기 λ•Œλ¬Έμ— user ν•„λ“œμ™€ makeCall() λ©”μ†Œλ“œλ₯Ό μ„ μ–Έν•  ν•„μš”κ°€ μ—†λ‹€. 좔가적인 νŠΉμ„±λ§Œ μžˆμ„ λ•Œ ν•„λ“œ 및 λ©”μ†Œλ“œλ₯Ό 싀체 ν΄λž˜μŠ€μ— 각각 선언을 ν•˜λ©΄ λœλ‹€. 그리고 좔상 ν΄λž˜μŠ€μ— 좔상 λ©”μ†Œλ“œλΌλŠ” 것이 μžˆλŠ”λ° 좔상 λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•˜κΈ° μœ„ν•œ λ°©λ²•μœΌλ‘œλŠ” 좔상 클래슀λ₯Ό 상속받은 싀체 ν΄λž˜μŠ€μ— μ˜€λ²„λΌμ΄λ”©ν•˜μ—¬ λ©”μ†Œλ“œ λ‚΄λΆ€μ˜ λ‘œμ§μ„ μž‘μ„±μ„ ν•˜λ©΄ λœλ‹€.

λ˜ν•œ ν˜„μ—…μ—μ„œλŠ” 주둜 κ΄€λ¦¬μž κΈ‰ κ°œλ°œμžλ“€μ΄ ꡬ쑰λ₯Ό μž‘μ•„μ£Όκ³  κ°œλ°œμ„ ν•˜λŠ”λ° μ΄λŸ¬ν•œ μƒν™©μ—μ„œλ„ κ³΅ν†΅λœ 뢀뢄이 μžˆλ‹€λ©΄ 좔상 클래슀λ₯Ό μ‚¬μš©ν•  수 μžˆμ„ 것이닀.



πŸ–‹οΈ 좔상 클래슀 μ„ μ–Έ

좔상 클래슀λ₯Ό μ„ μ–Έν•  λ•Œμ—λŠ” 클래슀 선언에 abstract ν‚€μ›Œλ“œλ₯Ό λΆ™μ—¬μ•Ό ν•œλ‹€. abstractλ₯Ό 뢙이면 new μ—°μ‚°μžλ₯Ό μ΄μš©ν•΄μ„œ 객체λ₯Ό λ§Œλ“€μ§€ λͺ»ν•˜κ³  상속을 ν†΅ν•΄μ„œ μžμ‹ 클래슀λ₯Ό μ΄μš©ν•˜μ—¬ 클래슀λ₯Ό λ§Œλ“€ 수 μžˆλ‹€.


public abstract class 클래슀 {
  //ν•„λ“œ

  //μƒμ„±μž

  //λ©”μ†Œλ“œ

}

좔상 ν΄λž˜μŠ€λ„ 일반 ν΄λž˜μŠ€μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ ν•„λ“œ, μƒμ„±μž, λ©”μ†Œλ“œλ₯Ό μ„ μ–Έν•  수 μžˆλ‹€. new μ—°μ‚°μžλ‘œ 직접 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•  μˆ˜λŠ” μ—†μ§€λ§Œ μžμ‹ 객체가 생성될 λ•Œ super()λ₯Ό ν˜ΈμΆœν•΄μ„œ 좔상 클래슀 객체λ₯Ό μƒμ„±ν•˜κΈ°μ— 좔상 ν΄λž˜μŠ€λ„ μƒμ„±μžκ°€ λ°˜λ“œμ‹œ μžˆμ–΄μ•Ό ν•œλ‹€.

μ˜ˆμ‹œ μ½”λ“œ

package abstractclass;

public abstract class Phone {

    // ν•„λ“œ
    public String user;

    // μƒμ„±μž
    public Phone(String user) {
        this.user = user;
    }

    // λ©”μ†Œλ“œ
    public void makeCall() {
        System.out.println("μ „ν™”λ₯Ό 건닀");
    }
    

}
package abstractclass;

public class SmartPhone extends Phone {
    // μƒμ„±μž
    public SmartPhone(String user) {
        super(user);
    }
    
    // λ©”μ†Œλ“œ
    public void internetSearch() {
        System.out.println("검색 ν•˜κΈ°");
    }
}
package abstractclass;

public class TelePhone extends Phone {

    public TelePhone(String user) {
        super(user);
    }

    // λ©”μ†Œλ“œ
    public void clickDial() {
        System.out.println("닀이얼을 λˆ„λ₯Έλ‹€");
    }

}

πŸ”„ 좔상 λ©”μ†Œλ“œμ™€ μž¬μ •μ˜

μ•žμ—μ„œ 잠깐 좔상 λ©”μ†Œλ“œλΌλŠ” 것을 μ„€λͺ…ν•˜μ˜€λŠ”λ° 더 μžμ„Ένžˆ μ„€λͺ…ν•˜μžλ©΄ 좔상 λ©”μ†Œλ“œλŠ” 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP)μ—μ„œ λ©”μ„œλ“œμ˜ μ„ μ–Έλ§Œ μ •μ˜ν•˜κ³ , κ΅¬ν˜„(μ‹€μ œ λ™μž‘)은 ν•˜μ§€ μ•Šμ€ λ©”μ„œλ“œλ₯Ό μ˜λ―Έν•œλ‹€. κ΅¬ν˜„λΆ€κ°€ μ—†μœΌλ―€λ‘œ μ€‘κ΄„ν˜Έ {} λŒ€μ‹  λ©”μ„œλ“œ μ„ μ–Έ 뒀에 μ„Έλ―Έμ½œλ‘ (;)을 μ‚¬μš©ν•œλ‹€. 이 λ©”μ†Œλ“œλŠ” μƒμ†λ°›λŠ” ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜(Override)ν•˜μ—¬ ꡬ체적인 κ΅¬ν˜„μ„ μ œκ³΅ν•΄μ•Ό ν•œλ‹€.

Phone의 μ˜ˆμ‹œλ₯Ό λ‹€μ‹œ μ‚¬μš©ν•˜μžλ©΄ μ•„λž˜μ˜ μ½”λ“œμ²˜λŸΌ 좔상 λ©”μ†Œλ“œλ₯Ό μ„ μ–Έν•  수 μžˆλ‹€.

package abstractclass;

public abstract class Phone {

    // ν•„λ“œ
    public String user;

    // μƒμ„±μž
    public Phone(String user) {
        this.user = user;
    }

    // 좔상 λ©”μ†Œλ“œ
    public abstract void makeCall(); 
    
}

μ΄λ ‡κ²Œ μ„ μ–Έν•œ 좔상 λ©”μ†Œλ“œλŠ” 상속을 λ°›λŠ” 싀체 ν΄λž˜μŠ€μ—μ„œ 무쑰건 직접 μž¬μ •μ˜ν•˜μ—¬ λ‚΄λΆ€ λ‘œμ§μ„ μž‘μ„±ν•΄μ•Ό ν•œλ‹€. μ•„λž˜μ˜ μ½”λ“œλ₯Ό μ°Έκ³ ν•˜κΈΈ λ°”λž€λ‹€.

package abstractclass;

public class SmartPhone extends Phone {
    // μƒμ„±μž
    public SmartPhone(String user) {
        super(user);
    }
    
    // 좔상 λ©”μ†Œλ“œ μž¬μ •μ˜
    @Override
    public void makeCall() {
        System.out.println("슀마트 폰으둜 μ „ν™” κ±ΈκΈ°");
    }
}
package abstractclass;

public class TelePhone extends Phone {

    public TelePhone(String user) {
        super(user);
    }

    // λ©”μ†Œλ“œ
    @Override
    public void makeCall() {
        System.out.println("ν…”λ ˆν°μœΌλ‘œ μ „ν™” κ±ΈκΈ°");
    }

}

μ°Έκ³ 
https://limkydev.tistory.com/188
혼곡자 - 379p ~ 387p

profile
Happiness is not a destination, it's a way of life.

0개의 λŒ“κΈ€