토비의 스프링 - 1장. 오브젝트와 의존관계(1)

 Date: 2022-02-04

들어가며
1.1 초난감 DAO
1.2 DAO의 분리

들어가며

스프링이란 무엇인가?

  • 애플리케이션의 기본 틀 - 스프링 컨테이너
    • 스프링 컨테이너(=애플리케이션 컨텍스트) : 스프링에서 제공하는 런타임 엔진
    • 스프링 컨테이너는 설정 정보를 참고해서 애플리케이션을 구성하는 오브젝트(=Bean)를 생성하고 관리한다.
  • 공통 프로그래밍 모델 - IoC/DI, 서비스 추상화, AOP
    스프링 프레임워크의 3가지 프로그레밍 모델 (라이브러리 VS. 프레임워크)
    • IoC/DI
      • 오브젝트의 생명주기와 의존관계에 대한 프로그레밍 모델이다.
      • 스프링은 객체지향 설계 원칙과 디자인 패턴의 핵심 원리를 담고 있는 IoC/DI를 프레임워크의 근간으로 삼고 있다.
    • 서비스 추상화
      • 구체적인 기술과 환경에 종속되지 않도록 유연한 추상 계층을 두는 방법이다.
    • AOP
      • 애플리케이션 코드에 산재해서 나타나는 부가적인 기능을 독립적으로 모듈화하는 프로그래밍 모델이다.
  • 기술 API
    • 스프링은 개발의 다양한 영역에 바로 활용할 수 있는 방대한 양의 기술 API를 제공한다.

1.1 초난감 DAO

1.2 DAO의 분리

관심사의 분리

  • 객체지향 설계와 프로그래밍이 이전의 절차적 프로그래밍 패러다임에 비해 초기에 좀 더 많은, 번거로운 작업을 요구하는 이유는 객체지향 기술 자체가 지니는 변화에 효과적으로 대처할 수 있다는 기술적인 특징 때문이다.
  • 그러면 어떻게 변경이 일어날 때 필요한 작업을 최소화하고, 그 변경이 다른 곳에 문제를 일으키지 않게 할 수 있었을까? 그것은 분리와 확장을 고려한 설계가 있었기 때문이다.
  • 관심사의 분리란, 관심사가 같은 것끼리 모으고 다른 것은 분리해줌으로써 같은 관심에 효과적으로 집중할 수 있게 만들어주는 것이다.
  • 중복 코드 메소드 추출
  • 변경사항에 대한 검증: 리팩토링과 테스트
    • main() 메소드를 이용해 테스트를 실행한다.
    • 두번째 테스트 부터는 테이블의 기본키인 id 값이 중복되기 때문에 예외가 발생한다.
    • main() 메소드 테스트를 다시 실행하기 전에 User 테이블의 사용자 정보를 삭제해줘야 한다.

    리팩토링
    리팩토링인 기존의 코드를 외부의 동작방식에는 변화 없이 내부 구조를 변경해서 재구성하는 작업 또는 기술을 말한다.

  • 상속을 통한 확장

    - 템플릿 메소드 패턴
    슈퍼클래스에 기본적인 로직의 흐름을 만들고, 그 기능의 일부를 추상 메소드나 오버라이딩이 가능한 protected 메소드 등으로 만든 뒤 서브 클래스에서 이런 메소드를 필요에 맞게 구현해서 사용하도록 하는 방법의 디자인 패턴

    - 팩토리 메소드 패턴
    서브클래스에서 구체적인 오브젝트 생성 방법을 결정하게 하는 디자인 패턴

    디자인 패턴
    디자인 패턴은 소프트웨어 설계 시 특정 상황에서 자주 만나는 문제를 해결하기 위해 사용할 수 있는 재사용 가능한 솔루션을 말한다. 디자인 패턴을 사용하면 설계의 의도와 해결책을 파악하기 쉽다는 장점이 있다.

    • 상속의 한계
      • 만약 UserDao가 다른 목적을 위해 상속을 사용하고 있다면, 자바에서 다중상속을 허용하지 않기 때문에 상속을 사용할 수 없다.
      • 상속을 통한 부모-자식 클래스의 관계는 생각보다 밀접하다. 그래서 슈퍼클래스 내부의 변경이 있을 때 모든 서브클래스를 함께 수정하거나, 서브클래스의 변경이 슈퍼클래스에 영향을 주지 않도록 제한해야 한다.
      • 만약 다른 DAO 클래스를 만들어야 하는 경우, getConnection() 구현 코드가 중복된다.

Reference

[토비 스프링] 사용자 DAO [토비의 스프링 vol.1]1장 오브젝트와 의존관계