κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° (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 |
λκΈ