디자인패턴
디자인 패턴은 소프트웨어 디자인에서 자주 발생하는 문제를 해결하기 위해 사용되는 일종의 템플릿입니다. 이러한 패턴은 각각의 문제를 해결하기 위해 특정한 방식으로 작성되어 있으며, 이를 사용하면 소프트웨어 디자인에 대한 일관성과 재사용성을 높일 수 있습니다. 이러한 패턴은 대부분 객체 지향 프로그래밍에서 사용되며, 코드의 유지 보수성과 확장성을 높이는 데 매우 유용합니다.
https://gmlwjd9405.github.io/2017/10/01/basic-concepts-of-development-designpattern.htm

옵서버 패턴
- 일대다 객체의존
- 파일탐색기 , 차량 연료량
- 관계도

subejct 와 Observer
ConcreteSubject 와 ConcreteSubject
- Observer
데이터의 변경을 통보 받는 인터페이스
즉, Subject에서는 Observer 인터페이스의 update 메서드를 호출함으로써 ConcreteSubject의 데이터 변경을 ConcreteObserver에게 통보한다.
- Subject
ConcreteObserver 객체를 관리하는 요소
Observer 인터페이스를 참조해서 ConcreteObserver를 관리하므로 ConcreteObserver의 변화에 독립적일 수 있다.
- ConcreteSubject
변경 관리 대상이 되는 데이터가 있는 클래스(통보하는 클래스)
데이터 변경을 위한 메서드인 setState가 있다.
setState 메서드에서는 자신의 데이터인 subjectState를 변경하고 Subject의 notifyObservers 메서드를 호출해서 ConcreteObserver 객체에 변경을 통보한다.
- ConcreteObserver
ConcreteSubject의 변경을 통보받는 클래스
Observer 인터페이스의 update 메서드를 구현함으로써 변경을 통보받는다.
변경된 데이터는 ConcreteSubject의 getState 메서드를 호출함으로써 변경을 조회한다
템플릿 메소드 패턴
- 기능을 결합하여 동적으로 확장
- 클래스는 추상(abstract)로 만든다.
- 단계를 진행하는 메소드는 수정이 불가능하도록 final 키워드를 추가한다.
- 각 단계들은 외부는 막고, 자식들만 활용할 수 있도록 protected로 선언한다.
- 예를 들어보자. 피자를 만들 때는 크게
반죽 → 토핑 → 굽기
로 3단계로 이루어져있다.
이 단계는 항상 유지되며, 순서가 바뀔 일은 없다. 물론 실제로는 도우에 따라 반죽이 달라질 수 있겠지만,
일단 모든 피자의 반죽과 굽기는 동일하다고 가정하자. 그러면 피자 종류에 따라 토핑만 바꾸면 된다.
- abstract와 Interface의 차이는?
- abstract : 부모의 기능을 자식에서 확장시켜나가고 싶을 때 >> 재정의
- interface : 해당 클래스가 가진 함수의 기능을 활용하고 싶을 때 >> 기능 구현
어댑터 패턴(Adapter Pattern) (• 사용 방법 : 상속)