참고 : 재사용성과 다이나믹 디스패치, 더블 디스패치(토비님 강의)
https://www.youtube.com/watch?v=s-tXAHub6vg
컴포넌트란
“컴포넌트란 이를 만든 개발자의 손이 미치지 않는 곳에서도, 아무 변경 없이, 필요에 따라 확장해서 사용될 수 있는 소프트웨어 덩이다.” - Martin Fowler-
오브젝트 패턴은 런타임시에 바뀔 수 있는, (상속 관계보다) 더 동적인 오브젝트 (의존) 관계를 다룬다.
- GoF -
디자인 패턴 분류
static dispatch
dynamic dispatch
public abstract class Service {
abstract void run();
}
public class extends Service1 {
void run(){
System.out.println("run1");
}
}
public class extends Service2 {
void run(){
System.out.println("run2");
}
}
// dynamic dispatch
List<Service> services = List.of(new Service1(), new Service2());
services.forEach(Service::run);
svc
의 타입을 확인하고 Service1
의 run()
을 호출하는 것이다.receiver parameter
실제 객체를 나타내는 this 가 메서드 안에 숨겨져 있다 ?
출처 : https://en.wikipedia.org/wiki/Visitor_pattern
Poly : many
morph : shapes
dynamic : after compilation (during runtime)
static : compile time
- 다형성이란 서로 다른 타입에 속하는 객체들이 동일한 메세지를 수신할 경우 서로 다른 메서드를 이용해 메세지를 처리할 수 있는 메커니즘을 말한다.
- 다형성 관계에 있는 객체들은 동일한 책임을 공유한다.
- 협력을 재사용한다.
[출처 :객체지향의 사실과 오해]
다형성은 시점에 따라 다르다.
1. 컴파일 타임에는 오버로딩 메서드
2. 런타임에는 오버라이딩 메서드
Method signature : name, parameter tyes, return type(리턴 타입도 포함된다고 잘 못 알고있는 경우 많음)
Method type : return type, method type parameter, method argument types, exception
❗메서드 타입이 일치해야 Method Reference 쓸 수 있다!!
컴파일 시점과 런타임 시점에 JVM 이 메서드 호출을 어떻게 다르게 하는지 매커니즘이 궁금해진다.