일종의 설계 기법/설계 방법
SW 재사용성, 호환성, 유지 보수성 보장
프로젝트에 항상 적용해야 하는 것은 아니지만 추후 재사용, 호환, 유지 보수 시 발생하는 문제 해결을 예방하기 위해 만들어둔 패턴
객체지향 설계 원칙
클래스는 단 한 개의 책임(기능)을 가져야 함
클래스를 변견하는 이유는 단 하나여야 함
확장(상속)에는 열려있고 변경에는 닫혀 있어야 함
기존의 코드를 변경하지 않고 기능을 수정/추가할 수 있도록 설계해야 함
➡️ 추상화(인터페이스)와 상속(다형성)등을 통해 구현할 수 있음
하위 타입 객체는 상위 타입 객체에서 가능한 행위를 수행할 수 있어야 함
➡️ 상위 타입 객체를 하위 타입 객체로 치환해도 정상적으로 동작해야 함
상속 관계가 아닌 클래스들을 상속 관계로 설정하면 이 원칙에 위배
클라이언트는 자신이 사용하는 메소드에만 의존해야 함
한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 않아야 함
인터페이스는 해당 인터페이스를 사용하는 클라이언트를 기준으로 잘게 분리되어야 함
의존 관계를 맺을 때 변하기 쉬운 것(구체적인 것) 보다는 변하기 어려운 것(추상적인 것)에 의존해야 함
고수준 모듈은 저수준 모듈의 구현에 의존해서는 안됨
생성 패턴(Creation) : 객체의 생성 방식 결정
Class-creation patterns, Object-creation patterns
ex) DB Connection을 관리하는 Instance를 하나만 만들 수 있도록 제한하여 불필요한 연결을 막음
구조 패턴(Structural) : 객체간의 관계를 조직
ex) 2개의 인터페이스가 서로 호환이 되지 않을 때 둘을 연결해주기 위해 새로운 클래스를 만들어서 연결시킬 수 있도록 함
행위 패턴(Behavioral) : 객체의 행위를 조직, 관리, 연합
ex) 하위 클래스에서 구현해야 하는 함수 및 알고리즘들을 미리 선연하여 상속 시 이를 필수로 구현하도록 함
[참고 자료]