목록스프링프레임워크공부중/1부 초난감DAO 리팩토링 (7)
올해는 머신러닝이다.
전체 소스는 밑에..하지만 책과는 좀 다름..내 나름대로 끝에 마음대로 짠것임..T.T 위 기능을 분리해서 담당할 클래스를 만들어보자. 우선 UserDaoTest 클래스다 public class UserDaoTest { public static void main(String[] args) { UserDao user = new DaoFactory().userDao(); } } Factory에서 연결될 오브젝트를 정의를 한다. public class DaoFactory { public UserDao userDao(){ ConnectionMaker connectionMaker = new DConnectionMaker(); UserDao dao = new UserDao(connectionMaker); retur..
그럼 아예 이런식으로 독립시켜버리자. UserDaoTest라는 클래스를 만들어서 여기안에서 실행및 테스트를 할수 있다. UserDao의 생성자 public UserDao(ConnectionMaker connectionMaker){ //초기화 ID 및 PASSWORD this.connectionMaker = connectionMaker; } public class UserDaoTest { public static void main(String[] args) { ConnectionMaker connectionMaker = new DConnectionMaker(); UserDao dao = new UserDao(connectionMaker); } 이렇게 나누어 지면 거의 끝이다. 하지만 위의 코드에서 문제점은..
-토니의 스프링 책참고 위 경우의 해결책은 두개의 클래스가 서로 긴밀하게 연결되어 있지 않도록 중간에 추상적인 느슨한 연결고리를 만들어주는 것이다.추상화란 어떤 것들의 공통적인 성격을 뽑아내어 이를 따로 분리해내는 작업이다.자바가 추상화를 위해 제공하는 가장 유용한 도구는 바로 인터페이스이다. 인터페이스의 최대장점은 추상화가 되는 동시에 실제 이걸이용해서 구현하는 클래스는 밑 바탕 클래스를 몰라도 된다.. 이 바탕 클래스가 별 스트립쇼를 부리든 난동을 부리든.. 인터페이스만 신경쓰면 된다. 아래는 인터페이스 설정이다. public interface ConnectionMaker { public Connection makeNewConnection() throws ClassNotFoundException,SQ..
앞에서 잠시 언급했듯이 다중상속이 허용되지 않는 자바에선 위와 같은 방법은 별로 좋지 못하다. 그래서 우선 Connection 를 주는 클래스를 아예 따로 떼어버리자. 그럼 상속받을 필요도 없고 그냥 생성해서 쓰면 그만이다. abstact일 필요도 없어진다. 자세한 코드는 다음과 같다. Connection만 관리하는 클래스 추출 public class SimpleConnectionMaker { public Connection makeNewConnection() throws ClassNotFoundException,SQLException{ return 만들어질 커넥션; } } 그럼 add와 get 메소드 안에서는 Connection c = simpleConnectionMaker.makeNewConnecti..
1단계에서 메소드 추출을 이용했다. 만약 이 UserDao클래스가 인기가 많아 N사와 D사에 판매를 하는 경우 N사와 D사의 경우 각각 다른 DB을 쓰고 연결관리를 한다는 가정하에선 기존에 만들어 놓은 UserDao방식은 확장성에서 상당히 비효율적이다. 안에 메인클래스를 수정해야 함은 당연지사고 내가 고생해서 만든 UserDao클래스 극비문서를 남에게 보여줘야 한다는 문제점도 있다. 그래서 이번 단계에서는 내가 만든 UserDao클래스를 보호하면서 각기 다른 회사에 맞는 커넥션을 제공해줄수 있는 리팩토링이다. 여기에서 쓰이는 패턴은 템플릿 메소드 패턴(template method pattern:슈퍼클래스에 기본적인 로직의 흐름을 만들고 , 그 기능의 일부를 추상 메소드나 오버라이딩이 가능한 protect..
이전 UserDao 클래스에서 add() 안의 메소드를 보면 세가지 관심사항을 발견할 수 있다. UserDao의 관심사항 1.DB와 연결을 위한 커넥션을 어떻게 가져올까라는 관심 2.사용자 등록을 위해 DB에 보낼 SQL문장을 담을 Statement를 만들고 실행하는 것 3.작업이 끝나면 사용한 리소스를 닫아주는 일 public void add(User user) throws ClassNotFoundException,SQLException{ Connection c = getConnection(); String sql = "insert into users(id,name,password) values(?,?,?)"; PreparedStatement ps = c.prepareStatement(sql); .....
토비의 스프링3이란 책을 보고 공부하는 중..^^; 우선 처음부터 리팩토링에 대해서 간략하게 얘기하는데 좋은 내용이다.. 그래서 한번 따라해봄.^^ 우선 DB 커넥션 클래스 준비 user.java 파일안 package springbook.user.domain; public class User { String id; String name; String password; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Stri..