1. 오브젝트와 의존관계

sky·2021년 10월 11일
0

토비의 스프링 3.1

목록 보기
2/2

스프링
스프링 컨테이너(또는 스프링 런타임 엔진)를 제공하며, 설정 정보를 참고해 애플리케이션을 구성하는 오브젝트를 생성하고 관리한다.

  1. IoC/DI : 오브젝트의 생명주기와 의존관계
  2. 서비스 추상화 : 환경이나 서버, 특정 기술에 종속되지 않으며 이식성 ↑, 유연함이 특징
  3. AOP : 부가적 기능을 독립적으로 모듈화

이러한 프로그래밍 모델을 지원해주며, 그 외에 기술 API를 제공한다.

1장 DAO

중복코드는 메소드로 분리해서 관리할 것.
같은 기능을 필요로 하지만, 디테일에 차이가 난다면 상속을 사용할 것.

메소드로 분리할 때 주로 사용하는 두 가지 패턴은 하단에 기술한다.

템플릿 메소드 패턴(Super Class 관점)

슈퍼클래스에 기본 로직 흐름을 만들고, 기능 일부를 추상메소드나 오버라이딩이 가능한 메소드로 만들어 서브클래스에서 해당 메소드를 필요에 따라 구현해 사용하도록 하는 방법.
해당 패턴에서 슈퍼클래스에 디폴트 기능을 정의 또는 비워뒀다가 서브클래스에서 선택적으로 오버라이드할 수 있도록 만들어둔 메소드를 훅(Hook) 메소드라고 한다.

팩토리메소드 패턴(Sub Class 관점)

서브클래스에서 구체적 오브젝트 생성방법을 결정하는 방법. 오브젝트 생성 방법을 슈퍼클래스의 기본코드에서 독립시킨다. 상속을 통한 기능 확장이 주요 특징이다.

이렇듯 객체지향적 설계 시 확장성 추구 방법은 주로 클래스 상속과 오브젝트 합성을 사용한다.

개방 폐쇄 원칙(OCP)

클래스나 모듈은 확장 시 열려있어야 하며, 변경 시 닫혀있어야 한다.

객체지향 설계원칙(SOLID)

SRP단일 책임 원칙
OCP개방 폐쇄 원칙
LSP리스코프 치환 원칙
ISP인터페이스 분리원칙
DIP의존관계 역전원칙의 첫 글자를 따서 만든 단어다.

개방 폐쇄 원칙은 높은 응집도와 낮은 결합도를 중요시한다.

높은 응집도

응집도가 높으면 변화가 일어날 때 모듈의 많은 부분이 함께 바뀐다. 모듈의 일부를 변경할 때, 모듈 전체에 어떤 부분이 바뀌어야 하고 그 변경으로 인해 바뀌지 않는 부분에 다른 영향이 미치지 않는지 파악하여야 한다.

낮은 결합도

결합도가 낮으면 하나를 변경할 때 다른 모듈과 객체에게 변경에 대한 여파가 미치지 않는다. 결합도가 높으면 변경에 따르는 작업량이 많아지고, 변경으로 인해 버그가 발생할 가능성이 높다.

전략패턴

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

profile
keep going

0개의 댓글