이야기박스

Spring DAO (1.1~1.3) 본문

Programming Language/Spring

Spring DAO (1.1~1.3)

박스님 2018. 11. 20. 16:35
반응형

스프링의 핵심 철학

기본으로 돌아가서 객체 지향의 진수를 보여주자

==> 오브젝트의 깊은 관심을 가져야 함

--> 오브젝트 설계

--> 객체지향 설계


그 첫 번째, 데이터 모델을 관리해주는 DAO !!

DAO

[DAO란?]
Data Access Object
DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트


[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

자신의 기능 맥락에서, 필요에 따라 변경이 필요한 알고리즘을 인터페이스를 통해 통째로 외부로 분리시키고, 이를 구현한 구체적인 알고리즘 클래스를 필요에 따라 바꿔서 사용할 수 있게 하는 디자인 패턴


==> 즉 변경이 필요한 부분을 인터페이스를 통해 밖으로 빼고, 필요에 의해 구현체를 만들면서 전략적으로 사용하는 것


** 

스프링이란 

객체지향적 설계 원칙디자인 패턴에 나타난 장점을 

자연스럽게 개발자들이 사용할 수 있도록 해주는 프레임워크 !!


참조

객체지향 개발 5대 원리 

템플릿 메소드 패턴


반응형

'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