이 글은 대에 충 훑어보면서 쓰는 글이기 때문에 각종 오류와 잘못된 지식이 포함 될 수 있음을 공지한다



 1장에 나오는 코드는 단순하고 의미없고, 쉬워서 작성하지 않았다. (여러분은 책을 사서 보고 있겠쬬 ㅎㅎ)





1.1장

 DAO 

 Data Access Object DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트


 자바빈

 원래는 비주얼 툴에서 조작 가능한 컴포넌트를 뜻했음. 하지만 자바가 웹 기반쪽으로 선회하면서 자바빈이 인기를 잃기 시작했음. 시간이 흐르면서 자바빈이 남긴 몇 가지 코딩 관례를 뜻하게 됨. 간단하게 이라고 부르기도 함.

 자바빈은 아래와 같은 두가지 관례를 따라 만들어진 오브젝트임

 1) 디폴트 생성자  : 파라미터가 없는 생성자가 존재해야함

 2) 프로퍼티         : getter-setter로 수정 또는 조회 할 수 있도록 만듬


  



1.2장 DAO의 분리

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

 

 DAO에서 필요로하는 관심사들을 나눠보자면.. 

        1. DB와 연결을 위한 커넥션 가져오는 것

2. SQL문의 statement를 만드는 것

3. statement와 connection 오브젝트를 닫아줘서 공유 리소스를 시스템에 돌려주는 것


그래서 이 connection의 분리를 템플릿 메소드 or 펙토리 메소드 패턴으로 분리한다.


템플릿 메소드 패턴

 내가 이해한 바가 맞다면, 변하지 않는 고유의 기능은 super클래스의 메소드로 제공하고, 변하는 기능은 추상 메소드, 혹은 오버라이드 가능한 메소드로 정의해두고, 다른 개발자들에게 오버라이딩해서 사용하는 방식을 이른다. 여기서 반드시 구현해야 하는 메소드는 추상 메소드(abstractMethod) 형태로, 선택적으로 구현해도, 안해도 되는 것은 오버라이드 가능한 메소드형태로 로 제공한다.  구현 안해도 되는 메소드를 훅 메소드(hookMethod)라고 부른다.


펙토리 메소드 패턴 

 멍청해서 이게 뭥미 하고 멍 때리고 있었는데, 기본적인 개념은 어떤 슈퍼클래스가 있고 이 슈퍼 클래스가 처리 골격을 만든다. 하지만 생성은 하지 않는데, 이 생성을 하는 책임은 펙토리에게 있다. 이 펙토리 메소드 페턴의 경우에도 상속을 통해서 구현하게 되는데 상속을 통한 구현은 그닥 좋은 방법은 아니라고 한다. 일반적으로 비슷한 역할을 할 수 있는 전략 패턴을 사용하는게 더 좋다는 이야기이다.

<- 위키꺼



1.3 DAO의 확장

 이 장에서는 전략 패턴으로 DAO를 확장하는 방법을 설명한다. 원래 UserDAO에 존재하던 getConnection을ConnectionMaker 인터페이스로 분리시키는 작업을 설명한다. 


전략 패턴

 펙토리 패턴보다 훨 씬 간결한데 어떤 클래스의 컴포넌트로서 가지고 있고, 필요할 때마다 이 전략 인터페이스를 구현해서 교체하는 방식으로 작동한다. 디자인 패턴 관련해서는 나중에 함 정리하는 글을 써야겠당... 



이 장에서 객체지향 설계 원칙(SOLID)에 관한 설명이 나오는데 그 내용은 다음과 같다.

       1) SRP(The Single Responsibility Principle):       단일 책임 원칙

       2) OCP(The Open Closed Principle):                  개방 폐쇄 원칙

3) LSP(The Liskov Substitution Principle):        리스코프 치환 원칙    

4) ISP(The Interface Segregation Principle):     인터페이스 역전 원칙

5) DIP(The Dependency Inversion Principle):   의존관계 역전 원칙 


요것도 나중에 공부해서 다시 작성해보도록 하겠다... 




1.4 제어의 역전(IoC)

 위에서 각각의 책임별로 찢어 놨던 여러 종류의 클래스들은 그 책임을 분리하기위해서 여러가지로 찢어져버렸고 따라서 제대로 된 역할을 하는 객체를 생성하기위해서는 복잡한 과정을 가져야 한다. 이 때 등장하는데 펙토리라는 친구다. 이 친구는 객체의 생성 방법을 결정하는 역할을 한다. (이 펙토리는 추상 팩토리 패턴이나 팩토리 메소드 패턴의 그 팩토리하고는 조금 다르다. )

 

 이전의 UserDao와 ConnectionMaker라는 친구는 애플리케이션의 핵심적인 데이터 로직과 기술 로직을 담당하고 있었다면 이 factory라는 친구는 컴포넌트의 구조와 관계를 정의한 설계도와 같은 역할을 한다고 볼 수 있다.

 

 제어권의 이전을 통한 제어 관계 역전

 제어의 역전(Inversion of Control)은 한마디로 말하자면 오브젝트가 자신이 사용한 오브젝트를 스스로 선택하지 않는다. 따라서 생성하지도 않는다. 뿐만 아니라 자신이 어디서 사용되는지도 알 수 없다. 이는 모든 제어 권한을 자신이 아닌 다른 대상에게 위임하기 대문이다.


 프레임워크가 제어의 역전 개념이 적용된 대표적인 기술인데, 라이브러리는 애플리케이션의 흐름을 직접 제어하는 반면 프레임워크는 우리가 작성한 애플리케이션의 코드가 프레임워크에 의해서 사용된다.


실습 소스코드 : https://github.com/choiking10/spring_test/tree/vol1_1.1_1.4/lifeignite/src/main/java/user



'web > spring' 카테고리의 다른 글

[토비 vol1] 3.1~3.4 템플릿(1)  (0) 2017.07.26
[토비 vol1] 2.4~2.6 테스트(2)  (0) 2017.07.25
[토비 vol1] 2.1~2.3 테스트(1)  (0) 2017.07.25
[토비 vol1] 1.5~1.9 오브젝트와 의존관계(2)  (0) 2017.07.24
spring 시작하기  (0) 2017.07.24

+ Recent posts