[토비의 스프링] Week1(1.1~1.5)

4 분 소요

토비의 스프링 3.1 1장 1.1~1.5

챕터 소개
1장 오브젝트와 의존관계는 스프링의 동작 원래에 대한 장입니다.
스프링을 이해하려면 먼저 오브젝트를 이해해야 하고, 그 오브젝트가 다른 오브젝트와 상호작용하는 전체적인 라이프사이클을 알아야 합니다.
오브젝트의 설계 단계로 넘어가게 된다면, 디자인 패턴과 리팩토링, 단위 테스트와 같은 지식이 요구됩니다.
정리하자면, 스프링은 OOP의 best practice를 손쉽게 적용할 수 있는 프레임워크입니다.

1.1 초난감 DAO

JDBC를 이용하는 작업의 일반적인 순서

  • DB 연결을 위한 Connection을 가져온다.
  • SQL을 담은 Statement를 만든다.
  • 만들어진 Statement를 실행한다.
  • 실행 결과를 받아 오브젝트(ResultSet)에 옮긴다.
  • 사용하고 더 이상 쓰지 않는 리소스를 단는다.
  • 예외를 catch하고, throw한다.

1.2 DAO의 분리

관심사의 분리 (Separation of Concerns)

관심이 같은 것끼리는 하나의 객체 안으로 또는 친한 객체로 모이게 하고, 관심이 다른 것은 가능한 따로 떨어져서 서로 영향을 주지 않도록 분리하는 것.

메소드 추출 (Extract Method)

공통의 기능을 담당하는 메서드로 중복된 코드를 뽑아내는 것

리팩토링

기존의 코드를 외부의 동작방식에는 변화 없이 내부 구조를 변경해서 재구성하는 작업 또는 기술

  • 중복된 코드를 제거해야 한다.

템플릿 메소드 패턴 (Template method pattern)

슈퍼클래스에 로직의 흐름을 만들고, 기능의 일부를 추상 메서드나 오버라이딩이 가능한 protected 메서드 등으로 만든 뒤 서브클래스에서 필요에 맞게 구현해서 사용하도록 하는 방법

  • 변하지 않는 기능은 슈퍼클래스에, 자주 변경되며 확장할 기능은 서브클래스에

팩토리 메소드 패턴

서브클래스에서 오브젝트 생성 방법과 클래스를 결정할 수 있도록 미리 정의해둔 메서드

1.3 DAO의 확장

추상화

어떤 것들의 공통적인 성격을 뽑아내어 이를 따로 분리해내는 작업

  • 인터페이스: 공통적인 성격을 뽑아내어 최소한으로 추상화한다. 어떤 일을 하겠다는 기능만 정의해 놓았다.

오브젝트 사이의 관계

런타임 시에 한쪽이 다른 오브젝트의 레퍼런스를 갖고 있는 방식

  • 메서드 파라미터나 생성자 파라미터 사용
  • 생성자 호출
  • 코드에 다른 클래스의 이름이 나타남

1.3.4 원칙과 패턴

개방 폐쇄 원칙 (OCP)

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

높은 응집도

변화가 일어날 때 해당 모듈에서 변하는 부분이 크다는 것. (그만큼 모듈이 한 가지 기능만 수행한다는 거지~)

낮은 결합도

책임과 관심사가 다른 모듈들이 느슨하게 연결(loose coupling)된 형태를 유지 결합도: 하나의 오브젝트가 변경이 일어날 때에 관계를 맺고 있는 다른 오브젝트들에게 변화를 요구하는 정도

전략 패턴

필요에 따라 변경이 필요한 알고리즘을 인터페이스를 통해 통째로 외부로 분리시키고, 이를 구현한 구체적인 알고리즘 클래스를 필요에 따라 바꿔서 사용할 수 있게 하는 디자인 패턴.
이때 알고리즘이란 수학적 알고리즘이 아닌, 독립적인 책임으로 분리가 가능한 기능을 의미함.

1.4 제어의 역전(IoC)

팩토리

객체의 생성 방법을 결정하고 그렇게 만들어진 오브젝트를 돌려주는 오브젝트

제어의 역전

프로그램의 제어 흐름 구조가 뒤바뀌는 것

  • 모든 제어 권한을 자신이 아닌 다른 대상에게 위임한다
  • 템플릿 메서드는 IoC 개념을 활용해 문제를 해결함. (구현부가 로직의 흐름에 의해 제어됨)
  • 프레임워크는 애플리케이션 코드가 프레임워크에 의해 사용되므로 프레임워크가 흐름을 주도한다.

1.5 스프링의 IoC

애플리케이션 컨텍스트

  • 오브젝트 팩토리에 대응되며, IoC에서 흐름을 주도하는 역할을 한다.
  • 모든 오브젝트에 대한 생성과 관계설정을 담당
  • 그래서 클라이언트는 구체적인 팩토리 클래스를 알 필요가 없음
  • Bean Factory의 확장된 개념이다.
  • 스프링 컨테이너라고 불린다.

빈 bean

스프링이 IoC 방식으로 관리하는 오브젝트

댓글남기기