지금까지 스프링을 제외하고 만든 코드에서 객체지향 설계원칙과 객체지향 디자인 패턴이 어떤 것이 있었는지 알아보자
개방-폐쇄 원칙(Open-Closed Principle)(OCP)
- 클래스나 모듈은 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다.
인터페이스를 이용하여 추가적인 동작을 작성하는 부분 -> 확장
확장을 통해 새로 추가된 기능을 사용하기 위해서 caller의 코드가 변경되면 안 된다. -> 폐쇄
높은 응집도와 낮은 결합도(High Coherence and low coupling)
- 응집도가 높다 : 하나의 모듈이 하나의 책임 또는 관심사에 집중돼 있다
- 결합도가 낮다 : 느슨하게 연결되어 있다(구체 클래스에 대한 선언이 적다)
전략 패턴(Strategy Pattern)
객체들이 할 수 있는 행위 각각에 대해 전략 클래스를 생성하고, 유사한 행위들을 캡슐화하는 인터페이스를 정의하여, 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고 전략을 바꿔주기만 함으로써 행위를 유연하게 확장하는 방법
간단히 말해서 객체가 할 수 있는 행위들 각각을 전략으로 만들어 놓고, 동적으로 행위의 수정이 필요한 경우 전략을 바꾸는 것만으로 행위의 수정이 가능하도록 만든 패턴
인터페이스를 사용하는 부분.. 인터페이스를 사용하는 것만으로도 디자인 패턴을 사용하는 것이다.
제어의 역전(Inversion of Control)
제어권 이전을 통한 제어 관계 역전 - 프레임워크의 기본 동작 원리
caller에서 callee를 직접 생성해서 호출하는 관계였다면, obejctFactory 등을 이용하여 제어권을 이전시킨다