pattern
우리는 효율적으로 코드를 작성하기 위해 고민합니다.코드를 효율적으로 작성하기 위해 과거부터 많은 고민과 연구가 있었습니다. 많은 시행착오 끝에 가장 효과적이라고 알려진 방법들이 디자인 패턴으로 자리잡았습니다. 양이 방대하기 때문에, 긴 호흡을 가지고 기초적인 부분부터 심화 부분까지 정리해 보도록 하겠습니다.
디자인 패턴은 용도에 따라 크게 3가지로 나누어집니다. 객체 인스턴스를 생성하는 생성 패턴(Creational Pattern), 클래스와 객체들의 상호작용하는 방법과 역할을 다루는 행동 패턴(Behavioral Pattern), 클래스와 객체를 합쳐 구조화 하는 구조 패턴(Structural Pattern)이 있습니다.
상속 보다는 구성을 사용하면 클래스 간의 의존성을 낮추가 코드의 재사용성을 높일 수 있습니다. 기본적으로 상송의 경우는 부모 클래스 변경 시 하위 클래스에 영향을 미치게 됩니다. 그는 클래스 간의 의존성을 높이고 유지보수가 어려워 집니다.
상속의 경우에는 두 객체를 의존성을 컴파일 단계에서 결정한다면, 구성의 경우에는 두 객체의 의존성을 런타임에서 해결합니다. 쉽게 말해서, 클래스 내부에서 new를 활용하여 객체를 생성하여 메소드를 사용한다면 구성을 활용한 것이라 할 수 있습니다. 따라서 구성은 객체의 인터페이스에 의존한다고 할 수 있습니다.
느슨한 결합이란 객체들끼리 서로 사용하거나 영향을 끼치지만, 서로를 잘 모르는 관계를 의미합니다. 상호작용하는 객체끼리는 가능하면 느슨한 결합을 하여 객체 사이의 상호 의존성을 최소화 해야합니다.
옵저버 패턴(Observer Pattern)에서는 Subject는 Observer가 특정 인터페이스(메소드)를 구현한다는 사실만 알고, 그 인터페이스를 사용하기만 하면 되지 디테일한 내부 구조는 알 필요가 없습니다. 서로가 인터페이스 규약만 있다면 서로에게 영향을 미치지 않기 때문에 옵저버 패턴은 느슨한 결합으로 되어 있다고 할 수 있습니다.