Part3 - CH1. 스프링 입문_객체지향
#객체지향
객체지향 4가지 핵심요소
- 캡슐화
- 상속
- 다형성
- 추상화
객체지향 설계 5원칙 (SOLID)
- SPR(Single Responsibility Principle) : 단일 책임 원칙
- OCP(Open Closed Principle) : 개방 폐쇄 원칙
- LSP(Liskov Subtitution Principle) : 리스코프 치환 원칙
- ISP(Interface Segregation Principle) : 인터페이스 분리 원칙
- DIP(Dependency Inversion Principle) : 의존 역전 원칙
응집도와 결합도
객체지향 설계 5원칙을 살펴보기 전에, 응집도와 결합도에 대해서 알아보자.
좋은 소프트웨어 설계 : 낮은 결합도, 높은 응집도
-
결합도
모듈(클래스)간의 상호 의존 정도로, 결합도가 낮으면 모듈간 상호의존도가 줄어들어 객체의 재사용 및 유지보수가 유리하다. -
응집도
하나의 모듈 내부에 존재하는 구성요소들의 기능적 관련성으로, 응집도가 높은 모듈은 하나의 책임에 집중하고 독 립성이 높아져, 재사용 및 유지보수가 용이하다.
1. SPR
: 어떠한 클래스를 변경해야 하는 이유는 한가지 뿐이어야 한다.
풀어말하면, 한가지 클래스는 한가지 기능에 충실하고, 해당 기능은 해당 클래스에서만 처리되게 한다는 것.
2. OCP
: 자신의 확장에는 열려 있고, 주변의 변화에 대해서는 닫혀져 있어야 한다.
상위 클래스 또는 인터페이스를 중간에 둠으로써, 자신의 변화에는 폐쇄적이게 하고, 인터페이스는 외부의 변화에 대하여 확장을 개방해 줄 수 있다.
3. LSP
: 서브 타입은 언제나 자신의 상위 타입으로 교체할 수 있어야 한다.
4. ISP
: 클라이언트는 자신이 사용하지 않는 메소드에 의존 관계를 맺으면 안된다.
프로젝트 요구상항과 설계에 따라서 SPR/ISP 를 선택한다.
5. DIP
: 자신보다 변하기 쉬운 것에 의존성을 가지면 안된다.
POJO JAVA
POJO JAVA란?
POJO : Plain Old Java Object
순수한 자바 오브젝트를 뜻한다.
예전 EJB가 많이 사용되던 시절에는 POJO가 아닌 EJB에 종속적으로 개발을 진행.
그로 인해, 모듈교체 혹은 시스템 업그레이드에 많은 불편함이 발생.
POJO 의 특징
- 특정 규약에 종속되지 않는다.
특정 라이브러리나 모듈에 정의된 클래스를 꼭 상속받아서 구현하지 않아도 된다.
POJO가 되기 위해서는 외부 의존성이 없고, 순수한 자바로 구성가능해야 한다. - 특정 환경에 종속되지 않는다.
만일 특정 BL을 처리하는 부분에 외부 종속적인 httpRequest, Session등을 사용할 시, POJO를 위배한 것으로 간주한다.
또한 많이 사용하고 있지만 \@Annotation 기반으로 설정하는 부분도 엄연히 POJO라고 볼수 없다.
POJO Framework
- Spring, Hibernate
: 두 프레임워크에서 POJO를 지향하고 있다.