Amenable
Amenable's Blog
Amenable
  • λΆ„λ₯˜ 전체보기 (189)
    • πŸ“‚ JAVA (87)
      • μ΄νŽ™ν‹°λΈŒ μžλ°” (65)
      • μ£Όμš” κ°œλ… (22)
    • πŸ“‚ 개발 μ„œμ  (22)
      • μ‹€μš©μ£Όμ˜ ν”„λ‘œκ·Έλž˜λ¨Έ (1)
      • 객체지ν–₯의 사싀과 μ˜€ν•΄ (2)
      • 클린 μ½”λ“œ (8)
      • ν•¨κ»˜ 자라기 (1)
      • 그림으둜 λ°°μš°λŠ” HTTP&Network Basic (10)
    • πŸ“‚ λ°μ΄ν„°λ² μ΄μŠ€ (8)
      • κ°œλ… (8)
      • λ¬Έμ œν’€μ΄ (0)
    • πŸ“‚ λ„€νŠΈμ›Œν¬ (14)
      • κ°œλ… (6)
      • 성곡과 μ‹€νŒ¨λ₯Ό κ²°μ •ν•˜λŠ” 1%의 λ„€νŠΈμ›Œν¬ 원리 (8)
    • πŸ“‚ μŠ€ν”„λ§ (13)
      • κΈ°λ³Έ κ°œλ… (13)
    • πŸ“‚ WEB (5)
    • πŸ“‚ 자료ꡬ쑰 (12)
      • κ°œλ… (2)
      • μ •λ ¬ (8)
      • 트리 (2)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜ (10)
      • μ΅œμ†Œμ‹ μž₯트리 (2)
      • μ΅œλ‹¨ 경둜 (2)
      • λ¬Έμžμ—΄ (2)
      • ETC (4)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜_λ¬Έμ œν’€μ΄ (4)
      • BOJ_λ°±μ€€ (4)
    • πŸ“‚ ν”„λ‘œκ·Έλž˜λ° (3)
    • πŸ“‚ DevOps (2)
      • 배포 (2)
    • πŸ“‚ ν›„κΈ° (8)
      • μš°μ•„ν•œ ν…Œν¬μ½”μŠ€(ν”„λ¦¬μ½”μŠ€) (4)
      • 2023λ…„ (3)
      • 2024λ…„ (1)
    • πŸ“‚ 회고 (1)
      • 2023λ…„ (1)

λΈ”λ‘œκ·Έ 메뉴

  • πŸš€ GitHub

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
Amenable

Amenable's Blog

μƒμ†λ³΄λ‹€λŠ” μ»΄ν¬μ§€μ…˜μ„ μ‚¬μš©ν•˜λΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ18)]
πŸ“‚ JAVA/μ΄νŽ™ν‹°λΈŒ μžλ°”

μƒμ†λ³΄λ‹€λŠ” μ»΄ν¬μ§€μ…˜μ„ μ‚¬μš©ν•˜λΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ18)]

2023. 4. 28. 07:32

  상속은 μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•˜λŠ” κ°•λ ₯ν•œ μˆ˜λ‹¨μ΄μ§€λ§Œ, 항상 μ΅œμ„ μ€ μ•„λ‹ˆλ‹€. 잘λͺ» μ‚¬μš©ν•˜λ©΄ 였λ₯˜λ₯Ό λ‚΄κΈ° μ‰¬μš΄ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό λ§Œλ“€κ²Œ λœλ‹€. μƒμœ„ ν΄λž˜μŠ€μ™€ ν•˜μœ„ 클래슀λ₯Ό λͺ¨λ‘ 같은 ν”„λ‘œκ·Έλž˜λ¨Έκ°€ ν†΅μ œν•˜λŠ” νŒ¨ν‚€μ§€ μ•ˆμ—μ„œλΌλ©΄ 상속도 μ•ˆμ „ν•œ 방법이닀.

  ν™•μž₯ν•  λͺ©μ μœΌλ‘œ μ„€κ³„λ˜μ—ˆκ³  λ¬Έμ„œν™”λ„ 잘 된 ν΄λž˜μŠ€λ„ λ§ˆμ°¬κ°€μ§ˆ μ•ˆμ „ν•˜λ‹€. ν•˜μ§€λ§Œ 일반적인 ꡬ체 클래슀λ₯Ό νŒ¨ν‚€μ§€ 경계λ₯Ό λ„˜μ–΄, 즉 λ‹€λ₯Έ νŒ¨ν‚€μ§€μ˜ ꡬ체 클래슀λ₯Ό μƒμ†ν•˜λŠ” 일은 μœ„ν—˜ν•˜λ‹€.

  μ—¬κΈ°μ„œ λ‹€λ£° '상속'은 ν΄λž˜μŠ€κ°€ λ‹€λ₯Έ 클래슀λ₯Ό ν™•μž₯ν•˜λŠ” 'κ΅¬ν˜„ 상속'을 λ§ν•œλ‹€. ν΄λž˜μŠ€κ°€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜κ±°λ‚˜ μΈν„°νŽ˜μ΄μŠ€κ°€ λ‹€λ₯Έ μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν™•μž₯ν•˜λŠ” 'μΈν„°νŽ˜μ΄μŠ€ 상속'κ³ΌλŠ” λ¬΄κ΄€ν•œ 것이닀.

  λ©”μ„œλ“œ 호좜과 달리 상속은 μΊ‘μŠν™”λ₯Ό κΉ¨λœ¨λ¦°λ‹€. λ¬Έμ œκ°€ λ°œμƒν•˜λŠ” 2κ°€μ§€ μ΄μœ μ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄κ³  해결책에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž.

 

문제 1. μƒμœ„ ν΄λž˜μŠ€κ°€ μ–΄λ–»κ²Œ κ΅¬ν˜„λ˜λŠλƒμ— 따라 ν•˜μœ„ 클래슀의 λ™μž‘μ— 이상이 생길 수 μžˆλ‹€. πŸ›«

public class InstrumentedHashSet<E> extends HashSet<E> {

    // μΆ”κ°€λœ μ›μ†Œμ˜ 수
    private int addCount = 0;

    public InstrumentedHashSet() {
    }

    public InstrumentedHashSet(int initCap, float loadFactor) {
        super(initCap, loadFactor);
    }

    @Override
    public boolean add(E e){
        addCount++;
        return super.add(e);
    }

    @Override
    public boolean addAll(Collection<? extends E> c){
        addCount += c.size();
        return super.addAll(c);
    }

    public int getAddCount() {
        return addCount;
    }
}

  μ„±λŠ₯을 높이렀면 HashSet은 처음 μƒμ„±λœ 이후 μ›μ†Œκ°€ λͺ‡ 개 λ”ν•΄μ‘ŒλŠ”μ§€ μ•Œ 수 μžˆμ–΄μ•Ό ν•œλ‹€. κ·ΈλŸ¬ν•œ 점을 κ³ λ €ν•˜μ—¬ HashSet을 μƒμ†ν•œ InstrumentedHashSetμ—μ„œ addCount λ³€μˆ˜λ₯Ό μΆ”κ°€ν•˜κ³ , add와 addAll λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ”©ν•˜μ˜€λ‹€. 그리고 μ•„λž˜μ™€ 같은 μž‘μ—…μ„ ν•˜μ˜€λ‹€κ³  생각해 보자.

 

public static void main(String[] args) {
    InstrumentedHashSet<String> s = new InstrumentedHashSet<>();
    s.addAll(List.of("ν‹±", "탁탁", "νŽ‘"));
    System.out.println(s.getAddCount());
}

  3을 좜λ ₯ν•  거라고 κΈ°λŒ€ν•˜κ² μ§€λ§Œ, μ‹€μ œλ‘œλŠ” 6을 좜λ ₯ν•œλ‹€. κ·Έ μ΄μœ λŠ” HashSet의 addAll λ©”μ„œλ“œκ°€ addλ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄ κ΅¬ν˜„λœ 데 μžˆλ‹€.

// μƒμœ„ 클래슀(AbstractCollection)μ—μ„œμ˜ addAll λ©”μ„œλ“œ
public boolean addAll(Collection<? extends E> c) {
    boolean modified = false;
    for (E e : c)
        if (add(e))
            modified = true;
    return modified;
}

  μš°λ¦¬κ°€ λ§Œλ“  InstrumentedHashSetμ—μ„œ HashSet의 addAll을 ν˜ΈμΆœν•˜κΈ° 전에 addCount에 3을 λ”ν•¨μœΌλ‘œμ¨ 이미 μ—…λ°μ΄νŠΈν•΄ μ£Όμ—ˆλ‹€. ν•˜μ§€λ§Œ HashSetμ—μ„œ addAll은 각 μ›μ†Œλ₯Ό add λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•΄ μΆ”κ°€ν•˜κ³  μžˆλ‹€. κ·Έ κ²°κ³Ό μ˜€λ²„λΌμ΄λ”©ν•œ addκ°€ λΆˆλ¦¬λ©΄μ„œ λ‹€μ‹œ ν•œλ²ˆ addCount에 3을 더해쀀 것이닀. κ·Έλž˜μ„œ 6이 λ‚˜μ™”λ‹€.

  λ¬Όλ‘  ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ addAll λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•˜μ§€ μ•ŠμœΌλ©΄ 문제λ₯Ό κ³ μΉ  수 μžˆλ‹€. ν•˜μ§€λ§Œ λ‹Ήμž₯은 μ œλŒ€λ‘œ λ™μž‘ν• μ§€ λͺ¨λ₯΄λ‚˜, HashSet의 addAll이 add λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄ κ΅¬ν˜„ν–ˆμŒμ„ κ°€μ •ν•œ ν•΄λ²•μ΄λΌλŠ” ν•œκ³„λ₯Ό μ§€λ‹Œλ‹€.

  그리고 allAll λ©”μ„œλ“œλ₯Ό λ‹€λ₯Έ μ‹μœΌλ‘œ μž¬μ •μ˜ν•΄μ„œλ„ 문제λ₯Ό κ³ μΉ  수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄ μ£Όμ–΄μ§„ μ»¬λ ‰μ…˜μ„ μˆœνšŒν•˜λ©° μ›μ†Œ ν•˜λ‚˜λ‹Ή add λ©”μ„œλ“œλ₯Ό ν•œ 번만 ν˜ΈμΆœν•˜κ²Œ ν•˜λŠ” 것이닀. ν•˜μ§€λ§Œ μƒμœ„ 클래슀의 λ©”μ„œλ“œ λ™μž‘μ„ λ‹€μ‹œ κ΅¬ν˜„ν•˜λŠ” 방식은 μ–΄λ ΅κ³ , μ‹œκ°„λ„ λ“€κ³ , 자칫 였λ₯˜λ₯Ό λ‚΄κ±°λ‚˜ μ„±λŠ₯을 λ–¨μ–΄λœ¨λ¦΄ 수 μžˆλ‹€λŠ” λ¬Έμ œκ°€ μžˆλ‹€. λ˜ν•œ ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œλŠ” μ ‘κ·Όν•  수 μ—†λŠ” private ν•„λ“œλ₯Ό 써야 ν•˜λŠ” 상황이라면 이 λ°©μ‹μœΌλ‘œλŠ” κ΅¬ν˜„ μžμ²΄κ°€ λΆˆκ°€λŠ₯ν•˜λ‹€λŠ” λ¬Έμ œκ°€ μžˆλ‹€.

 

문제 2. μƒμœ„ ν΄λž˜μŠ€μ— μƒˆλ‘œμš΄ λ©”μ„œλ“œκ°€ μΆ”κ°€λœλ‹€λ©΄ ν•˜μœ„ ν΄λž˜μŠ€κ°€ 깨질 수 μžˆλ‹€. πŸ›¬

  μƒμœ„ 클래슀의 κ΅¬ν˜„ λ°©μ‹μ˜ λ³€ν™”λΏλ§Œ μ•„λ‹ˆλΌ μƒμœ„ ν΄λž˜μŠ€μ—μ„œ μƒˆλ‘œμš΄ λ©”μ„œλ“œκ°€ μƒκΈ°λŠ” κ²½μš°μ—λ„ ν•˜μœ„ ν΄λž˜μŠ€κ°€ μ‰½κ²Œ 깨질 수 μžˆλ‹€.

  예λ₯Ό λ“€μ–΄ μƒμœ„ ν΄λž˜μŠ€μ—μ„œ λ³΄μ•ˆμ„ 이유둜 μ»¬λ ‰μ…˜μ— μΆ”κ°€λœ λͺ¨λ“  μ›μ†Œκ°€ νŠΉμ • 쑰건을 λ§Œμ‘±ν•΄μ•Ό ν•˜λŠ” κ²½μš°κ°€ μžˆλ‹€κ³  ν•˜μž. 그러면 κ·Έ μ»¬λ ‰μ…˜μ„ μƒμ†ν•˜μ—¬ νŠΉμ • μ›μ†Œλ₯Ό μΆ”κ°€ν•˜λŠ” λͺ¨λ“  λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•΄ ν•„μš”ν•œ 쑰건을 λ¨Όμ € κ²€μ‚¬ν•˜κ²Œλ” ν•˜λ©΄ λœλ‹€.

  ν•˜μ§€λ§Œ ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ μœ„μ˜ 경우λ₯Ό κ³ λ €ν•˜μ§€ μ•Šκ³  κΈ°μ‘΄ λ°©μ‹λŒ€λ‘œ μ›μ†Œλ₯Ό μΆ”κ°€ν•˜κ²Œ λœλ‹€λ©΄ 'ν—ˆμš©λ˜μ§€ μ•Šμ€' μ›μ†Œλ₯Ό μΆ”κ°€ν•˜λŠ” 상황이 λ°œμƒν•  수 μžˆλ‹€. 그리고 μƒμœ„ν΄λž˜μŠ€μ—μ„œ λ©”μ„œλ“œκ°€ μΆ”κ°€λ˜μ—ˆλ‹€λŠ” 사싀을 ν•˜μœ„ν΄λž˜μŠ€μ—μ„œ μΈμ§€ν•˜κΈ°κ°€ 쉽지 μ•Šλ‹€,

 

ν•΄κ²°μ±…. μ»΄ν¬μ§€μ…˜(Composition)을 μ‚¬μš©ν•˜λΌ πŸ’Ί

  μ•žμ„œ μ‚΄νŽ΄λ³Έ μƒμ†μ˜ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ λ°©λ²•μœΌλ‘œ μ»΄ν¬μ§€μ…˜(Composition)μ΄λΌλŠ” 것이 μžˆλ‹€. κΈ°μ‘΄ 클래슀λ₯Ό ν™•μž₯ν•˜λŠ” λŒ€μ‹ , μƒˆλ‘œμš΄ 클래슀λ₯Ό λ§Œλ“€κ³  private ν•„λ“œλ‘œ κΈ°μ‘΄ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°ν•˜κ²Œ ν•˜λŠ” 것이닀.

// μž¬μ‚¬μš©ν•  수 μžˆλŠ” 전달 클래슀
public class ForwardingSet<E> implements Set<E> {
    private final Set<E> s;
    public ForwardingSet(Set<E> s){
        this.s = s;
    }
    
    public void clear()               { s.clear(); }
    public boolean contains(Object o) { return s.contains(o); }
    public boolean isEmpty()        { return s.isEmpty(); }
    public int size()               { return s.size(); }
    public Iterator<E> iterator()   { return s.iterator(); }
    public boolean add(E e)         { return s.add(e); }
    public boolean remove(Object o) { return s.remove(o); }
    public boolean containsAll(Collection<?> c)
                                    { return s.containsAll(c); }
    public boolean addAll(Collection<? extends E> c)
                                    { return s.addAll(c); }
    public boolean removeAll(Collection<?> c)
                                    { return s.removeAll(c); }
    public boolean retainAll(Collection<?> c)
                                    { return s.retainAll(c); }
    public Object[] toArray()       { return s.toArray(); }
    public <T> T[] toArray(T[] a)   { return s.toArray(a); }
    @Override
    public boolean equals(Object o) { return s.equals(o); }
    @Override
    public int hashCode()           { return s.hashCode(); }
    @Override
    public String toString()        { return s.toString(); }
}
// 래퍼 클래슀 - 상속 λŒ€μ‹  μ»΄ν¬μ§€μ…˜μ„ μ‚¬μš©
public class InstrumentedSet<E> extends ForwardingSet<E> {

    private int addCount = 0;

    public InstrumentedSet(Set<E> s) {
        super(s);
    }

    @Override
    public boolean add(E e){
        addCount++;
        return super.add(e);
    }

    @Override
    public boolean addAll(Collection<? extends E> c) {
        addCount += c.size();
        return super.addAll(c);
    }

    public int getAddCount() {
        return addCount;
    }
}

  μš©μ–΄λ₯Ό μ‚΄νŽ΄λ³΄μž.

  • μ»΄ν¬μ§€μ…˜(Composition)
    κΈ°μ‘΄ ν΄λž˜μŠ€κ°€ μƒˆλ‘œμš΄ ν΄λž˜μŠ€μ˜ κ΅¬μ„±μš”μ†Œλ‘œ μ“°μΈλ‹€λŠ” λœ»
  • 전달(Forwarding)
    μƒˆ ν΄λž˜μŠ€μ˜ μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œλ“€μ€ κΈ°μ‘΄ ν΄λž˜μŠ€μ˜ λŒ€μ‘ν•˜λŠ” λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•΄ κ·Έ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜λŠ” κ²ƒ
  • 전달 λ©”μ„œλ“œ(Forwarding Method)
    μƒˆ ν΄λž˜μŠ€μ˜ λ©”μ„œλ“œλ“€μ„ μ „λ‹¬ν•˜λŠ” κ²ƒ
  • 래퍼 클래슀(Wrapper Class)
    InstrumentedSetκ³Ό κ°™μ΄ λ‹€λ₯Έ Set μΈμŠ€ν„΄μŠ€λ₯Ό κ°μ‹Έκ³ (wrap) μžˆλŠ” κ²ƒ

  μ»΄ν¬μ§€μ…˜μ„ μ‚¬μš©ν•˜λ©΄ 맨 처음 μ˜ˆμ‹œμΈ InstrumentedHashSetκ³Ό 달리 μƒμœ„ ν΄λž˜μŠ€μ— 영ν–₯을 λ°›μ§€ μ•Šκ²Œ λœλ‹€.

public static void main(String[] args) {
    InstrumentedSet<String> s = new InstrumentedSet<>(new HashSet<>());
    s.addAll(List.of("ν‹±", "탁탁", "νŽ‘"));
    System.out.println(s.getAddCount());
}

  즉, μ‚¬μ΄λ“œ μ΄νŽ™νŠΈκ°€ μ—†κ²Œ λœλ‹€. InstrumentedHashSetκ³Ό 달리 InstrumentedSet을 μ‚¬μš©ν•˜λ©΄ 6이 μ•„λ‹Œ μš°λ¦¬κ°€ μ˜λ„ν–ˆλ˜ λŒ€λ‘œ 3이 λ‚˜μ˜€κ²Œ λœλ‹€.

  μ»΄ν¬μ§€μ…˜μ„ μ‚¬μš©ν•˜λ©΄ μƒˆλ‘œμš΄ ν΄λž˜μŠ€λŠ” κΈ°μ‘΄ 클래슀의 λ‚΄λΆ€ κ΅¬ν˜„ λ°©μ‹μ˜ 영ν–₯μ—μ„œ λ²—μ–΄λ‚˜λ©°(문제 1 ν•΄κ²°), 심지어 κΈ°μ‘΄ ν΄λž˜μŠ€μ— μƒˆλ‘œμš΄ λ©”μ„œλ“œκ°€ μΆ”κ°€λ˜λ”λΌλ„ μ „ν˜€ 영ν–₯을 λ°›μ§€ μ•ŠλŠ”λ‹€(문제 2 ν•΄κ²°). κ·ΈλŸ¬λ―€λ‘œ μΊ‘μŠν™”κ°€ μ™„λ²½νžˆ μ§€μΌœμ§€κ²Œ λœλ‹€. (Set이 μ•„λ‹Œ HashSetμ—λ§Œ λ©”μ„œλ“œκ°€ μΆ”κ°€λœλ‹€λ©΄ Forwarding μ½”λ“œλŠ” λ°”λ€Œμ§€ μ•ŠλŠ”λ‹€. λ§Œμ•½ μΈν„°νŽ˜μ΄μŠ€μ— μƒˆλ‘œμš΄ λ©”μ„œλ“œκ°€ μΆ”κ°€λœλ‹€λ©΄ λ³€ν™”λ₯Ό μ•Œμ•„차릴 μˆ˜λ°–에 μ—†λ‹€.)

  λ˜ν•œ, μ»΄ν¬μ§€μ…˜μ„ μ΄μš©ν•΄μ„œ ν•œ 번만 κ΅¬ν˜„ν•΄ 두면 μ–΄λ– ν•œ Set κ΅¬ν˜„μ²΄λΌλ„ 계츑할 수 있으며, κΈ°μ‘΄ μƒμ„±μžλ“€κ³Όλ„ ν•¨κ»˜ μ‚¬μš©ν•  수 있게 λœλ‹€.

 

ν•΄λ‹Ή 글은 λ°±κΈ°μ„  λ‹˜μ˜ 'μ΄νŽ™ν‹°λΈŒ μžλ°” μ™„λ²½ 곡랡'을 μ°Έκ³ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

'πŸ“‚ JAVA > μ΄νŽ™ν‹°λΈŒ μžλ°”' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

좔상 ν΄λž˜μŠ€λ³΄λ‹€λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μš°μ„ ν•˜λΌ(μΈν„°νŽ˜μ΄μŠ€μ˜ μž₯점)(1) - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ20)]  (0) 2023.05.07
상속을 κ³ λ €ν•΄ μ„€κ³„ν•˜κ³  λ¬Έμ„œν™”ν•˜λΌ. κ·ΈλŸ¬μ§€ μ•Šμ•˜λ‹€λ©΄ 상속을 κΈˆμ§€ν•˜λΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ19)]  (0) 2023.04.29
λ³€κ²½ κ°€λŠ₯성을 μ΅œμ†Œν™”ν•˜λΌ(λΆˆλ³€ 클래슀λ₯Ό λ§Œλ“€ λ•Œ κ³ λ €ν•  것)(3) - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ17)]  (0) 2023.04.27
λ³€κ²½ κ°€λŠ₯성을 μ΅œμ†Œν™”ν•˜λΌ(λΆˆλ³€ 클래슀의 μž₯점, 단점, 단점 λŒ€μ²˜ 방법)(2) - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ17)]  (0) 2023.04.27
λ³€κ²½ κ°€λŠ₯성을 μ΅œμ†Œν™”ν•˜λΌ(λΆˆλ³€ 클래슀λ₯Ό λ§Œλ“œλŠ” λ‹€μ„― κ°€μ§€ κ·œμΉ™)(1) - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ17)]  (0) 2023.04.27
    'πŸ“‚ JAVA/μ΄νŽ™ν‹°λΈŒ μžλ°”' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • 좔상 ν΄λž˜μŠ€λ³΄λ‹€λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μš°μ„ ν•˜λΌ(μΈν„°νŽ˜μ΄μŠ€μ˜ μž₯점)(1) - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ20)]
    • 상속을 κ³ λ €ν•΄ μ„€κ³„ν•˜κ³  λ¬Έμ„œν™”ν•˜λΌ. κ·ΈλŸ¬μ§€ μ•Šμ•˜λ‹€λ©΄ 상속을 κΈˆμ§€ν•˜λΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ19)]
    • λ³€κ²½ κ°€λŠ₯성을 μ΅œμ†Œν™”ν•˜λΌ(λΆˆλ³€ 클래슀λ₯Ό λ§Œλ“€ λ•Œ κ³ λ €ν•  것)(3) - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ17)]
    • λ³€κ²½ κ°€λŠ₯성을 μ΅œμ†Œν™”ν•˜λΌ(λΆˆλ³€ 클래슀의 μž₯점, 단점, 단점 λŒ€μ²˜ 방법)(2) - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ17)]
    Amenable
    Amenable
    CS, μžλ°”, 자료ꡬ쑰, μ•Œκ³ λ¦¬μ¦˜, μŠ€ν”„λ§, μŠ€ν”„λ§ λΆ€νŠΈμ— ν•΄λ‹Ήν•˜λŠ” κ°œλ°œμ— κ΄€ν•œ λ‚΄μš©μ„ κ³΅μœ ν•©λ‹ˆλ‹€.

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”