Java/Design Pattern

[헤드퍼스트 디자인 패턴] 0. 디자인 패턴이란

noahkim_ 2024. 12. 16. 03:41

에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다

 

1. 디자인 패턴

  • 객체지향 설계에서 자주 발생하는 문제에 대한 해결책
  • 코드의 재사용성, 관리 용이성, 유연성을 높일 수 있음

 

장점

장점 설명
서로 이해할 수 있는 용어 제공
개발자 간 공통된 개념과 용어로 의사소통이 쉬워짐
표준화된 해결방법 제공
반복되는 문제에 대해 검증된 해결책을 제공함
유연성 및 유지보수 용이성
변경에 강하고, 코드의 수정 및 확장이 용이함
구조 개선
코드 구조를 명확히 하여 가독성과 재사용성을 높임

 

2. 객체지향 기초

  • 객체와 클래스를 중심으로 소프트웨어를 설계하고 구현하는 방법론

 

주요 개념

개념 정의
추상화
중요한 정보만 드러내고 불필요한 세부 사항은 숨김
- 인터페이스 중심 설계: 구현 세부사항을 숨기고 시스템 유연성과 확장성 확보
캡슐화
데이터와 해당 데이터를 처리하는 메서드를 하나로 묶어 객체를 구성
- 변경 가능성이 높은 부분을 감추어 외부 영향 최소화: 내부 변경 시 외부 시스템 수정 불필요
다형성
동일한 인터페이스로 서로 다른 객체를 다룰 수 있게 함
상속
기존 클래스를 확장하여 새로운 클래스를 정의하고, 속성과 메서드 재사용 가능

 

원칙

원칙 정의 / 설명
컴포지션 (Composition)
상속보다 객체 조합을 통해 기능 재사용. 더 유연하고 변경에 강한 구조 설계 가능
느슨한 결합 (Loose Coupling)
클래스 간 의존도를 낮춤. 주로 추상화 계층(인터페이스, 추상 클래스 등)에 의존하여 유연성 확보
최소 지식의 원칙 (Law of Demeter)
객체는 협력 객체의 내부 구조를 알지 않아야 함. 직접 사용하는 객체에만 메시지를 전달
할리우드 원칙 (“Don't call us, we'll call you”)
고수준 모듈이 제어권 가짐. 저수준 모듈은 등록만 하고 호출은 당하지 않음 (ex. 콜백, 이벤트 리스너 등)
단일 책임 원칙 (SRP)
하나의 클래스는 하나의 책임만 가져야 함. 변경 이유는 하나여야 유지보수가 쉬움