일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- JPA예제
- 플러터 공부
- 자료구조공부
- Flutter
- 코테공부
- JPA공부
- 기술면접공부
- 플러터 개발
- 스프링
- querydsl
- DDD
- nestjs스터디
- 스프링 공부
- Kafka
- 스프링부트공부
- JPA 공부
- nestjs
- 알고리즘공부
- 스프링공부
- 스프링부트
- 기술공부
- K8S
- 프로그래머스
- JPA스터디
- 카프카
- JPA
- 자바공부
- Axon framework
- 코테준비
- nestjs공부
- Today
- Total
DevBoi
[디자인 패턴] 스프링 디자인 패턴에 대해 알아보자 본문
1. 템플릿 메서드 패턴
슈퍼 클래스에서 정의한 기본 로직을 서브 클래스에서 필요에 맞게 구현해서 쓰는 방법
- 템플릿 메소드, 슈퍼클래스에서 기본 알고리즘 골격을 담는다.
예를 들면, 해당 클래스를 상속하는 클래스들은 해당 클래스를 호출하면, 동일 메소드 순으로 호출되게 된다.
- 훅 메소드 : 추상화 되어있는 메소드를 자식 클래스에서 구현한다.
즉 템플릿 메소드 패턴은
슈퍼 클래스에서 기본적인 로직의 흐름을 만들고 그 기능의 일부를 추상 메소드나 오버라이딩이 가능한
protected 메소드 등으로 만든뒤 서브클래스에서 이런 메소드를 필요에 맞게 구현해서 사용한다.
2. 팩토리 메소드 패턴
추상화된 객체 생성 메소드를 서브클래스에서 구현하고,
슈퍼클래스에서는 해당 생성 메서드를 포함한 return타입만 명시한다.
서브 클래스에서 슈퍼클래스의 메소드를 확장하는 방식의 구조이다.
슈퍼클래스에서는 피자만들기()를 통해 피자를 받고,
공통 메소드인 주문하기를 통해 해당 객체를 return한다.
피자만들기는 서브클래스에서 구현하고싶은대로 구현하여, return 하도록한다.
모든 디자인 패턴은 아래와 같은 효과를 위한다.
1. 개방 폐쇄 원칙
확장엔 열리고 변경에는 닫혀있어야한다.
이게 무슨 말이냐면, 어떤 특정에 대한 기능을 추가할때는 편하게 추가가 가능하지만
이러헥 기능을 추가한다고 해서 기존에 사용되고있던 기능의 변경필요성에 대해서는 없게끔 만드는 원칙이다.
예를 들면 UserDao에서 Db 커넥션에 대한 소스가 있고, 이부분에 대한 설정 관련 내용이 소스 있다고 가정해보자
DB 커넥션에 대한 변경이 발생할때마다 UserDao를 변경해야하는 경우가 생긴다.
그런데 만약에 DB커넥션에 대해 관장하는 모듈이 따로 있고, UserDao에서는 생성자에 커넥션 객체를 받아서
이를 전달 받아서 사용한다면?
UserDao는 DB커넥션이 변경되어도 영향을 받지 않는다.
추가로 다른 DB커넥션을 사용하여도 결국은 다른 곳에서는 생성자 파라미터로 다른 커넥션 모듈을 주입할테니 변경에도 닫혀있다
2. 높은 응집도 낮은 결합도
개방 폐쇄 원칙과 같은 얘기기도 하는데, 한가지의 모듈은 한가지의 기능만을 위할수록
응집도는 높아지고, 결합도는 낮아진다.
이건 개방 폐쇄 원칙과 유사한 어구이다.
'[Computer Science]' 카테고리의 다른 글
[페이징 교체 알고리즘] 페이징 교체 알고리즘 구현하기 (0) | 2022.02.20 |
---|---|
XML vs Json 비교 장단점 정리 (0) | 2022.02.03 |
애자일 vs 워터풀 프로젝트 모델 (0) | 2021.10.14 |
[기술 지식] MSA 구조가 뭐임? (0) | 2021.09.06 |
DTO, DAO, VO 예제 및 예시 (0) | 2021.09.05 |