이야기박스
Spring DAO (1.1~1.3) 본문
스프링의 핵심 철학
기본으로 돌아가서 객체 지향의 진수를 보여주자
==> 오브젝트의 깊은 관심을 가져야 함
--> 오브젝트 설계
--> 객체지향 설계
그 첫 번째, 데이터 모델을 관리해주는 DAO !!
DAO
[AOP란]
Aspect Oriented Programming
비지니스 로직 + 공통 모듈 ==> 기능 구현
특정 관점(예를 들면 기능)에서 모듈을 나누고 이 모듈에 비지니스 로직을 삽입하는 방식으로 개발하는 것
[관심사 분리 예제]
- 메소드 분리
- 클래스분리
- 인터페이스 구성
--> ( git )
기타 용어
[자바빈]
- 디폴트 생성자 : 파라미터가 없는 생성자
- 프로퍼티 : getter/setter 등
의 관례를 따라 만들어진 오브젝트
[리팩토링]
외부동작을 바꾸지 않으면서 내부 구조를 개선하는 방법
- 코드 구조에만 신경쓸 것
- 기능을 추가하지 말 것
하는 이유
- 소프트웨어디자인 개선
- plc 증가
- 소스를 쉽게 만들어줌
- 생산성 향상
[디자인 패턴]
일반적인 설계 문제를 특정한 맥락으로 해결하기 위해 객체와 클래스를 전달하는 방법을 맞춘 것
- GoF -
주요 요소
- pattern name --> 이름으로 추상화된 개념 이해할 수 있어야 함
- problem --> 해결할 문제와 배경
- solution --> 설계를 구성하는 요소들간의 관계
- consequence --> 결과와 장단점
[템플릿 메소드 패턴]
알고리즘의 뼈대를 맞추는 것, 전체적인 레이아웃은 통일시키지만 상속받은 클래스로 하여금 어느정도 유연성을 주도록 하는 디자인 패턴
[팩토리 메서드 패턴]
템플릿 메소드 패턴의 팩토리 판
[객체 지향 설계 원칙 SOLID]
반드시 지켜야 하는 것이 아닌, 가이드라인 이라고 생각하면 됨
SRP (The Single Responsibility Principle)
단일 책임 원칙 : 작성된 클래스는 하나의 기능만 가지며, 클래스가 제공하는 모든 서비스는 그 하나의 책임을 수행하는데 집중되어야 함
OCP (The Open Closed Principle)
개방 폐쇄 원칙 : 클래스나 모듈은 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다
LSP (The Liskov Substitution Principle)
리스코브 치환 원칙 : 서브 타입은 언제나 기반 타입으로 교체할 수 있어야 한다
ISP (The Interface Segregation Principle)
인터페이스 분리 원칙 : 한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다
DIP (The Dependency Inversion Principle)
의존성 역전 원칙 : 구조적 디자인에서 발생하던 하위 레벨 모듈의 변경이 상위 모듈 변경을 요구하면 안됨
[응집도와 결합도]
응집도
모듈의 독립성을 나타내는 개념! 하나의 모듈 내부 처리 요소들간에 기능적 연관도
응집도가 높으면 프로그램 이해가 쉬워지는 경향이 있음
응집도가 낮다면?
- 이해하기 힘듬
- 재사용 어려움
- 유지보수 힘듬
- 다른 클래스 변화에 민감
결합도
한 요소가 다른 요소와 얼마나 연결되어 있는지를 나타내는 정도
결합도가 높다면?
- 한 클래스 변경 --> 주변 클래스들 변경 (cascaded)
- 수정을 위해선 연관된 클래스들도 함께 이해해야 함
- 재사용성이 낮음
==>
응집도는 높을수록
결합도는 낮을수록
이상적인 프로젝트가 되는 경향이 있음
(단, 모든 것은 적당히가 중요함 --> throttling )
[전략 패턴]
Strategy Pattern
자신의 기능 맥락에서, 필요에 따라 변경이 필요한 알고리즘을 인터페이스를 통해 통째로 외부로 분리시키고, 이를 구현한 구체적인 알고리즘 클래스를 필요에 따라 바꿔서 사용할 수 있게 하는 디자인 패턴
==> 즉 변경이 필요한 부분을 인터페이스를 통해 밖으로 빼고, 필요에 의해 구현체를 만들면서 전략적으로 사용하는 것
**
스프링이란
객체지향적 설계 원칙과 디자인 패턴에 나타난 장점을
자연스럽게 개발자들이 사용할 수 있도록 해주는 프레임워크 !!
참조
'Programming Language > Spring' 카테고리의 다른 글
Chapter 5. 서비스 추상화 (0) | 2019.01.15 |
---|---|
Chapter4 (0) | 2019.01.15 |
Spring Template (Chapter 3) (0) | 2018.12.11 |
Spring IoC & 오브젝트 & DI (1.4~1.8) (0) | 2018.12.04 |
Spring Study 개요 (1) | 2018.11.20 |