• DAO(Data Access Object): DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트를 말한다.
  • 자바빈(JavaBean): 오브젝트?
    • 디폴트 생성자(default constructor): 파라미터가 없는 디폴트 생성자를 갖고 있어야 함. 리플렉션을 이용해서 오브젝트를 생성하기 때문
    • 프로퍼티(property): 자바빈이 노출하는 이름을 가진 속성. setter/getter
  • 관심사의 분리: 관심사가 같은 것끼리 모으고 다른 것은 분리해붐으로써 같은 관심에 효과적으로 집중할 수 있게 만듬
    • 중복 코드의 메소드 추출
  • 상속을 통한 확장
    • 템플릿 메소드 패턴: 슈퍼 클래스에 기본적인 로직의 흐름을 만들고, 그 기능의 일부를 추상 메소드나 오버라이딩이 가능한 메소드 등으로 만든 뒤 서브클래스에서 이런 메소드를 필요에 맞게 구현해서 사용하도록 하는 방법
  • 관계설정 책임의 분리
    • 인터페이스 도입: 상속보다 유연
  • 원칙과 패턴
    • 개방 폐쇄 원칙(OCP, Open-Closed Principle): 클래스나 모듈은 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다.
  • 높은 응집도와 낮은 결합도
    • 높은 응집도: 변화가 일어날 때 해당 모듈에서 변하는 부분이 크다. 변경이 일어날 때 모듈의 많은 부분이 함께 바뀐다면 응집도가 높은것
    • 낮은 결합도: 하나의 변경이 발생할 때 마치 파문이 이는 것처럼 여타 모듈과 객체로 변경에 대한 요구가 전파되지 않는 상태를 말한다.
  • 전략 패턴
    • 자신의 기능 맥락에서 필요에 따라 변경이 필요한 알고리즘을 인터페이스를 통해 통째로 외부로 분리시키고, 이를 구현한 구체적인 알고리즘 클래스를 필요에 따라 바꿔서 사용할 수 있게 하는 디자인 패턴
  • 스프링은 객체지향적 설계 원칙과 디자인 패턴에 나타난 장점을 자연스럽게 개발자들이 활용할 수 있게 해주는 프레임워크
  • 제어의 역전(IoC, Inversion of Control)
    • 오브젝트 팩토리
      • 팩토리: 객체의 생성 방법을 결정하고, 만들어진 오브젝트를 돌려주는 오브젝트
  • 제어권의 이전을 통한 제어관계 역전
    • 제어 역전: 모든 제어 권한을 자신이 아닌 다른 대상에게 위임
    • 프레임워크에 의해 코드가 사용됨
    • 스프링은 IoC를 모든 기능의 기초가 되는 기반기술로 삼고 있으며, IoC를 극한까지 적용하고 있는 프레임워크

Ref.

이일민, “토비의 스프링 3.1”, 에이콘 출판사(2012)