토비의 스프링 (1)

  • 개방 폐쇄 원칙 : 클래스나 모듈은 확장에 열려있어야 하며 변경에는 닫혀 있어야 한다.
  • 응집도 : 하나의 모듈, 클래스가 하나의 책임 or 관심사에만 집중되어 있음. 변경이 일어나면 모듈의 많은 부분이 함께 바뀜, 높은 응집도는 비슷한 기능들이 한곳에 뭉쳐있는 것
  • 결합도 : 하나의 오브젝트가 변경이 일어날 때에 관계를 맺고 있는 다른 오브젝트에게 변화를 요구하는 정도

개방 폐쇄의 원칙은 높은 응집도와 낮은 결합도인데 이 중 낮은 결합도는 하나의 변경이 발생할 때 다른 모듈과 객체로 변경에 대한 요구가 전파되지 않는 것이라고 보면 된다. 칼을 휘두른다, 도끼를 휘두른다. 휘두른다 - 하나에 종속되어 있지 않은 것

  • 전략패턴 : 자신의 기능 구현에서 필요에 따라 변경이 필요한 알고리즘은 인터페이스를 통해 통째로

    외부로 분리시키고, 이를 구현한 구체적인 알고리즘 클래스를 필요에 따라 바꿔서 사용할 수 있게 하는 디자인 패턴이다. Table Class <- sort -> Quick Sort, Bubble Sort

  • 제어의 역전(IoC) : 제어 흐름의 개념을 거꾸로 뒤집는 것이다.

    오브젝트가 자신이 사용할 오브젝트를 스스로 선택하지 않으며 생성하지도 않는다. 자신도 어떻게 만들어지고 어디서 사용되는지를 알 수 없다. 모든 제어 권한을 자신이 아닌 다른 대상에게 위임하기 때문이다.

    프레임워크에 정의 되어 있는 인터페이스 interface, 추상타입 abstract 을 나의 코드에서 구현, 상속 한후 프레임워크에 넘겨주는 것이다. 프레임워크는 인터페이스와 추상을 알고 있으므로 내가 하고자 하는 일련의 작업을 처리할 수 있다. 이는 객체를 프레임워크에 주입하는 것이고, 이를 의존을 주입 DI(dependency injection) 한다고 부른다.

  • bean : 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트이다.

    스프링빈은 스프링 컨테이너가 생성과 관계설정, 사용등을 제어해주는 제어의 역전이 적용된 오브젝트다. 빈 팩토리는 빈의 생성과 관계설정 같은 제어를 담당하는 IoC 오브젝트이다. 어플리케이션 콘텍스트는 IoC방식을 따라 만들어진 일종의 빈 팩토리이며 IoC를 적용해서 관리할 모든 오브젝트에 대한 생성과 관계 설정을 담당한다.

용어 정리

  • 빈 : 스프링이 IoC방식으로 직접 생성과 제어를 담당하는 오브젝트
  • 빈 팩토리 : 스프링의 IoC를 담당하는 핵심 컨테이너이며 빈을 등록, 생성, 조회 등 담당
  • 어플리케이션 콘텍스트 : 빈 팩토리를 확장한 IoC컨테이너