#μΆμν #μμ #λ€νμ± #μΊ‘μν
μΆμν (Abstraction)
- κ°μ²΄λ₯Ό κ΄μ°°νμ¬ κ³΅ν΅λ νΉμ±μ μ°Ύμ ν΄λμ€λ₯Ό μ€κ³νκ² λλλ°, μ΄ μ€ κ΄μ¬ μμ (= Context = Application Boundary) μ μλ νΉμ±λ§ κ°μ§κ³ μ¬μ‘°ν© νλ κ² (= λͺ¨λΈλ§)
- μλ₯Ό λ€μ΄ νμ ν΄λμ€λ₯Ό λ§λ λ€λ©΄ μμ ν μ§μ΄ λͺ μ±μΈμ§λ νμ μλ€.
μμ (Inheritance)
[ κ°λ ]
- μ‘°μ§λλ κ³μΈ΅λκ° μλ λΆλ₯λμ κ°λ (Animal ⊃ Mammal ⊃ Bat)
- μμ ν΄λμ€μ νΉμ±μ νμ ν΄λμ€μ μμνκ³ , κ±°κΈ°μ λν΄ νμν νΉμ±μ μΆκ° (νμ₯) ν΄μ μ¬μ©ν μ μλ€λ μλ―Έ
- 'νμ ν΄λμ€' is a kind of (extends) 'μμ ν΄λμ€'
[ λ©λͺ¨λ¦¬ λ 벨 μ΄ν΄ ]
- νμ ν΄λμ€ κ°μ²΄λ₯Ό μμ±νλ©΄ μμ ν΄λμ€ κ°μ²΄λ ν¨κ» heap μμμ ν λΉλλ€.
- Animal a = new Mammal(); κ³Ό κ°μ΄ μμ±νλ κ°μ²΄μ νμ κ³Ό κ°μ²΄ μ°Έμ‘° λ³μμ νμ μ λ€λ₯΄κ² ν μ μλ€. Mammal κ°μ²΄μ Animal κ°μ²΄ λͺ¨λ heap μμμ ν λΉλμ§λ§ μ΄ κ²½μ° aλ Animal κ°μ²΄λ₯Ό μ°Έμ‘°νλ€. μ¦ Mammal κ°μ²΄μ μ κ· μΆκ°ν λ©€λ²λ κ°μ²΄ μ°Έμ‘° λ³μ aμμ μ¬μ© λΆκ°λ₯νλ€. λ¨ Mammalμμ μ€λ²λΌμ΄λν λ©μλμ κ²½μ° κΈ°μ‘΄ Animal λ©€λ²κ° κ°λ €μ Έ μ¬μ μν λ©μλκ° νΈμΆλλ€.
- μ¦ μμ ν΄λμ€ νμ μ μ°Έμ‘° λ³μλ₯Ό μ¬μ©νλλΌλ νμ ν΄λμ€μμ μ€λ²λΌμ΄λν λ©μλκ° νΈμΆλλ€.
[ μΈν°νμ΄μ€ ]
- λ€μ€ μμ (2κ° μ΄μ extends) λ νμ©λμ§ μμΌλ©°, λμ 'μΈν°νμ΄μ€' λΌλ κ°λ μ΄ μλ€.
- 'ꡬν ν΄λμ€' is able to (implements) 'μΈν°νμ΄μ€' μ μλ―Έλ‘ μ£Όλ‘ μ°μ΄λ©°, ν΄λμ€μκ² κΈ°λ₯μ ꡬννλλ‘ κ°μ νλ€.
- νλμ ν΄λμ€κ° μ¬λ¬ κ°μ μΈν°νμ΄μ€λ₯Ό ꡬννλλ‘ ν μ μλ€. (implements A, B)
λ€νμ± (Polymorphism)
- Override: μμ ν΄λμ€μ λ©μλμ κ°μ μ΄λ¦, κ°μ μΈμ 리μ€νΈλ‘ μ¬μ μ
- Overload: κ°μ μ΄λ¦, λ€λ₯Έ μΈμ 리μ€νΈλ‘ μ€λ³΅ μ μ
μΊ‘μν (Encapsulation)
- μ°κ΄λ μμ±κ³Ό λ©μλλ₯Ό ν΄λμ€λ‘ λ¬Άλ μΌλΆλ§ μΈλΆμμ μ¬μ©ν μ μλλ‘ νμ¬ μ 보 μλμ μ€ν
- μ κ·Ό μ μ΄ μ§μμ: private, [default], protected, public
- privateμ λ³ΈμΈλ§ / [default]λ λμΌ ν¨ν€μ§ λ΄μ ν΄λμ€λ§ / protectedλ μμ ν΄λμ€λ λμΌ ν¨ν€μ§ λ΄μ ν΄λμ€λ§ / publicμ μ΄λμλ μ κ·Ό κ°λ₯νλ€. κ·Έλ¬λ ν΄λμ€ λ©€λ² (= μ μ λ©€λ²) μ μ κ·Όνλλ κ°μ²΄ λ©€λ²μ μ κ·Όνλλμ λ°λΌ λ¬Έμ λ μ΄λ €μμ§ μ μλ€.
- μΌκ΄λ νμμΌλ‘ μ κ·Όνκ³ λ©λͺ¨λ¦¬ μ κ·Ό μμ νΈλ¦¬ν¨μ μνμ¬ μ μ λ©€λ²μ κ²½μ° 'ν΄λμ€λͺ .μ μ λ©€λ²'μ ννλ‘ μ κ·Όνλ κ²μ΄ κΆμ₯λλ€.
public class Animal {
String myClass;
Animal() {
myClass = "Animal";
}
void showMe() {
System.out.println(myClass);
}
}
public interface Flyable {
void fly();
}
public class Mammal extends Animal {
Mammal() {
myClass = "Mammal";
}
@Override
public void showMe() {
System.out.println("Overrided in Mammal: " + myClass);
}
}
public class Bird extends Animal {
Bird() {
myClass = "Bird";
}
@Override
public void showMe() {
System.out.println("Overrided in Bird: " + myClass);
}
}
public class Bat extends Mammal implements Flyable {
Bat() {
myClass = "Bat";
}
@Override
public void showMe() {
System.out.println("Overrided in Bat: " + myClass);
}
@Override
public void fly() {
System.out.println("Flying1 " + myClass);
}
}
public class Sparrow extends Bird implements Flyable {
Bat() {
myClass = "Sparrow";
}
@Override
public void fly() {
System.out.println("Flying2 " + myClass);
}
}
public class Driver {
public static void main(String args[]) {
Animal[] a = new Animal[4];
a[0] = new Mammal();
a[1] = new Bird();
a[2] = new Bat();
a[3] = new Sparrow();
for(Animal aa: a) {
aa.showMe();
// aa.fly(); => ERROR: The method fly() is undefined for the type Animal.
}
Flyable[] f = new Flyable[2];
f[0] = new Bat();
f[1] = new Sparrow();
for(Flyable ff: f) {
ff.fly();
// ff.showMe(); => ERROR: The method showMe() is undefined for the type Flyable.
}
}
}
Overrided in Mammal: Mammal
Overrided in Bird: Bird
Overrided in Bat: Bat
Overrided in Bird: Sparrow
Flying1 Bat
Flying2 Sparrow
'Web Application' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
spring κ²μν λ§λ€κΈ° (0) | 2021.09.26 |
---|---|
Java λͺ¨λ₯΄λ λ΄μ© (0) | 2021.09.12 |
Java λ©λͺ¨λ¦¬ λ 벨 μ΄ν΄ (0) | 2021.08.29 |
μΉμλΉμ€ Architecture (Web server, WAS, DB server) (1) | 2021.05.16 |
μμ€4 - HTML, CSS, JS, JSP (0) | 2021.05.02 |
λκΈ