티스토리 뷰

디자인 패턴
자주 사용하는 설계 패턴을 정형화 해서 이를 유형별로 가장 최적의 방법으로 개발을 할 수 있도록 정해둔 설계.
알고리즘과 유사하지만 명확하게 정답이 있는 형태는 아니며 프로젝트의 상황에 맞추어 개발 가능하다.

Gof 디자인 패턴
소프트웨어 설계를 할 때는 기존의 경험이 매우 중요한데 모든 사람이 다양한 경험을 가지고 있을 수는 없으므로 이러한 지식을 공유하기 위해서 나온 것이 GOF(Gang of Four) 의 디자인 패턴이다. 객체 지향 개념에 따른 설계 중 재사용할 경우 유용한 설계를 디자인 패턴으로 잘 정리해둔 것이다.

Gof 의 디자인 패턴은 총 23개 이며, 이를 잘 이해하고 활용한다면 경험이 부족하더라도 좋은 소프트웨어 설계가 가능하다.


23가지 패턴 중에서도 크게 3가지로 나눌 수 있다.

  • 생성 패턴
  • 구조 패턴
  • 행위 패턴

1. 생성 패턴

객체를 생성하는 것과 관련된 패턴으로, 객체의 생성과 변경이 전체 시스템에미치는 영향을 최소화하고 코드의 유연성을 높여준다.

  • Factory Method
  • Singleton
  • Prototype
  • Builder
  • Abstract Factory
  • Chaining

Singleton Pattern

Singleton 패턴은 어떠한 클래스(객체)가 유일하게 1개만 존재 할 때 사용한다. 서로 자원을 공유 할 때 사용.

2. 구조 패턴

프로그램 내의 자료 구조나 인터페이스 구조 등 프로그램 구조를 설계하는데 활용 될 수 있는 패턴 클래스, 객체들의 구성을 통해서 더 큰 구조를 만들 수 있게 해준다.

큰 규모의 시스템에서는 많은 클래스들이 서로 의존성을 가지게 되는데, 이런 복잡한 구조를 개발하기 쉽게 만들어 주고 유지 보수 하기 쉽게 만들어 준다.

  • Adapter
  • Composite
  • Brdige
  • Decorator
  • Facade
  • Flyweight
  • Proxy

Adapter Pattern

Adapter 는 실생활에서는 100v 를 220v로 변경해주거나 그 반대로 해주는 변환기를 예를 들 수 있다.
호환성이 없는 기존 클래스의 인터페이스를 변환하여 재사용할 수 있도록 한다.

SOLID 중에서 개방폐쇄 원칙(OCP) 를 따른다.

언제 사용하는가?
어댑터를 이용하면 언터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다.

Proxy Pattern

스프링 AOP 는 프록시 기반의 AOP 구현체이며, 스프링 Bean 에만 AOP 적용이 가능하다.

Proxy Class 를 통해서 대신 전달하는 형태로 설계되며, 실제 client 는 Proxy로 부터 결과를 받는다.
Cache의 기능으로도 사용이 가능하다.

SOLID 중에서 개방폐쇄 원칙(OCP)과 의존 역전 원칙(DIP) 를 따른다.

언제 사용하는가?
프록시 패턴을 쓰는 이유는 접근을 제어하고 싶거나 부가 기능을 추가하고 싶을 때 사용한다.

Decorator Pattern

객체의 결합을 통해 기능을 동적으로 유연하게 확장 할 수 있게 해주는 패턴

데코레이터 패턴은 기존 뼈대 (클래스)는 유지하되, 이후 필요한 형태로 꾸밀 때 사용한다. 확장이 필요한 경우 상속의 대안으로도 활용한다.
SOLID 중에서 개방 폐쇄 원칙과 의존 역전 원칙을 사용한다.

예를 들어 에스프레소 원액을 가지고 물을 넣거나 우유를 넣는 등의 행동으로 새로운 커피를 만들어내는 것과 비슷하다.

Facade Pattern

Facade 는 건물의 앞쪽 정면이라는 뜻을 가진다. 여러개의 객체와 실제 사용하는 서브 객체의 사이에 복잡한 의존 관계가 있을 때 중간에 Facade 라는 객체를 두고 여기서 제공하는 interface 만을 활용하여 기능을 사용하는 방식이다. Facade 자신이 가지고 있는 각 클래스의 기능을 명확히 알아야한다.

3. 행위 패턴

반복되는 사용되는 객체들의 상호작용을 패턴화한 것으로 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 제공한다. 행위 패턴은 행위 관련 패턴을 사용하여 독립적으로 일을 처리하고자 할 때 사용.

  • Template Method
  • Interpreter
  • Iterator
  • Observer
  • Strategy
  • Visitor
  • Chain of responsibility
  • Command
  • Mediator
  • State
  • Memento

Observer Pattern

관찰자 패턴은 변화가 일어 났을 때, 미리 등록된 다른 클래스에 통보해주는 패턴을 구현한 것이다.
많이 보이는 곳은 event listener 에서 해당 패턴을 사용하고 있다.

Strategy Pattern

전략 패턴으로 불리며 객체지향의 꽃이다.
유사한 행위들을 캡슐화 하여 객체의 행위를 바꾸고 싶은 경우 직접 변경하는 것이 아닌 전략만 변경하여 유연하게 확장하는 패턴 SOLID 중에서 개방폐쇄 원칙(OCP)과 의존 역전 원칙(DIP)을 따른다.

URI 설계 패턴

URI(Uniform Resource Identifier)
인터넷에서 특정 자원을 나타내는 주소 값, 해당 값은 유일하다.

URL(Uniform Resource Locator)
인터넷에서의 자원, 특정 파일이 어디에 위치하는지 식별하는 주소

URL은 URI의 하위 개념이다.

URI 설계 원칙 (RFC-3986)

https://datatracker.ietf.org/doc/html/rfc3986

슬래시 구분자(/) 는 계층 관계를 나타내는 데 사용한다.

https://happycampus.co.kr/classes/java/curriculums/web-master

URI 마지막 문자로 / 는 포함하지 않는다.

https://happycampus.co.kr/classes/java/curriculums/web-master/

하이픈(-)은 URI 가독성을 높이는데 사용한다.

https://happycampus.co.kr/classes/java/curriculums/web-master

밑줄(_)은 사용하지 않는다.

https://happycampus.co.kr/classes/java/curriculums/web-master

URI의 경로에는 소문자가 적합하다.

https://happycampus.co.kr/classes/JAVA/curriculums/web-master

파일 확장자는 URI에 포함하지 않는다.

https://happycampus.co.kr/classes/java/curriculums/web-master.jsp

프로그래밍 언어에 의존적인 확장자를 사용하지 않는다.

https://happycampus.co.kr/classes/java/curriculums/web-master.do

구현에 의존적인 경로를 사용하지 않는다.

https://happycampus.co.kr/servlet/classes/java/curriculums/web-master

세션 ID 를 포함하지 않는다.

https://happycampus.co.kr/classes/java/curriculums/web-master?session-id=abcdef

프로그래밍 언어의 Method 명을 이용하지 않는다.

https://happycampus.co.kr/classes/java/curriculums/web-master?action=intro

명사에 단수형 보다는 복수형을 사용해야 한다. 컬렉션에 대한 표현은 복수로 사용

classes, curriculums
https://happycampus.co.kr/classes/java/curriculums/web-master

컨트롤러 이름으로는 동사나 동사구를 사용한다.

https://happycampus.co.kr/classes/java/curriculums/web-master/re-order

경로 부분 중 변하는 부분은 유일한 값을 대체 한다.

CRUD 기능을 나타내는 것은 URI 에 사용하지 않는다.

URI Query Parameter 디자인

URI Query 는 컬렉션의 결과를 페이지로 구분하여 나타내는데 사용한다.

#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online.
https://bit.ly/3FVdhDa

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

댓글