동적 바인딩
다형성을 실현하기 위한 중요한 매커니즘
다양한 형태의 객체를 하나의 인터페이스로 다룰 수 있게 하여
코드의 유연성과 확장성을 높이는 것을 목표로 한다.
추상화
공통적인 특징을 뽑아내어 상위 개념을 만들어내는 것
개별적인 구현을 드러내지 않고도 상위 개념을 통해 공통된 동작이나 속성을 다룰 수 있게 한다
코드의 복잡성 감소, 재사용성 증가, 유연성 향상 의 장점이 있다.
코드 예시
1. Animal (Cat 과 Mouse 의 상위클래스)
public abstract class Animal {
public abstract String getName();
}
2. Cat (Animal의 하위 클래스)
public class Cat extends Animal {
private String name = "고양이";
public String getName() {
return name;
}
}
3. Mouse (Animal의 하위 클래스)
public class Mouse extends Animal {
private String name = "쥐";
public String getName() {
return name;
}
}
Cat과 Mouse라는 구체적인 오브젝트(Object)들을 상위개념인 Animal(추상적 오브젝트)에 넣었다.
== 추상화
4. Doorman 오브젝트 추가
public class Doorman {
static Doorman instance = new Doorman();
private Doorman() {
}
public void 쫒아내(Animal animal){
System.out.println(animal.getName() + " 쫒아내");
}
}
Doorman이 가지고 있는 메서드 “쫒아내()”는
Cat과 Mouse의 상위 개념인 Animal 을 매개변수로 받고 있다.
5. main 클래스
public class App {
public static void main(String[] args) {
Doorman doorman = Doorman.instance;
Cat cat = new Cat();
Mouse mouse = new Mouse();
doorman.쫒아내(cat);
doorman.쫒아내(mouse);
}
}
6. 정리
doorman의 메서드 “쫒아내()”는 Animal을 매개변수로 받아내고 있기 때문에
하위 개념인 cat과 mouse가 들어가도 정상적으로 실행된다. (유연성)
만약 추가적인 동물 (예시: 강아지 dog)가 추가된다면 dog 클래스가 Animal클래스의 하위개념이란 것을 명시한다면 doorman.쫒아내() 가 받아들일 수 있는 객체가 간단하게 늘어날 수 있다. (확장성)
doorman.쫒아내 가 Animal에 속하는 하위 개념들을 받아낼 수 있게 되고
늘어난 하위 개념들을 통해 사용될 기회가 많아졌기 때문에 추상화가 이루어졌다고 이해했다.
Share article