본문 바로가기
spring/토비의 스프링

토비의 스프링 Vol. 1 정리 - 1장 오브젝트와 의존관계

by Empering 2020. 4. 3.
반응형

토비의 스프링 Vol.1 정리 - 1

1장 오브젝트와 의존관계


스프링은 객체지향 설계와 구현에 과해 특정한 모델과 기법을 강요 하지않는다.
하지만 오브젝트를 어떻게 효과적으로 설계하고 구현하고, 사용하고, 개선해나갈 것인가에 대한 기준을 마련해준다.

 

스프링은 객체지향 기술과 설계, 구현에 과한 실용적인 전략과 검증된 베스트 프랙티스를 프레임워크 형태로 제공한다.


관심사의 분리

  • 객체지향의 세계에서는모든것이 변한다.
  • 오브젝트의 설계와, 구현이 변한다.
  • 사용자의 비지니스 프로세스와 요구사항은 끊임없이 변한다.
  • 애플리케이션이 폐기처분 될 때 변화는 중지된다.

 

따라서 개발자는 미래의 변화를 대비 해야한다.

가장좋은 대책은 변화의 폭을 최소한으로 줄여주는 것이다.

 

변화의 폭을 줄이기 위해 분리와 확장을 고려한 설계가 필요하다.

 

관심사의 분리 (Separation of Concerns)

  • 관심이 같은 것끼리는 하나의 객체 안으로 또는 친한 객체로
  • 관심이 다른 것은 가능한 따로 떨어져서 서로 영향을 주지 않도록 분리
  • DB의 크랜잭션 관련 관심과 비지니스 로직의 관심은 서로 영향을 주지 않아야 함

개방 폐쇄 원칙 (OCP)

  • 클래스나 모듈은 확장에는 열려 있어야하고, 변경에는 닫혀 있어야 한다

높은 응집도와 낮은 결합도

높은 응집도

  • 응집도가 높다는 것은 변화가 일어날 때 해당 모듈에서 변하는 부분이 크다는 것이다.
  • 모듈이 일부분만 변경이 일어나도 된다면 모듈 전체에서 어떤 부분에 영향이 가는지 파악해야 한다.

낮은결합도

  • 책임과 관심사가 다른 오브젝트 또는 모듈과는 느슨하게 연결된 형태를 유지해야 한다.
  • 결합도가 낮아지면 변화에 대응하는 속도가 높아지고 구성이 깔끔해지고, 확장하기 쉬워진다.

전략 패턴 (Strategy Pattern)

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

제어의 역전 (IoC)

팩토리

  • 객체의 생성방법을 결정하고 만들어진 오브젝트를 돌려주는 역할
  • 애플리케이션의 오브젝트들을 구성하고 그 관계를 정의하는 책임을 가짐

제어의 역전

  • 프로그램의 제거 흐름 구조가 뒤바뀌는 것
  • 특정 오브젝트에서 자신이 사용할 오브젝트를 스스로 선택/생성하지 않는다.
  • 특정 오브젝트 자신이 어떻게 만들어지고, 어디서 사용되는지 알 수 없다.
  • 모든 제어 권한은 자신이 아닌 다른 대상에게 위임한다.
  • 위에서 설명한 팩토리 또한 제어의 역전이 적용 되어있다.

스프링의 IoC

빈 (bean)

  • 스프링이 직접 제어권을 가지고 관계를 부여하는 오브젝트들
  • 스프링이 직접 생성과 제어를 담당하는 오브젝트만 빈이라 부른다.

빈 팩토리 (bean factory)

  • 스프링에서 빈의 생성과 관계설정을 담당하는 IoC 오트젝트
  • 보통 빈 팩토리를 더 확장한 애플리케이션 컨텍스트를 주로 사용한다.

애플리케이션 컨텍스트(application context)

  • 빈 택포리를 확장한 IoC 컨테이너
  • 기본적인 기능은 빈 팩토리와 동일하지만 스프링이 제공하는 부가 서비스를 추가제공한다.

스프링 IoC를 통한 장점

  • 클라이언트는 구체적인 팩토리 클래스를 알 필요가 없다.
  • 애플리케이션 컨텍스트는 종합 IoC 서비스를 제공해준다.
  • 애플리케이션 컨텐스트는 빈을 검색하는 다양한 방법을 제공한다.

스프링 IoC의 특징

싱글톤 레지스트리

전통적인 싱글톤 패턴의 한계

  • pirvate 생성자를 갖고 있기 때문에 상속 할 수 없다.
  • 싱글톤은 테스트하기 힘들다.
  • 서버환경에서 싱글톤이 하나만 만들어 지는것을 보장하지 못한다.
  • 싱글톤의 사용은 전역 상태를 만들 수 있기 때문에 바람직하지 못하다.

 

전통적인 싱글톤 패턴의 단점을 극복하기 위한 싱글톤 레지스트리

  • 스태틱메소드와 private 생성자를 사용해야 하는 클래스가 아닌 평범한 자바 클래스를 싱글톤으로 활용하게 해준다.

스프링은 IoC 컨테이너일 뿐 아니라, 고전적인 싱글톤 패턴을 대신해 싱글톤을 만들고 관리해주는 싱글톤 레지스트리이다.

 

의존관계 주입 (DI)

제어의 역전과 의존관계 주입

의존관계

  • 두 개의 클래스간 의존관계가 있다고 할때는 방향성이 존재한다.
  • A ---> B : A가 B에 의존한다.
  • 의존대상이 변하면 그 영향이 의존하는 대상으로 전달되는 것
  • B가 변경이 됨으로 인해 A가 변경되어야 하는 상황이 발생된다.

의존관계 주입의 조건

  • 클래스 모델이나 코드에는 인터페이스에만 의존해야 한다.
  • 런타임 시점의 의존관계는 컨테이너나 팩토리 같은 제3의 오브젝트가 결정한다.
  • 의존관계는 사용할 오브젝트에 대한 레퍼런스를 외부에서 제공(주입)으로 만들어진다.

의존관계 주입의 핵심은 설계 시점에는 알지 못했던 두 오브젝트의 관계를 맺도록 도와주는 제3의 존재가 있다는 것이다. 스프링 애플리케이션 컨텍스트, 빈팩토리, IoC 컨테이너 등이 외부에서 의존관계를 만들어주는 제3의 존재 들이다.

 

토비의 스프링 3.1 Vol. 1: 스프링의 이해와 원리, 에이콘출판 토비의 스프링 3.1 Vol. 2: 스프링의 기술과, 에이콘출판 토비의 스프링 3.1 세트:스프링의 이해와 원리 + 스프링의 기술과, 에이콘출판

 

토비의 스프링 3.1 세트:스프링의 이해와 원리 + 스프링의 기술과

COUPANG

www.coupang.com

“파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음"

반응형

댓글