@ 관심사의 분리(Separation of Concerns) : 관심이 같은 것끼리는 하나의 객체 안으로 또는 친한 객체로 모이게 하고, 관심이 다른 것은 가능한 따로 떨어져서 서로 영향을 주지 않도록 분리하는 것
@ 메소드 추출 (extract method) : 공통의 기능을 담당하는 메소드로 중복된 코드를 뽑아내는 리팩토링 기법
@ 템플릿 메서드 패턴(template method pattern) : 슈퍼 클래스에 기본적인 로직의 흐름을 만들고, 이를 추상 메서드나 오버라이딩 가능한 메서드로 만든 뒤 서브클래스에서 필요에 맞게 구현해서 사용하는 방법
@ 훅 메서드(hook method) : 슈퍼클래스에서 디폴트 기능을 정의해두거나 비워뒀다가 서브클래스에서 선택적으로 오버라이드할 수 있도록 만들어둔 메서드
@ 팩토리 메서드 패턴(factory method pattern) : 서브클래스에서 구체적인 오브젝트 생성 방법을 결정하게 하는 것
@ 팩토리 메서드(factory method)
- 서브 클래스에서 오브젝트 생성 방법과 클래스를 결정할 수 있도록 미리 정의해둔 메서드
- 오브젝트를 생성하는 기능을 가진 메소드
@ 개방 폐쇄 원칙(OCP:Open-Closed Principle) : 클래스나 모듈은 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다. 객체지향 설계 원칙(SOLID)중에 하나.
@ 높은 응집도와 낮은 결합도(high coherence and low coupling)
@ 응집도 : 하나의 모듈, 클래스가 하나의 책임 또는 관심사에만 얼마나 집중되어 있는지를 뜻함
@ 결합도 : 하나의 오브젝트가 변경이 일어날 때에 관계를 맺고 있는 다른 오브젝트에게 변화를 요구하는 정도
@ factory : 객체의 생성 방법을 결정하고 그렇게 만들어진 오브젝트를 돌려주는 역활을 하는 오브젝트, 오브젝트를 생성하는 쪽과 생성된 오브젝트를 사용하는 쪽의 역활과 책임을 분리하려는 목적으로 사용됨
@ 제어의 역전(IoC : Inversion of Control) : 오브젝트가 자신이 사용할 오브젝트를 스스로 생성, 선택하지 않는다. 자신도 어떻게 만들어지고 어디서 사용되는지 알 수 없다. 모든 제어 권한을 자신이 아닌 다른 대상에게 위임함. 일반적인 예로 서블릿을 들 수 있다.
@ 라이브러리와 프레임워크의 차이
: 라이브러리를 사용하는 애플리케이션 코드는 애플리케이션 흐름을 직접 제어한다. 필요에 따라 능동적으로 라이브러리를 사용함. 프레임워크는 거꾸로 애플리케이션 코드가 프레임워크에 의해 사용된다. 즉 프레임워크가 흐름을 주도함. 프레임워크에는 분명한 제어의 역전 개념이 적용되어 있어야 하며 라이브러리는 짜놓은 틀에서 수동적으로 동작해야 한다.