(ING) https://madplay.github.io/post/spring-framework-basic-design-pattern
디자인 패턴 : 다양한 목적을 위해 재활용 가능한 설계 방법
- 템플릿 메소드 패턴
- 슈퍼 클래스에서 정의한 기본 로직을 서브 클래스에서 필요에 맞게 구현해서 쓰는 방법
- 슈퍼 클래스에서 기본 로직의 흐름을 만들고 그 기능의 일부를 추상 메소드나 오버라이딩이 가능한 protected 메소드 등으로 만든 뒤 서브 클래스에서이런 메소드를 필요에 맞게 구현해서 사용하는 방법
- 팩토리 메소드 패턴
- 오브젝트 생성 방법을 기본 코드에서 독립시키는 방법
- 서브 클래스에서 오브젝트 생성 방법과 클래스를 결정할 수 있도록 미리 정의해둔 메소드
- 상속을 통해 기능을 확장하게 하는 템플릿 메소드 패턴과 구조 비슷
- 슈퍼클래스의 코드에서는 서브클래스에서 구현할 메소드를 호출해서 필요한 타입의 오브젝트를 가져와 사용한다.
- 메소드가 인터페이스 타입으로 오브젝트를 리턴하므로(더이해) 서브클래스에서 정확히 어떤 클래스의 오브젝트를 리턴할지 슈퍼클래스는 알 수 없다 (서브클래스에서 결정한다)