구조 패턴
확장
- 클래스 → 하나의 책임(역할)으로 설계 (SRP 원칙)
- 하지만, 하나의 책임만으로는 전체 기능을 구현할 수 없음
- 단일 책임 (SRP) : 클래스의 행동을 분리하는 설계원칙
-
여러 개로 분리된 책임과 행동 → 서로 관계를 맺고 주어진 문제를 해결
-
객체지향 코드 → 수많은 파일로 분리된 클래스
⇒ 다수의 클래스에 책임을 분산 → 문제를 해결하기 위해 다시 분리된 책임들을 상호 결합
- 객체지향 개발 : 클래스를 결합하여 더 큰 객체로 확장함 ⇒ 구조 패턴 (Structural Patterns) : 큰 구조의 객체를 형성 & 관리하는 방법들
- 객체 확장을 위해 클래스의 상속과 합성을 사용
- 구조 패턴
상속
- 객체지향 초창기 개념
- 초기엔 객체를 확장하기 위해 상속을 많이 이용
- 상속으로 객체를 확장 → 상위 클래스에서 정의된 객체의 속성, 동작을 모두 포함
- 상속
- 객체지향의 고유 특징
- 정적인 결합을 통해 객체를 확장
- 단, 정적인 상속 결합은 대형 프로젝트(프로그램) 개발과 유연한 작업에 한계
- 모두 혼합된 구조 ⇒ 필요한 행위, 불필요한 행위가 모두 같이 존재
- 강력한 결합력 ⇒ 빠르게 변화되는 현대사회에서 다양한 고객의 요청을 반영해 코드를 유지보수하기 힘들어짐
합성
- 상속 결합의 단점 보완을 위해 객체 합성을 사용
- 합성
- 하나의 객체가 다른 객체를 포함하는 것
- 대표적인 합성 : 복합 객체
- 합성을 통해
- 객체의 강한 의존 관계를 줄이고 유연한 객체 구조로 변경 가능
- 실행 중에도 객체를 확장 가능
- 합성을 이용한 객체 확장 → 자원을 보다 효율적으로 사용할 수 있게 함
💡 구조 패턴 : 상속보다 합성을 통해 다양한 객체 확장 방법을 제시, 제안