Home > Backend > CS > πŸ’Ύ [CS] 좔상화(Abstraction)

πŸ’Ύ [CS] 좔상화(Abstraction)
CS

πŸ’Ύ [CS] 좔상화(Abstraction).

1️⃣ 좔상화(Abstraction).

  • 좔상화(Abstraction) λŠ” 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°(Object-Oriented-Programming, OOP)의 μ€‘μš”ν•œ κ°œλ… 쀑 ν•˜λ‚˜λ‘œ, λ³΅μž‘ν•œ μ‹œμŠ€ν…œμ—μ„œ 핡심적인 κ°œλ…μ΄λ‚˜ κΈ°λŠ₯λ§Œμ„ μΆ”λ €λ‚΄μ–΄ λ‹¨μˆœν™”ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€.
    • 이λ₯Ό 톡해 λΆˆν•„μš”ν•œ μ„ΈλΆ€ 사항을 감좔고, μ€‘μš”ν•œ μ†μ„±μ΄λ‚˜ ν–‰μœ„λ§Œμ„ λ…ΈμΆœν•˜μ—¬ μ‹œμŠ€ν…œμ„ 보닀 κ°„λ‹¨ν•˜κ²Œ μ΄ν•΄ν•˜κ³  μ‚¬μš©ν•  수 있게 ν•©λ‹ˆλ‹€.

1️⃣ μΆ”μƒν™”μ˜ 핡심 κ°œλ….

  • 1. 본질적인 κ²ƒλ§Œ λ…ΈμΆœ.
    • μ‹œμŠ€ν…œμ˜ λ³΅μž‘ν•œ λ‚΄λΆ€ κ΅¬ν˜„μ„ 숨기고, μ™ΈλΆ€μ—μ„œλŠ” μ€‘μš”ν•œ κΈ°λŠ₯μ΄λ‚˜ μ†μ„±λ§Œμ„ μ‚¬μš©ν•  수 μžˆλ„λ‘ μ„€κ³„ν•©λ‹ˆλ‹€.
      • 예λ₯Ό λ“€μ–΄, μžλ™μ°¨λ₯Ό μš΄μ „ν•  λ•Œ μš΄μ „μžλŠ” μ—”μ§„μ˜ μž‘λ™ μ›λ¦¬λ‚˜ λ‚΄λΆ€ ꡬ쑰λ₯Ό λͺ°λΌλ„, μš΄μ „λŒ€, 가속 νŽ˜λ‹¬, 브레이크 λ“±μ˜ μ€‘μš”ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 μžλ™μ°¨λ₯Ό μ‘°μž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 2. λ³΅μž‘μ„± κ°μ†Œ.
    • 좔상화λ₯Ό 톡해 μ‚¬μš©μžμ—κ²Œ λ³΅μž‘ν•œ μ‹œμŠ€ν…œμ„ λ‹¨μˆœν•˜κ²Œ 보이도둝 ν•˜μ—¬, μ‚¬μš©μžκ°€ μ‹œμŠ€ν…œμ„ μ‰½κ²Œ μ΄ν•΄ν•˜κ³  μ‚¬μš©ν•  수 있게 ν•©λ‹ˆλ‹€.
      • μ΄λŠ” 특히 큰 μ‹œμŠ€ν…œμ΄λ‚˜ 라이브러리λ₯Ό 섀계할 λ•Œ μ€‘μš”ν•©λ‹ˆλ‹€.
  • 3. μž¬μ‚¬μš©μ„±κ³Ό μœ μ§€λ³΄μˆ˜μ„± ν–₯상.
    • 좔상화λ₯Ό μ‚¬μš©ν•˜λ©΄, μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ 높이고 μœ μ§€λ³΄μˆ˜μ„±μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.
      • λ™μΌν•œ 좔상 μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” μ—¬λŸ¬ ν΄λž˜μŠ€κ°€ μžˆμ„ λ•Œ, ꡬ체적인 클래슀 κ΅¬ν˜„μ„ μ‹ κ²½ 쓰지 μ•Šκ³  μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 μΌκ΄€λœ λ°©μ‹μœΌλ‘œ μ½”λ“œλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2️⃣ μΆ”μƒν™”μ˜ 예

  • μΆ”μƒν™”λŠ” 주둜 좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€ λ₯Ό 톡해 κ΅¬ν˜„λ©λ‹ˆλ‹€.

좔상 클래슀.

  • 좔상 ν΄λž˜μŠ€λŠ” ν•˜λ‚˜ μ΄μƒμ˜ 좔상 λ©”μ„œλ“œλ₯Ό μ΄ˆν•¨ν•˜λŠ” ν΄λž˜μŠ€μž…λ‹ˆλ‹€.
  • 좔상 λ©”μ„œλ“œλŠ” μ„ μ–Έλ§Œ λ˜μ–΄ 있고, ꡬ체적인 κ΅¬ν˜„μ€ ν•΄λ‹Ή 클래슀λ₯Ό μƒμ†λ°›λŠ” ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ μ œκ³΅ν•΄μ•Ό ν•©λ‹ˆλ‹€.
abstract class Animal {
    abstract void sound(); // 좔상 λ©”μ„œλ“œ
    
    void breathe() { // ꡬ체적인 λ©”μ„œλ“œ
        System.out.println("Breathing");
    }
}

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("Woof");
    }
}

class Cat extends Animal {
    @Override
    void sound() {
        System.out.println("Meow");
    }
}
  • 이 μ˜ˆμ—μ„œ Animal ν΄λž˜μŠ€λŠ” 좔상 클래슀이고, sound() λ©”μ„œλ“œλŠ” 좔상 λ©”μ„œλ“œμž…λ‹ˆλ‹€.
  • Dog 와 Cat ν΄λž˜μŠ€λŠ” sound() λ©”μ„œλ“œλ₯Ό ꡬ체적으둜 κ΅¬ν˜„ν•©λ‹ˆλ‹€.
  • Animal ν΄λž˜μŠ€λŠ” λ™λ¬Όμ˜ 일반적인 νŠΉμ§•μΈ breath() λ©”μ„œλ“œλ₯Ό ν¬ν•¨ν•˜μ§€λ§Œ, sound() λŠ” λ™λ¬Όλ§ˆλ‹€ λ‹€λ₯΄λ―€λ‘œ ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ κ΅¬μ²΄ν™”λ©λ‹ˆλ‹€.

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

  • μΈν„°νŽ˜μ΄μŠ€λŠ” μΆ”μƒν™”μ˜ 또 λ‹€λ₯Έ ν˜•νƒœλ‘œ, ν΄λž˜μŠ€κ°€ κ΅¬ν˜„ν•΄μ•Ό ν•˜λŠ” λ©”μ„œλ“œμ˜ 선언을 ν¬ν•¨ν•©λ‹ˆλ‹€.
  • μΈν„°νŽ˜μ΄μŠ€ μžμ²΄λŠ” κ΅¬ν˜„μ„ 가지지 μ•ŠμœΌλ©°, κ΅¬ν˜„μ€ 이λ₯Ό κ΅¬ν˜„ν•˜λŠ” ν΄λž˜μŠ€μ—μ„œ μ œκ³΅λ©λ‹ˆλ‹€.
interface Flyable {
    void fly(); // 좔상 λ©”μ„œλ“œ
}

class Bird implements Flyable {
    @Override
    public void fly() {
        System.out.println("Bird is flying");
    }
}

class Airplane implements Flyable {
    @Override
    public void fly() {
        System.out.println("Airplane is flying");
    }
}
  • μ—¬κΈ°μ„œ Flyable μΈν„°νŽ˜μ΄μŠ€λŠ” fly() λΌλŠ” 좔상 λ©”μ„œλ“œλ₯Ό μ„ μ–Έν•˜κ³  있으며, Bird 와 Airplane ν΄λž˜μŠ€λŠ” 각각 이 λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•©λ‹ˆλ‹€.
  • Flyable μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해, λΉ„ν–‰ν•  수 μžˆλŠ” 객체듀은 λ™μΌν•œ λ°©μ‹μœΌλ‘œ 취급될 수 μžˆμŠ΅λ‹ˆλ‹€.

3️⃣ μΆ”μƒν™”μ˜ μž₯점.

  • 1. μ½”λ“œμ˜ κ°„κ²°μ„±.
    • μ€‘μš”ν•œ λΆ€λΆ„λ§Œ 남기고 λ³΅μž‘ν•œ κ΅¬ν˜„ μ„ΈλΆ€ 사항을 숨겨, μ½”λ“œλ₯Ό κ°„κ²°ν•˜κ³  μ΄ν•΄ν•˜κΈ° μ‰½κ²Œ λ§Œλ“­λ‹ˆλ‹€.
  • 2. μœ μ—°ν•œ 섀계.
    • ꡬ체적인 κ΅¬ν˜„μ— μ˜μ‘΄ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, λ‹€μ–‘ν•œ κ΅¬ν˜„μ²΄λ₯Ό μ‰½κ²Œ κ΅μ²΄ν•˜κ±°λ‚˜ ν™•μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 3. μž¬μ‚¬μš©μ„± 증가.
    • 좔상 ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 μ—¬λŸ¬ ν΄λž˜μŠ€μ—μ„œ κ³΅ν†΅μ μœΌλ‘œ μ‚¬μš©λ  수 μžˆλŠ” ꡬ쑰λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

4️⃣ μš”μ•½.

  • μΆ”μƒν™”λŠ” λ³΅μž‘ν•œ μ‹œμŠ€ν…œμ—μ„œ λΆˆν•„μš”ν•œ μ„ΈλΆ€ 사항을 감좔고 μ€‘μš”ν•œ λΆ€λΆ„λ§Œμ„ λ…ΈμΆœν•˜μ—¬ μ‹œμŠ€ν…œμ„ κ°„λ‹¨ν•˜κ²Œ λ§Œλ“œλŠ” κ°œλ…μž…λ‹ˆλ‹€.
    • 이λ₯Ό 톡해 μ½”λ“œμ˜ λ³΅μž‘μ„±μ„ 쀄이고, μœ μ—°μ„±κ³Ό μž¬μ‚¬μš©μ„±μ„ 높이며, μœ μ§€λ³΄μˆ˜λ₯Ό μš©μ΄ν•˜κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μΆ”μƒν™”λŠ” 주둜 좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 κ΅¬ν˜„λ©λ‹ˆλ‹€.