[GoF의 디자인 패턴]
Q. 강한결합, 느슨한결합?
#서론 : 위의 서론을 잘 풀어서 스토리로 풀어내는 것.
- 디자인패턴 중요한것 여기계신 모두가 알고계실것이다.
- 디자인패턴은 " 일반적인 설계 문제를 특정한 맥락으로 해결하기 위해 객체와 클래스를 전달하는 방법을 맞춘 것"-GoF
- 공통적인 애플리케이션 설계문제의 해법
- 보통 객체 생성 및 객체가 상호작용 문제를 해결하는데 디자인 패턴을 주로 활용한다.
<패턴의 유래와 필요성>
1980년대 객체지향 프로그래밍 등장 > 절차지향 프로그래밍과 다른 문제점 발생 > 유사한 패턴 띠고있음 > 오랜 경험
<패턴의 실제>
▶생성 패턴 : 객체생성,초기화,클래스 선택에 관한 패턴 (싱글톤,팩토리)
▶행동 패턴 : 객체 간 소통, 메시징, 상호작용에 관한 패턴 (옵저버)
▶구조 패턴 : 클래스와 객체 관계를 조직하는 패턴. 관련된 객체를 서로 묶어 원하는 로직을 구현하는 방법을 안내(장식자)
**서드파티(3rd party) : 프로그래밍을 도와주는 플러그인이나 라이브러리, 프로그래밍 개발과 개발자 사이에 플러그인, 라이브러리, 프레임워크 / 서비스와 사용자 사이에 서드파티는 응용 프로그램, 애플리케이션, 웹 서비스
**보일러플레이트 코드(Boilerplate code) : 최소한의 변경으로 여로곳에서 재사용되며, 반복적으로 비슷한 형태를 띄는 코드
>>[해결방법 1] 어노테이션 프로세서 사용
사람이 몇시간동안 해야하는 작업을 컴퓨터는 수초내에 할 수도 있다. 어노테이션을 프로세서를 이용하여 보일러 플레이트 코드 생성하는 자동화 작업을 한다면, 보일러플레이트 코드를 제거하는데 가장 큰 도움이 될 것이다.
-하나의 모듈이 바뀌면 의존한 다른 모듈까지 변경 되어야 한다
- DIP(의존관계 역전 원칙)은 추상적인 것은 자신보다 구체적인 것에 의존하지 않고, 변화하기 쉬운 것에 의존해서는 안된다는 원칙입니다. 구체적으론 구현 클래스에 의존하지 말고, 인터페이스에 의존해야 하는 원칙입니다.
- 니가 제어를 해, 단지 개발자인 나는 너가 특정상황에 뭘 할지에대해 선언해줄게.
-
#본론 : 그래도 아예 아무것도 안짚고 넘어가기엔 알맹이가 없음. 알맹이를 뭐로 할지 구상을 조금 해보자.
- MVC 패턴 : 대표적인 컴파운드 패턴
[대표적인 스프링 디자인 패턴]
1. 프록시 패턴
2. 싱글턴 패턴
3. 템플릿 메소드 패턴
4. 팩토리 메소드 패턴
5. 전략 패턴
6. 의존성 주입
7. MVC 패턴
8. 프론트 컨트롤러
9. 뷰 헬퍼
DI (Dependency Injection ) 패턴
- 객체 자체가 아니라 Framework에 의해 객체의 의존성이 주입되는 설계 패턴
- framework에 의해 동적으로 주입되므로 여러객체간의 결합이 줄어든다.
- spring framework에서 지원하는 IoC(Inversion of Control)의 형태
- 객체지향설계에서 클래스는 반드시 느슨하게 결합되어야 한다. 느슨한 결합은 한 클래스의 변경이 다른 클래스들에게 영향을 미치지 않는 것을 의미한다. 그래서 어플리케이션을 지속가능하고 확장성있게 만든다.
- IoC(제어의 역전): 프로그램 제어권을 framework가 가져가는 것
개발자가 모든 제어의 중심이지만 코드 전체에 대한 제어는 framework가 한다.
개발자가 설정(xml, annotation 등)만 하면 Container가 알아서 처리한다.
즉, 우리는 Framework 속에서 프로그래밍을 하는 것.
#결론 :
오늘 세미나를 듣고 여러분들이
#오늘의 목표
1. 디자인 패턴이란 무엇인가 간단하게 설명 할 수 있다.
2.
#퀴즈 타임
#준비할것
- 자료 ( 직접클래스 작성해가기 )
- ppt
-
#피드백 타임
- 제가 다음에 더 잘하고 싶어서 피드백을 꼭 받고싶습니다...
- 좋았던점, 개선할점(or 추천) 하나씩 부탁드리겠습니다!
여러분 주제를 결정했습니다!
[제목] : 느슨한 결합을 위하여..
[부제] : IoC, DIP, DI 가 어떤식으로 Spring Framework에 녹아있을까?
팁 : IoC, DIP, DI의 개념에 관해서 환기를 한번 해오신다면 좋을것 같습니다:)
'[중앙대]멋쟁이 사자처럼' 카테고리의 다른 글
#스터디 정리 (0) | 2022.06.14 |
---|---|
[Java] 느슨한 결합을 위하여.. ( IoC, DIP, DI 란 무엇인가? ) (0) | 2022.06.09 |
220519 [목] 자바스터디 #1 (0) | 2022.05.19 |
220323 [수] 1차 세션 웹(WEB) (0) | 2022.03.23 |
[멋쟁이사자처럼] 면접 예상질문 모음 (0) | 2022.03.16 |