[중앙대]멋쟁이 사자처럼

#디자인 패턴 #느슨한 결합 #발표 자료 정리

Supersett 2022. 5. 25. 14:53

[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의 개념에 관해서 환기를 한번 해오신다면 좋을것 같습니다:)