λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Programming/Java

17 Abstraction

by Dowon Kang 2024. 1. 20.

객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ° (OOP)μ—μ„œ "좔상화(Abstractization)"λŠ” λ³΅μž‘ν•œ μ‹œμŠ€ν…œμ΄λ‚˜ κ°œλ…μ„ κ°„μΆ”λ € ν‘œν˜„ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. μ΄λŠ” κ°μ²΄ μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ ν•΅μ‹¬ μ›μΉ™ μ€‘ ν•˜λ‚˜λ‘œ, ν΄λž˜μŠ€λ‚˜ κ°μ²΄λ₯Ό μ •μ˜ν•  λ•Œ λΆˆν•„μš”ν•œ μ„ΈλΆ€ μ‚¬ν•­μ„ μ œκ±°ν•˜κ³  μ€‘μš”ν•œ νŠΉμ§•μ— μ§‘μ€‘ν•¨μœΌλ‘œμ¨ μ½”λ“œμ˜ μ΄ν•΄μ™€ μœ μ§€λ³΄μˆ˜λ₯Ό μ‰½κ²Œ λ§Œλ“­λ‹ˆλ‹€.

 

μΆ”μƒν™”μ˜ μ£Όμš” νŠΉμ§•

  • μΌλ°˜ν™”(Generalization): μΆ”μƒν™”λŠ” μ—¬λŸ¬ κ°μ²΄λ‚˜ κ°œλ…μ—μ„œ κ³΅ν†΅λœ νŠΉμ§•μ„ λ„μΆœν•˜μ—¬ μΌλ°˜μ μΈ ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€λ‘œ μ •μ˜ν•©λ‹ˆλ‹€. μ΄λ‘œμ¨ μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ΄ λ†’아지고 κ³„측적인 κ΅¬μ‘°λ₯Ό ν˜•μ„±ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
  • μˆ¨κΉ€(Hiding): μΆ”μƒν™”λŠ” λΆˆν•„μš”ν•œ μ„ΈλΆ€ 사항을 숨기고 μ€‘μš”ν•œ λΆ€λΆ„λ§Œμ„ κ³΅κ°œν•¨μœΌλ‘œμ¨ 외뢀에 λ…ΈμΆœλ˜λŠ” 정보λ₯Ό μ œν•œν•©λ‹ˆλ‹€. μ΄λŠ” 정보 μ€λ‹‰μ˜ 원칙을 λ”°λ¦…λ‹ˆλ‹€.
  • λͺ¨λΈλ§(Modeling): μΆ”μƒν™”λŠ” ν˜„μ‹€ μ„Έκ³„μ˜ λ³΅μž‘ν•œ 문제λ₯Ό λ‹¨μˆœν™”λœ λͺ¨λΈλ‘œ ν‘œν˜„ν•¨μœΌλ‘œμ¨ ν”„λ‘œκ·Έλž¨μ„ μ΄ν•΄ν•˜κ³  κ΅¬μΆ•ν•˜κΈ° μ‰½κ²Œ λ§Œλ“­λ‹ˆλ‹€.

 

 

좔상 λ©”μ„œλ“œ(Abstract Method)

좔상 λ©”μ„œλ“œλŠ” μΆ”상 ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ„ μ–Έλ˜μ§€λ§Œ λ³Έμ²΄κ°€ μ—†λŠ” λ©”μ„œλ“œμž…λ‹ˆλ‹€. μΆ”상 λ©”μ„œλ“œλŠ” ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ λ°˜λ“œμ‹œ κ΅¬ν˜„λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. μ΄λ₯Ό ν†΅ν•΄ λ‹€ν˜•μ„±μ„ μ œκ³΅ν•˜κ³  κ° ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ μžμ²΄μ μΈ λ™μž‘을 μ •μ˜ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

좔상 λ©”μ„œλ“œλŠ” ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ λ°˜λ“œμ‹œ κ΅¬ν˜„λ˜μ–΄μ•Ό ν•˜λ―€λ‘œ, μ΄λ₯Ό ν†΅ν•΄ νŠΉμ •ν•œ λ™μž‘이 ν•„μˆ˜μ μœΌλ‘œ μˆ˜ν–‰λ˜λ„둝 ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, λ‹€ν˜•μ„±μ˜ νŠΉμ§•μ„ ν™œμš©ν•˜μ—¬ μ—¬λŸ¬ ν•˜μœ„ ν΄λž˜μŠ€ κ°μ²΄λ₯Ό λΆ€λͺ¨ ν΄λž˜μŠ€ νƒ€μž…μœΌλ‘œ λ‹€λ£° μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

좔상 λ©”μ„œλ“œλ₯Ό μ„ μ–Έν•˜λŠ” λ©”μ„œλ“œμ—λŠ” abstract ν‚€μ›Œλ“œκ°€ μ‚¬μš©λ©λ‹ˆλ‹€. 좔상 클래슀 λ‚΄μ—λŠ” 좔상 λ©”μ„œλ“œκ°€ ν•˜λ‚˜ 이상 μžˆμ–΄μ•Ό ν•˜λ―€λ‘œ, 클래슀 전체가 좔상 클래슀인 κ²½μš°μ—λ„ abstract ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. 좔상 λ©”μ„œλ“œλŠ” λ‹€μ–‘ν•œ ν΄λž˜μŠ€ κ°„μ˜ κ³΅ν†΅λœ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν•˜κ³ , ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ μ΄λ₯Ό κ΅¬ν˜„ν•¨μœΌλ‘œμ¨ λ‹€ν˜•μ„±μ„ μ΄‰μ§„ν•˜κ³  μœ μ§€λ³΄μˆ˜μ„±μ„ ν–₯μƒμ‹œν‚¬ μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

 

 

더보기

/* λ§ˆλ¦°, νƒ±ν¬, λ“œλžμ‰½μ˜ μ΄λ™ λ°©λ²•μ€ κ°κΈ° λ‹€λ₯΄λ‹€. μΆ”상화λ₯Ό ν†΅ν•΄ μΌλ°˜μ μΈ '이동' μš”μ†Œλ§Œ λ¬Άκ³ 
  μ‹€μ œ μ΄λ™λ°©λ²•μ€ κ° ν΄λž˜μŠ€μ—μ„œ μΆ”상 λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ -> μ½”λ“œ μ€‘볡 μ œκ±°, μœ μ§€ λ³΄μˆ˜ μš©μ΄ */

public class _04_Abstraction {
    public static void main(String[] args) {

        Unit[] group = { new Marine(), new Tank(), new Dropship() };

        for (int i = 0; i < group.length; i++)
            group[i].move(100, 200);
    }
}

abstract class Unit { // μΆ”상 ν΄λž˜μŠ€μ˜ μ‘°κ±΄: μΆ”상 λ©”μ„œλ“œλ₯Ό κ°€μ§
    int x, y;
    abstract void move(int x, int y); // μ„ μ–ΈλΆ€λ§Œ μžˆκ³  κ΅¬ν˜„λΆ€λŠ” μ—†λŠ” λ―Έμ™„μ„± λ©”μ„œλ“œ
    void stop() { /*  ν˜„μž¬ μœ„μΉ˜μ— μ •μ§€ */ }
}

 

 

더보기

class Marine extends Unit { //  λ§ˆλ¦°
    void move(int x, int y) {
        System.out.println("Marine[x=" + x + ",y=" + y + "]");
    }
    void stimPack() { /* μŠ€νŒ€νŒ©μ„ μ‚¬μš©ν•œλ‹€. */ }
}

class Tank extends Unit { // νƒ±ν¬
    void move(int x, int y) {
        System.out.println("Tank[x=" + x + ",y=" + y + "]");
    }
    void changeMode() { /* μ‹œμ¦ˆλͺ¨λ“œ ν•œλ‹€.  */ }
}

class Dropship extends Unit { // λ“œλžμ‰½
    void move(int x, int y) {
        System.out.println("Dropship[x=" + x + ",y=" + y + "]");
    }
    void load()   { /*  λ³‘λ ₯을 νƒœμš΄λ‹€. */ }
    void unload() { /*  λ³‘λ ₯을 λ‚΄λ¦°λ‹€. */ }
}

 

 


Abstraction is a process of hiding the implementation details from the user and showing only the functionality to the user. So, the abstract class in Java cannot be instantiated (we cannot create objects of abstract classes).

 

An abstract method is a method without a specific implementation, declared in an abstract class or interface. It must be defined in concrete subclasses or classes implementing the interface. It provides a common interface for diverse implementations.

 

'Programming > Java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

19 Interface  (0) 2024.01.20
18 Polymorphism  (0) 2024.01.20
16 Composition relationship  (0) 2024.01.20
15 Inheritance  (0) 2024.01.20
14 Encapsulation (feat. Access modifier)  (0) 2024.01.20

λŒ“κΈ€