πŸͺ½

"ν‹€λ¦° λ‚΄μš©μ΄ μžˆμ„ 수 있으며, κΉ€μ˜ν•œ μ„ μƒλ‹˜μ˜ μŠ€ν”„λ§ κΈ°λ³ΈνŽΈμ„ μœ„μ£Όλ‘œ κ³΅λΆ€ν–ˆμŠ΅λ‹ˆλ‹€."

 

 

 

β–Ί μΈν„°νŽ˜μ΄μŠ€ (κΈ°λ³Έ 섀계도)

public interface MemberRepository {

    void save(Member member);

    Member findById(Long memberId);

}
// 좜처: 1)κΉ€μ˜ν•œμ˜ μŠ€ν”„λ§ 기본편

 

  • public interface라고 μ„ μ–Έν•˜λ©΄ 그것이 μΈν„°νŽ˜μ΄μŠ€κ°€ λœλ‹€.
  • μΈν„°νŽ˜μ΄μŠ€λŠ” 좔상화 클래슀둜 일반적인 λ©”μ„œλ“œ, 멀버 λ³€μˆ˜ ꡬ성원(μ•„λž˜ μ½”λ“œμ²˜λŸΌ)을 κ°€μ§ˆ 수 μ—†λ‹€.
  • μΈν„°νŽ˜μ΄μŠ€λŠ” μΆ”μƒλ©”μ„œλ“œ(λ§Œλ“€λ‹€ 만 것 같은 λ©”μ„œλ“œ)와 μƒμˆ˜(final을 μ΄μš©ν•˜μ—¬ λ³€ν•˜μ§€ μ•ŠλŠ” μ–΄λ–€ 값을 λ§Œλ“œλŠ” 것)만 가진닀.
  • μΆ”μƒλ©”μ„œλ“œλŠ” public abstruct - 둜 μ‹œμž‘ν•˜μ§€λ§Œ, μœ„μ˜ μ½”λ“œμ²˜λŸΌ μƒλž΅ν•΄λ„ λ¬΄κ΄€ν•˜λ‹€.
  • μƒμˆ˜λŠ” public static final -둜 μ‹œμž‘ν•˜μ§€λ§Œ, μƒλž΅κ°€λŠ₯ν•˜λ‹€. 
  • μ‰½κ²Œ 말해 λΆˆμ™„μ „ν•˜λ―€λ‘œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ λ‹€λ₯Έ λ†ˆμ΄ ν•„μš”ν•˜λ‹€!

 

  • ν•œ 클래슀 ν˜Ήμ€ ν•œ μΈν„°νŽ˜μ΄μŠ€μ— μΈν„°νŽ˜μ΄μŠ€λ₯Ό 닀쀑 상속이 κ°€λŠ₯ν•˜λ‹€.
public interface Dog extends Animal, Pet {
    void bark();
}

 

class Cat implements Animal, Pet {

    public void cry() {
        System.out.println("λƒμ˜Ήλƒμ˜Ή!");
    }

    public void play() {
        System.out.println("μ₯ 작기 λ†€μ΄ν•˜μž~!");
    }
// 좜처: 3)TCP School

 

 

 

β–Ί κ΅¬ν˜„μ²΄ (ꡬ체적인 섀계도)

@Component
public class MemoryMemberRepository implements MemberRepository{

    private static Map<Long, Member> store = new HashMap<>();

    @Override
    public void save(Member member) {
        store.put(member.getId(), member);
    }

    @Override
    public Member findById(Long memberId) {
        return store.get(memberId);
    }

 

  • implementsλ₯Ό 톡해 μΈν„°νŽ˜μ΄μŠ€ 상속을 λ°›λŠ”λ‹€.
  • ꡬ체적인 λ©”μ„œλ“œλ₯Ό μž‘μ„±ν•œλ‹€.
  • 같은 클래슀 λ‚΄μ—μ„œ μΈν„°νŽ˜μ΄μŠ€μ™€ κ΅¬ν˜„μ²΄λ₯Ό ν•œ λ²ˆμ— 넣을 μˆ˜λ„ μžˆλ‹€. 

 


 

 

Q. μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“  μ΄μœ λŠ”?

A. μ—¬λŸ¬ μ΄μœ κ°€ μžˆλŠ”λ°, κ°€μž₯ 큰 것은 μ˜μ‘΄μ„± λ¬Έμ œμ΄λ‹€. ν΄λž˜μŠ€λŠ” μ„œλ‘œ μ–½ν˜€μžˆλ‹€. ν•œ ν΄λž˜μŠ€μ— ν•œ κΈ°λŠ₯을 λ‹΄λ‹Ήν•˜κΈ° λ•Œλ¬Έμ— νšŒμ›μ •λ³΄λ₯Ό λ„£κ³  λΉΌλŠ” 클래슀, νšŒμ› 정보λ₯Ό μ €μž₯ν•˜λŠ” 클래슀, 주문을 μ²˜λ¦¬ν•˜λŠ” 클래슀 λ“± μ–΄λ–€ ν”„λ‘œμ νŠΈλ₯Ό ν•  λ•Œ μ—¬λŸ¬ ν΄λž˜μŠ€λ“€μ΄ μ„œλ‘œ μ–½ν˜€μžˆκ²Œ λœλ‹€. 

 

 μ˜ˆμ‹œλ‘œ ν‰μ†Œμ—λŠ” 10λ§Œμ› 이상 κ΅¬λ§€μ‹œ 10νΌμ„ΌνŠΈ ν• μΈν•˜λŠ” μ •μ±…μ΄μ—ˆλŠ”λ°, μΆ”μ„λ§žμ΄ 이벀트둜 10λ§Œμ› 이상 κ΅¬λ§€μ‹œ 30νΌμ„ΌνŠΈλ‘œ ν• μΈν•˜λŠ” 정책을 μƒˆλ‘­κ²Œ λ„£λŠ” 것을 λ“€μ–΄λ³΄μž. 그러면 30νΌμ„ΌνŠΈ ν• μΈν•˜λŠ” 클래슀λ₯Ό λ§Œλ“€ 것이닀. μΈν„°νŽ˜μ΄μŠ€κ°€ μ—†λ‹€λ©΄  주문을 μ²˜λ¦¬ν•˜λŠ” ν΄λž˜μŠ€μ— κ°€μ„œ μ½”λ“œλ₯Ό 직접 μˆ˜μ •ν•΄μ•Όν•œλ‹€. 10νΌμ„ΌνŠΈ 할인 클래슀λ₯Ό μ„ μ–Έν•΄λ†¨κ² μ§€λ§Œ, 30νΌμ„ΌνŠΈ 할인 클래슀둜 λ³€κ²½ν•΄μ•Όν•œλ‹€. 그리고 할인 정책을 μ‚¬μš©ν•˜κ³  μžˆλŠ” ν΄λž˜μŠ€μ— λ“€μ–΄κ°€ 직접 μˆ˜μ •μ„ ν•΄μ€˜μ•Όν•˜λŠ” λ²ˆκ±°λ‘œμ›€μ΄ 생긴닀. 또 κ·Έλ‘œμΈν•œ 였λ₯˜λ„ λ°œμƒν•˜κ²Œλœλ‹€.

 

 κ·ΈλŸ° 였λ₯˜λ₯Ό 쀄이기 μœ„ν•΄ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 쀑간에 κ»΄λ‘λŠ” 것이닀. A 클래슀 - μΈν„°νŽ˜μ΄μŠ€ - B 클래슀둜 λ§Œλ“€μ–΄ B ν΄λž˜μŠ€κ°€ λ‹€λ₯Έ 클래슀둜 λŒ€μ²΄ν•˜λ”λΌλ„ A 클래슀 μ½”λ“œμ— 직접적인 μˆ˜μ •μ΄ 없도둝 λ§Œλ“œλŠ” 것이닀.

 

 λ¬Όλ‘  μΈν”„λŸ°μ— κΉ€μ˜ν•œ μ„ μƒλ‹˜μ˜ μŠ€ν”„λ§κΈ°λ³ΈνŽΈμ„ λ“£κ²Œλœλ‹€λ©΄ μžλ°” μŠ€ν”„λ§μ˜ μ˜μ‘΄μ„± 문제λ₯Ό μ–΄λ–€μ‹μœΌλ‘œ ν•΄κ²°ν•˜λŠ”μ§€ 더 μžμ„Έν•˜κ²Œ μ•Œ 수 μžˆλ‹€.

 

 


 

 

Q. κ·Έλ ‡λ‹€λ©΄ μΈν„°νŽ˜μ΄μŠ€ 내뢀에 μΆ”μƒλ©”μ„œλ“œλ₯Ό λ‘λŠ” μ΄μœ κ°€ 무엇인가?

A. μ²«λ²ˆμ§ΈλŠ” μΈν„°νŽ˜μ΄μŠ€μ— μ •μ˜λœ λ©”μ„œλ“œλ“€μ„ κ΅¬μ²΄ν΄λž˜μŠ€μ— κ°€μ„œ λ°˜λ“œμ‹œ κ΅¬ν˜„ν•˜κ²Œ ν•˜κΈ° μœ„ν•¨μ΄λ‹€. 만일 μΈν„°νŽ˜μ΄μŠ€μ— μ •μ˜λœ λ©”μ„œλ“œλ“€μ„ κ΅¬ν˜„μ²΄μ—μ„œ μ‹€ν–‰ν•˜μ§€ μ•ŠμœΌλ©΄ 컴파일러 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚¨λ‹€.

 

 λ‘λ²ˆμ§ΈλŠ” 애맀λͺ¨ν˜Έν•˜κ²Œ λ©”μ„œλ“œλ₯Ό μ •μ˜ν•˜μ—¬ μœ μ—°μ„±μ„ μ œκ³΅ν•œλ‹€. μ•„κΉŒ μœ„μ˜ μ§ˆλ¬Έμ—μ„œ μ„œμˆ ν–ˆλ“―, 할인 정책이 변경될 μ‹œ μΈν„°νŽ˜μ΄μŠ€κ°€ ꡬ체적인 λ©”μ„œλ“œλ‘œ μ •μ˜λ˜μ–΄μžˆλ‹€λ©΄ μΈν„°νŽ˜μ΄μŠ€μ˜ μ½”λ“œλ„ μˆ˜μ •ν•΄μ•Όν•œλ‹€. μΆ”μƒλ©”μ„œλ“œλ‘œ 둬 λ©”μ„œλ“œμ˜ μ΄λ¦„λ§Œ 맞좰 ꡬ체클래슀λ₯Ό μž‘μ„±ν•˜κ²Œ 되면 감μͺ½κ°™μ΄ λ°”λ€Œκ²Œ λœλ‹€. (이 경우 μΈν„°νŽ˜μ΄μŠ€μ™€ κ΅¬ν˜„λΆ€λ₯Ό μ΄μ–΄μ£ΌλŠ” ν΄λž˜μŠ€κ°€ λ”°λ‘œ μ‘΄μž¬ν•΄μ•Όν•œλ‹€.)

 

 


 

 

 

Q. ν΄λž˜μŠ€λŠ” ν΄λž˜μŠ€μ—κ²Œ 닀쀑 상속이 μ•ˆλ˜μ§€λ§Œ μΈν„°νŽ˜μ΄μŠ€λŠ” κ°€λŠ₯ν•˜λ‹€. μ™œ κ·ΈλŸ°κ²ƒμΌκΉŒ?

A.
닀이아λͺ¬λ“œ 문제λ₯Ό μœ λ°œν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. ν•œ ν΄λž˜μŠ€κ°€ λ‹€λ₯Έ 두 ν΄λž˜μŠ€μ—κ²Œ 상속을 λ°›μ•˜λ‹€κ³  κ°€μ •ν•˜μž. 두 ν΄λž˜μŠ€μ— 같은 λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜ (λ™μΌν•œ 이름, λ™μΌν•œ λ§€κ°œλ³€μˆ˜)κ°€ μžˆλ‹€λ©΄ ν•˜μœ„(상속을 받은) ν΄λž˜μŠ€λŠ” ν˜Όλ™ν•˜κ²Œ λœλ‹€. μ–΄λ–€ μƒμœ„ ν΄λž˜μŠ€μ—μ„œ λ©”μ„œλ“œλ₯Ό λ°›μ•„μ˜¬μ§€ 말이닀. 그렇기에 ν΄λž˜μŠ€λŠ” ꡬ체적으둜 λ©”μ„œλ“œλ₯Ό μ •μ˜ν•˜κΈ° λ•Œλ¬Έμ— 닀쀑상속이 μ•ˆλœλ‹€.

 

 ν•˜μ§€λ§Œ μΈν„°νŽ˜μ΄μŠ€λŠ” 좔상적인 λ©”μ„œλ“œλ₯Ό μ •μ˜ν•˜κΈ° λ•Œλ¬Έμ— λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜κ°€ 같아도 λ¬΄κ΄€ν•˜λ‹€. 

 

 

 

 


 

 

 

1)  κΉ€μ˜ν•œμ˜ μŠ€ν”„λ§ 기본편 좜처

 

μŠ€ν”„λ§ 핡심 원리 - 기본편 κ°•μ˜ | κΉ€μ˜ν•œ - μΈν”„λŸ°

κΉ€μ˜ν•œ | μŠ€ν”„λ§ μž…λ¬Έμžκ°€ 예제λ₯Ό λ§Œλ“€μ–΄κ°€λ©΄μ„œ μŠ€ν”„λ§μ˜ 핡심 원리λ₯Ό μ΄ν•΄ν•˜κ³ , μŠ€ν”„λ§ κΈ°λ³ΈκΈ°λ₯Ό ν™•μ‹€νžˆ λ‹€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€., μŠ€ν”„λ§ 핡심 원리λ₯Ό μ΄ν•΄ν•˜κ³ , μ„±μž₯ν•˜λŠ” λ°±μ—”λ“œ κ°œλ°œμžκ°€ λ˜μ–΄λ³΄

www.inflearn.com

 

 

 

2) μΈν„°νŽ˜μ΄μŠ€ 총정리 좜처

 

[Java] μΈν„°νŽ˜μ΄μŠ€(interface) 총 정리

μ„œλ‘  Spring κ³΅λΆ€ν•˜λ˜ 쀑 interface뢀뢄에 λŒ€ν•΄ 이해가 λΆ€μ‘±ν•œ 것 κ°™μ•„ μžμ„Έν•˜κ²Œ ν•œλ²ˆ 정리해 보렀고 ν•©λ‹ˆλ‹€. λͺ©μ°¨ 1. μΈν„°νŽ˜μ΄μŠ€λž€? 2. μΈν„°νŽ˜μ΄μŠ€μ˜ μž‘μ„± 방법 3. μΈν„°νŽ˜μ΄μŠ€μ˜ 상속 4. μΈν„°νŽ˜μ΄μŠ€μ˜

dkswnkk.tistory.com

 

 

 

3) TCPSchool 좜처

 

μ½”λ”©κ΅μœ‘ ν‹°μ”¨ν”ΌμŠ€μΏ¨

4μ°¨μ‚°μ—…ν˜λͺ…, μ½”λ”©κ΅μœ‘, μ†Œν”„νŠΈμ›¨μ–΄κ΅μœ‘, μ½”λ”©κΈ°μ΄ˆ, SWμ½”λ”©, κΈ°μ΄ˆμ½”λ”©λΆ€ν„° μžλ°” 파이썬 λ“±

tcpschool.com

 

 

 

 

4) 닀쀑 상속 좜처

 

[Java] μžλ°”μ˜ 닀쀑상속 (feat. μΈν„°νŽ˜μ΄μŠ€μ™€ μΆ”μƒν΄λž˜μŠ€)

μ•Œκ³  μ‹œμž‘ν•΄μ•Ό ν•  λ‚΄μš© 1. μžλ°”μ—μ„œ 클래슀의 닀쀑 상속은 λΆˆκ°€λŠ₯ν•˜λ‹€. 2. ν•˜μ§€λ§Œ μΈν„°νŽ˜μ΄μŠ€μ˜ 닀쀑 상속은 κ°€λŠ₯ν•˜λ‹€. why? μΈν„°νŽ˜μ΄μŠ€μ™€ μΆ”μƒν΄λž˜μŠ€λ₯Ό κ³΅λΆ€ν•˜λ˜ 쀑, μžλ°”μ˜ 닀쀑상속 μ΄λž€ κ°œλ…

junior-datalist.tistory.com

 

+ Recent posts