토비의 스터디(17)
-
[토비의 스프링 3.1] 1.4 제어의 역전(IoC)
1.4.1 오브젝트 팩토리 지금까지 초난감 DAO를 리팩토링하였다. 그러나 UserDaoTest가 DAO의 클라이언트 오브젝트가 되면서, 어떤 ConnectionMaker 구현 클래스를 사용할지를 결정하는 기능을 떠맡게 되었다. UserDao의 기능이 잘 동작하는지 테스트하려고 만든 것인데 다른 책임을 떠맡고 있으니 문제가 있어보인다. 그러니 이것도 분리하자. 객체의 생성 방법을 결정하고, 그렇게 만들어진 오브젝트를 돌려주는 클래스를 만들어보자. 이런 일을 하는 오브젝트를 흔히 팩토리(Factory)라고 부른다. 오브젝트를 생성하는 쪽과 생성된 오브젝트를 사용하는 쪽을 분리하기 위해 사용한다. public class DaoFactory { public UserDao userDao() { Connectio..
2022.05.26 -
[토비의 스프링 3.1] 1.3 DAO의 확장
앞서 1.2장에서 "DB 연결을 어떤 방법으로 할 것인가"라는 관심사를 중심으로 UserDao를 상하위 클래스로 분리하였다. 추상클래스로 선언하고 이를 상속한 서브클래스에서 구체적인 getConnection()메소드를 구현했다. 하지만 자바는 단일 상속만을 허용하기때문에 상속은 비효율적이며, 상속 관계가 의외로 결합도가 높아 부모의 코드가 변경되는 경우 자식 클래스의 코드가 변경되는 일이 빈번하다는 단점이 있었다. 1.3.1 클래스의 분리 그래서 아예 다른 클래스로 화끈하게 분리한다. 상속관계도 아닌 완전히 독립적인 클래스로 만들어본다. SimpleConnectionMaker라는 새로운 클래스를 만들고, DB 생성 기능을 그 안에 넣는다. UserDao에서는 생성자를 통해 인스턴스 변수로 SimpleCo..
2022.05.25 -
[토비의 스프링 3.1] 1.2 DAO의 분리 - 포포
1.1장에서 작성한 UserDao는 문제점이 많았다. 1.2장에서는 UserDao를 관심사별로 분리하고, 디자인 패턴(템플릿 메소드 패턴, 팩토리 메소드 패턴)에 대해서 알아보자 1.2.1 관심사의 분리 코드에서 분리해야 하는 것을 세가지 꼽자면 1) 변하는 것과 변하지 않는 것 2) 관심사 3) 공통 코드 로 기억하고 있다. 이렇게 분리한다면 변경이 일어날 때 필요한 작업이 최소화되며, 해당 변경이 다른 곳에 문제를 일으킬 가능성이 낮아진다. 그 중 관심사를 분리하는 것은 관심이 같은 것 끼리는 하나의 객체 안으로 또는 친한 객체로 모으고, 관심이 다른 것은 가능한 한 따로 분리하여 서로 영향을 주지 않도록 분리하는 것을 말한다. 이전 UserDao의 add메소드를 다시 한번 살펴보면, public v..
2022.05.24 -
[토비의 스프링 3.1] 1.1 초난감 DAO - 포포
실습은 OS: Window 10 IDE: Intelli J Java 11, MySQL 8.0.24 로 진행하였다. 1.1.1 User 사용자 정보를 저장할 때는 자바빈 규약(getter,setter 등)을 따르는 오브젝트를 이용하면 편리하다. User 클래스를 만들고, id, name, password의 프로퍼티를 가진 User 클래스를 생성한다. 이후 User오브젝트에 담긴 정보가 실제로 보관될 DB의 테이블을 하나 생성한다. 테이블 명은 USER이며 프로퍼티는 User클래스와 동일하다. 1.1.2 UserDao DAO(Data Access Object)는 DB를 사용해 데이터를 조회, 조작하는 기능을 전담하는 오브젝트이다. 사용자 정보를 DB에 넣고 관리하는 UserDao 클래스를 생성한다. 사용자를..
2022.05.23 -
들어가며
매 주 일요일 교재로 진행하는 스터디에 참여중이다. 복습의 목적으로 책의 내용을 요약하여 블로그에 포스팅할 계획이며 현 카테고리에서 작성된 모든 소스코드의 저작권은 저자 이일민 님께 있음을 밝힌다.
2022.05.23