자바 디자인 패턴 용어 사전
학습노트에서 용어를 누르면 여기로 옵니다. 각 패턴의 의도·구현·혼동 지점·언제 쓰지 말아야 하는지를 정리했습니다.
35개 용어 · 상세 정리 35개
안티패턴1
생성 패턴7
- 팩토리 메서드Factory Method
객체 생성을 하위 클래스에 위임하는 패턴. 추상 팩토리는 관련 제품 '군'을 통째로 만든다.
- Abstract Factory추상 팩토리
관련된 제품들을 '군' 단위로 묶어 생성하는 패턴. 제품 하나가 아니라 조합의 일관성을 지킨다.
- Builder빌더 · 점층적 생성자
복잡한 객체를 단계적으로 조립하는 패턴. 생성자 인자가 많고 선택적일 때 쓴다.
- Prototype프로토타입 · clone
기존 객체를 복제해 새 객체를 만드는 패턴. 생성 비용이 클 때 쓴다.
- Singleton싱글톤 · 홀더 패턴 · 이중 검사 잠금
인스턴스를 하나만 만들고 전역에서 접근하게 하는 패턴. 전역 상태라는 대가가 크다.
- 정적 팩토리 메서드static factory · valueOf · of()
이름을 가진 생성자. GoF Factory Method와는 다른 것이며 캐싱·하위타입 반환이 가능하다.
- ServiceLoaderSPI · META-INF/services
구현체를 설정 파일로 배선하는 JDK 표준 메커니즘. JDBC 드라이버·SLF4J 바인딩의 기반.
원칙2
구조 패턴7
- Adapter어댑터
호환되지 않는 인터페이스를 변환해 주는 패턴. 브리지는 추상과 구현을 처음부터 분리한다.
- Bridge브리지
추상과 구현을 별도 계층으로 분리해 각각 독립적으로 확장하게 하는 패턴.
- Composite컴포지트
개별 객체와 그 묶음을 같은 인터페이스로 다루는 패턴. 트리 구조를 재귀적으로 처리한다.
- Decorator데코레이터 · 래핑
객체를 감싸 기능을 덧붙이는 패턴. 상속 대신 합성으로 조합 폭발을 피한다.
- Facade파사드
복잡한 서브시스템에 단순한 창구를 제공하는 패턴. 감출 뿐 막지는 않는다.
- Flyweight플라이웨이트 · 경량 패턴
변하지 않는 상태를 공유해 객체 수를 줄이는 패턴. 내재 상태와 외재 상태를 나눈다.
- Proxy프록시 · 퍼사드
실제 객체 대신 서서 접근을 제어하는 패턴. 퍼사드는 복잡한 하위 시스템을 단순한 창구로 감춘다.
행위 패턴11
- Chain of Responsibility책임 연쇄 · CoR
요청을 처리기 사슬에 흘려보내 누군가 처리하게 하는 패턴. 송신자와 수신자를 분리한다.
- Command커맨드 · 요청의 객체화
요청을 객체로 만들어 실행을 미루거나 되돌릴 수 있게 하는 패턴.
- Interpreter인터프리터
문법 규칙을 클래스로 표현해 문장을 해석하는 패턴. 간단한 DSL에 쓴다.
- Iterator이터레이터
내부 구조를 노출하지 않고 순회하는 패턴. 방문자는 반대로 연산을 구조 밖으로 뺀다.
- Mediator중재자
객체 간 직접 참조를 없애고 중재자를 통해 소통하게 하는 패턴. N:N을 1:N으로 바꾼다.
- Memento메멘토 · 실행 취소
캡슐화를 깨지 않고 객체 상태를 저장·복원하는 패턴. 실행 취소의 기반이다.
- Observer옵서버 · 발행/구독 · 리스너
상태 변화를 구독자들에게 알리는 패턴. 발행자가 구독자를 몰라도 되게 만든다.
- State상태 기계
상태를 객체로 만들어 행동을 바꾸는 패턴. 상태 전이 규칙을 각 상태가 갖는다.
- Strategy전략 · 상태 패턴
알고리즘을 캡슐화해 런타임에 교체하는 패턴. 조건 분기를 다형성으로 바꾼다.
- Template Method템플릿 메서드 · 훅 메서드
알고리즘의 뼈대를 상위 클래스가 정하고 일부 단계를 하위 클래스가 채우는 패턴.
- Visitor방문자
객체 구조는 그대로 두고 연산만 외부 클래스로 분리하는 패턴. 더블 디스패치를 쓴다.
패턴 비교2
실무 적용5
- 자기 호출self-invocation · 프록시 자기 호출
같은 객체 안에서 this로 부르면 프록시를 안 거친다. @Transactional이 안 걸리는 1순위 원인.
- 필터·인터셉터 체인인터셉터 · 필터 체인 · VirtualFilterChain · proceed()
리스트 + 인덱스 + 다음 호출. 서블릿·스프링 시큐리티·스프링 AOP·OkHttp·Netty가 같은 코드를 쓴다.
- 지연 로딩 프록시LazyInitializationException · 지연 로딩 · getReference
실제 조회를 미루기 위해 대신 놓는 가짜 객체. 세션이 닫힌 뒤 건드리면 예외가 난다.
- 스프링 이벤트ApplicationEvent · @EventListener · @TransactionalEventListener
Observer의 스프링 구현. 기본이 동기·같은 트랜잭션이라는 점이 함정이다.
- Resilience4jDecorators · 서킷 브레이커 · CircuitBreaker
데코레이터를 API로 노출한 장애 대응 라이브러리. 중첩 순서가 장애 규모를 가른다.