#객체지향

객체지향 4가지 핵심요소

  1. 캡슐화
  2. 상속
  3. 다형성
  4. 추상화

객체지향 설계 5원칙 (SOLID)

  1. SPR(Single Responsibility Principle) : 단일 책임 원칙
  2. OCP(Open Closed Principle) : 개방 폐쇄 원칙
  3. LSP(Liskov Subtitution Principle) : 리스코프 치환 원칙
  4. ISP(Interface Segregation Principle) : 인터페이스 분리 원칙
  5. 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 의 특징

  1. 특정 규약에 종속되지 않는다.
    특정 라이브러리나 모듈에 정의된 클래스를 꼭 상속받아서 구현하지 않아도 된다.
    POJO가 되기 위해서는 외부 의존성이 없고, 순수한 자바로 구성가능해야 한다.
  2. 특정 환경에 종속되지 않는다.
    만일 특정 BL을 처리하는 부분에 외부 종속적인 httpRequest, Session등을 사용할 시, POJO를 위배한 것으로 간주한다.
    또한 많이 사용하고 있지만 \@Annotation 기반으로 설정하는 부분도 엄연히 POJO라고 볼수 없다.

POJO Framework

  • Spring, Hibernate

: 두 프레임워크에서 POJO를 지향하고 있다.