2013년 11월 12일 화요일

토비의 스프링 3.0 스터디 1장

1장. 오브젝트와 의존관계


1장은 이 스터디를 위한 스프링의 내용 중 가장 중요하다고 할 수 있다.
스프링 프레임웍의 설계 기초가 되는 기본 개념을 설명하고 있고, Case-Study 방식으로 문제 해결 방법을 도출해가는 과정에서 프레임웍의 사상과 더 나아가서 객체지향 설계 방식에 대한 부분까지 설명하고 있다.

1. 가정

우리는 스터디를 위해서 우리의 조건을 다음과 같이 가정해보자.

  • 우리 스터디 멤버는 스프링 프레임웍을 아직 모른다.
  • 우리 스터디 멤버는 웹 애플리케이션 기반의 솔루션을 만들어서 판매해야 한다.
  • 솔루션 개발 프로젝트의 PM은 이 책의 저자이다.

이와 같이 가정을 하는 이유는 1장을 효과적으로 이해하기 위해 기존에 가지고 있던 생각과 사상 즉, 고정관념을 초기화할 필요가 있다.


2. 문제 상황

우리는 프레임웍 같은 것을 아직 모르기 때문에 모든 기능을 각각 클래스로 구현해서 만들어 나가야 한다.
그런데 우리가 만들어서 판매하고자 하는 웹 애플리케이션 기반 솔루션의 고객이 다양한 DBMS를 사용하고 있다.
우리 솔루션을 판매하면서 고객에게 직접 애플리케이션 코드를 수정해서 DBMS 환경을 맞추어서 사용해달라고 할 수는 없다.
어떻게 해결할 수 있을까??

3. 전개

이 문제 상황을 해결하기 위해 우리의 PM인 이 책의 저자는 다음과 같이 문제를 해결해 나간다.

  1. JDBC로 DBMS를 연결하는 클래스를 작성

    퉁쳐서 만들어졌기 때문에 엄청난 중복코딩이 발생할 수 밖에 없는 단점이 있다.

  2. 관심사의 분리, 리팩토링

    독립 기능을 분리하여 변화에 용이하게 할 수 있도록 하였다.


    본문 63p "프로그래밍의 기초 개념 중에 관심사의 분리 (Seperation of Concerns)라는 게  있다. 이를 객체지향에 적용해보면, 관심이 있는 것끼리는 하나의 객체 안으로 또는 친한 객체로 모이게 하고, 관심이 다른 것은 가능한 한 따로 떨어져서 서로 영향을 주지 않도록 분리하는 것이라고 생각할 수 있다."

  3. 상속을 통한 확장

    템플릿 메소드 패턴 활용

  4. 인터페이스를 사용하여 변화에 적응

    바뀌는 것과 바뀌지 않는 것을 정의하여 변화에 적응하도록 변경하였다.

  5. 관계를 설정할 책임을 분리

    관계의 Dependency를 끊고 오브젝트를 제공받도록 하였다.
    개방 폐쇄 원칙이 적용 되었음을 되 짚어보고, 높은 응집도와 낮은 결합도가 어떻게 반영 되었는지 확인해본다. (high coherence and low coupling)

  6. 제어의 역전을 통한 오브젝트 컨트롤

    드디어 스프링의 출현.

    관계의 설정 작업 제어권을 별도 오브젝트 팩토리로 분리
    이 팩토리 기능을 일반화

    스프링에서 구현된 싱글톤 방식의 장단점을 알아보고 단점을 극복할 수 있도록 활용하는 방법 고찰

  7. 제어의 역전에 따르는 의존 관계 주입

    생성자를 통한 런타임 시의 의존 관계의 주입
    별도의 기능으로 구현된 클래스를 생성자 이외에 수정자나 일반 메소드를 주입할 수 있게 했다.

  8. XML을 이용하여 의존 관계를 주입하는 설정 처리

    Application Context가 xml을 사용하여 의존 관계 주입 설정을 처리할 수 있도록 했다.

4. 정리

스프링은 개발자가 구현하는 애플리케이션을 구동시키기 위해 관심사를 집중하도록 하게하고 의존도를 낮게 하며, 애플리케이션의 제어를 효율적으로 처리할 수 있도록 객체지향적 원리를 통해 개발 되었다.

우리는 객체지향 설계와 프로그래밍에 대한 학습과 훈련을 통해 목표로 하는 웹 애플리케이션 기반 솔루션을 개발할 수 있도록 하자.

5. Case Study

  • KT에서의 Re-factoring 사례
  • SNS 코드 리뷰

6. 토론




댓글 없음:

댓글 쓰기