본문 바로가기
웃음기 있는 글들/JAVA

JAVA - 디자인 패턴 정리

by pon9 2024. 11. 12.

1. 생성 패턴

 

-싱글턴: 특정 클래스의 인스턴스가 단 하나만 존재하도록 제한함. 전역적으로 접근 가능한 인스턴스가 필요할 때 유용.

ex) 데이터베이스 연결 객체 등 전역에서 하나만 있어야 하는 경우.

 

-팩토리 메서드: 객체 생성 코드를 서브클래스에서 정의하여, 객체 생성을 하위 클래스에 맡김.

ex) 다양한 종류의 버튼이나, 모양을 가지는 UI 요소 생성 시.

 

-추상 팩토리: 관련된 객체들을 그룹화하여 생성할 수 있는 인터페이스 제공. 여러 제품군을 생성해야 할 때 유용.

ex) 서로 다른 운영체제에 맞는 UI 요소 생성. (MaxOS <=> Windows)

 

-빌더: 복잡한 객체를 단계별로 생성할 수 있도록 도와줌. 객체를 생성하는 과정, 표현을 분리.

ex) 복잡한 레스토랑 주문 구성. 서브웨이처럼 레시피를 조합할 때

 

-프로토타입: 기존 객체를 복제해 새로운 객체를 생성. 복잡한 객체를 복제하여 성능 개선 시 유용.

ex) 다양한 복제 가능한 캐릭터 생성. 다양한 속성을 가진 여러 캐릭터를 빠르게 만들 수 있음

 

 

2. 구조 패턴

 

-어댑터: 호환되지 않는 인터페이스를 가진 두 클래스가 함께 동작할 수 있도록 변환.

ex) XML 형식의 데이터를 사용해야 하는 프로그램에 JSON 형식의 데이터를 공급하려 할 때

 

-데코레이터: 객체에 추가적인 기능을 동적으로 부여할 수 있도록 도와줌. 상속 없이 기능 확장 가능.

ex) 커피를 주문할 때 추가할 수 있는 옵션이 다양할 때, 조합된 커피의 가격을 동적으로 계산.

 

-프록시: 실제 객체에 대한 접근을 제어하는 대리 객체를 제공함. 접근 제어, 리소스 관리, 캐싱 등에 유용.

ex) 웹 애플리케이션에서 큰 이미지 파일을 표시할 때, proxy 패턴을 사용해 지연 로딩을 구현 가능.

 

-퍼사드: 복잡한 시스템에 대한 단순화된 인터페이스를 제공. 클라이언트가 복잡한 시스템 내부 구조를 알 필요 없이 사용할 수 있도록 함.

ex) 홈 시어터 시스템과 비슷. 어플리케이션 하나로 단순히 사용하는 느낌

 

-컴포지트: 트리 구조를 만들어 개별 객체와 객체 집합을 동일하게 취급할 수 있도록 함. 파일 시스템 구조와 같이 계층 구조가 있는 상황에서 유용.

ex) 파일과 폴더(트리 구조로 계층화 된 구조) 모두에 open이나 delete같은 동작을 일관되게 적용할 수 있음.

 

-브리지: 구현과 추상화를 분리하여 독립적으로 확장할 수 있도록 함. 여러 개의 구현을 동시에 유지해야 할 때 유용.

ex) 다양한 운영체제별로 다른 UI 구성요소를 구현할 때.

 

 

3. 행위 패턴

 

-전략: 알고리즘을 캡슐화하여 필요한 알고리즘을 유연하게 교체할 수 있도록 함.

ex) 여러 알고리즘을 상황에 따라 바꿔야 할 때 좋음. (내 게임 Bomb 클래스는 random, move 등의 다양한 이동 전략을 갖고 있음)

 

-옵저버: 객체의 상태가 변할 때, 의존성 객체들이 자동으로 갱신될 수 있도록 알림을 보냄. 이벤트 시스템에서 많이 사용.

ex) 주식 가격 변동을 실시간으로 반영하는 시스템.

 

-커맨드: 요청을 객체로 캡슐화하여 매개변수화함. 실행 취소 및 재실행을 가능하게 함. 요청 자체를 객체로 다룸으로서 큐잉, 로깅에 유용.

ex) 버튼을 누를 때 각기 다른 명령을 싱행하는 GUI 프로그램.

 

-템플릿 메서드: 알고리즘의 구조를 정의하고, 세부 구현을 하위 클래스에 맡기는 패턴. 알고리즘의 뼈대를 유지하면서 부분적인 로직을 하위 클래스가 재정의할 수 있음.

ex) PDF나 DOC 각각의 파일 형식에 대해 서로 다른 처리 방법을 정의함.(공통적인 처리 흐름은 유지.)

 

-스테이트: 객체의 상태에 따라 행동을 달리함. 상태를 객체화하여 상태 변경화에 따른 동작을 분리.

ex) 비디오 게임에서 캐릭터의 상태에 따라 동작을 다르게 하는 경우.

 

-비지터: 데이터 구조의 요소에 대해 새로운 작업을 정리할 때, 데이터 구조를 수정하지 않고 새로운 기능을 추가해줌.

ex) 각 구성 요소를 방문하면서 점검, 검사를 수행하는 방문자를 추가하여서 각기 다른 기능을 수행할 수 있음.

 

-인터프리터: 언어의 문법을 정의하고 해석하는 방법 제공. 간단한 언어의 구문 해석이 필요할 때 유용.

ex) 계산기 프로그램에서 간단한 수학 표현식을 해석하는 인터프리터를 만들 수 있음.

 

-메멘토: 객체의 상태를 캡슐화해서 저장하고 이후 복구할 수 있게 해줌. 실행 취소 기능 등에 사용됨.

ex) 사용자가 텍스트를 입력할 때 마다 상태를 저장해두고, ctrl + z 할 수 있게 해줌

'웃음기 있는 글들 > JAVA' 카테고리의 다른 글

게임에 팩토리 패턴 적용  (0) 2024.11.20
JAVA - 용어 정리<2>  (2) 2024.11.11
객체 지향 실습 - 게임에 적용  (5) 2024.11.09