반응형
디자인 패턴이란?
- 시스템 개발 시 공통적으로 발생하는 문제점을 해결하기 위한 방법으로, 개발에 대한 템플릿이다.
근데 왜 공부해야 하나요?
완성된 코드를 보면 한 줄 한 줄 분석하기엔 그 양이 너무 많아 이해하기 어렵기도 하고, 특정 코드를 왜 이렇게 짜여 있나 전체적인 이해를 하기 위해서 디자인 패턴을 공부해야 한다.
디자인 패턴의 종류
1. 생성 패턴
1-1. Factory Pattern
- 객체 생성을 위해 인터페이스 정의 시 어떤 클래스의 인스턴스를 만들지에 대해 서브 클래스에서 결정하게 만드는 패턴
- 부모 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴으로, 자식 클래스가 어떤 객체를 생성할지 결정하도록 하는 패턴
- 객체 생성 코드를 분리해 클라이언트 코드와 결합도를 낮추기 위한 패턴
- 수정이 일어날 가능성이 큰 부분과 그렇지 않은 부분을 분리하는 게 좋다
- Spring의 경우 정말 많은 팩토리 패턴을 사용 한다
1-2. Builder Pattern
- 객체를 생성 클래스와 표현 클래스를 분리해 서로 다른 표현을 생성하는 방법을 제공
- 동일한 프로세스를 거쳐 다양한 구성의 인스턴스를 만드는 방법
- Java에는 default parameter(기본 매개변수)가 없어서, 생성자의 모든 파라미터를 다 채운 뒤 호출할 수 있다.
- 그래서 이런 복잡도를 해결하기 위해 사용하는 Java 한정 디자인 패턴
1-3. Singleton Pattern
- 프로세스 내에서 단 한 개만 만들어져야 할 때 사용하는 패턴
- Java는 전역 변수를 사용할 수 없다. 그래서 객체를 딱 하나만 생성해야 할 때 사용하는 패턴으로 어디에서든 참조할 수 있게 하는 패턴
- 생성자를 private으로 변경해서 다른 클래스에서 new로 생성할 수 없게 함
- 클래스 안에 자신의 타입을 갖는 객체를 선언한다
- static 아닌 변수는 객체가 생성될 때마다 동적공간에 메모리가 할당되지만, static 변수는 메모리가 지정된 정적 공간에 딱 하나만 존재한다 (컴파일 할 때부터)
- static 메소드는 이미 메모리의 정적 공간에 자리를 차지하고 있으므로 해당 객체를 new로 생성하지 않고 바로 불러서 사용 가능
- 크롬의 다크모드 같이 딱 하나의 값이 고정돼야 하는 경우 사용
2. 구조패턴
2-1.Proxy Pattern
- 프록시는 대리인이라는 뜻으로 무언가를 대신 처리한다는 의미
- 어떤 객체를 사용하고자 할 때 직접 객체를 참조하는 게 아니라 대리인을 통해 객체에 접근하는 방식
- 백엔드에선 객체 선언을 할 때 이 객체의 코드를 변경하지 않고 기능을 부여하기 위해 사용
2-2. Composite Pattern(컴포지트 패턴)
- 복합 객체나 단일 객체를 동일하게 취급하는 것이 목적인 패턴으로, 합성한 객체들의 집합
- 객체들의 관계를 트리 구조로 작성하여 전체-부분 계층을 표현하는 패턴
- 객체의 상위, 하위 체계의 파악이 가능하고 1:1,N:1을 처리하는 데도 유용
- 컴포지트 패턴은 컴퓨터의 폴더 시스템을 생각하면 된다. 폴더 시스템은 폴더 안에 폴더가 있을 수도 있고, 파일도 있을 수 있으며 구조가 트리 형식이다.
2-3. Adapter Pattern
- 한 클래스의 인터페이스를 사용하려는 다른 인터페이스로 변환할 때 사용
- 주로 인터페이스 호환성이 맞지 않아 발생하는 문제를 해결하기 위해 사용하며, 같이 쓸 수 없는 클래스들을 연결해서 사용하는 것이 가능하다
- 기존 코드를 재사용하기 위해 내적, 외적 구조를 변환하는 작업을 처리한다.
2-4. Decorator Pattern
- 객체에 결합을 통해 기능을 동적으로 유연하게 환장할 수 있게 해주는 패턴
- 데코레이터는 서브 클래스를 만드는 것을 통해 기능을 유연하게 확장할 수 있는 방법 제공
- 간단하게 용도에 따라 어떤 객체에 기능을 동적으로 추가하는 패턴
- 클래스를 하나 만들고 오버라이드로 상속을 받는걸 전부 데코레이터 패턴이라 보면 된다.
3. 행위패턴
3-1. Observer Pattern
- 객체의 상태 변화를 관찰하는 관찰자들로 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 통지하는 패턴
- 어떤 객체의 변경 사항이 발생했을 때 이와 연관된 객체들에게 알려주는 패턴
- 근데 1:1 이 될 수도 있고 1:N이 될 수도 있음
- 단, 옵저버 패턴은 매우 유명하지만 백엔드에선 사용하지 않는다..!
3-2. Strategy Pattern
- 행위를 클래스로 캡슐화해 동적으로 행위를 자유롭게 바꿀 수 있게 해주는 패턴
- 전략을 쉽게 바꿀 수 있도록 해주는 디자인 패턴
- 간단하게 설정을 코드가 아니라 data, 클래스로 만들었다고 생각하면 됨
3-3. Template Method Pattern
- 템플릿 메소드 패턴은 객체지향에서 매우 많이, 자연스럽게 쓰는 패턴
- 특정 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 전체 구조를 바꾸지 않으면서 특정 단계에서 수행하는 내용을 바꾸는 패턴
- 알고리즘의 구조를 메소드에 정의하고, 하위 클래스에서 알고리즘 구조 변경 없이 재정의하는 패턴
장점
- 코드의 중복을 줄일 수 ㅇ
- 자식 클래스의 역할을 줄여 핵심 로직의 관리가 쉬움
- 코드를 객체 지향적으로 구성 가능
단점
- 추상 메소드가 너무 많아지면 클래스 관리가 복잡해진다.
- 클래스 간의 관계와 코드가 꼬여버릴 염려(복잡성 증대)가 있다.
반응형
'Develop > Java' 카테고리의 다른 글
[IntelliJ] Gradle - Lombok 설치방법 (Macbook) (0) | 2023.03.27 |
---|---|
[IntelliJ]Java build system 및 프로젝트 빌드 하는 방법 (0) | 2023.03.19 |
실무에서 쓸 수 있는 Java 코딩 팁 모음 (0) | 2022.10.25 |
java 기본 구조 (0) | 2022.10.09 |
java 설치 및 실습환경 구성 (0) | 2022.10.09 |