본문 바로가기
Programming/토비의 스프링 예제

예제2 중복 코드의 메소드 추출

by 막이 2014. 8. 18.

커넥션을 가져오는 중복된 코드 분리 

DB연결 관련된 부분을 분리해놓음으로써, DB연결과 관련된 부분에 변경이 일어났을 경우( 로그인 정보, url, db종류 등)
getConnection() 이라는 한 메소드의 코드만 수정하면된다.
관심의 종류에 따라 코드를 구분해놓았기 때문에 한 가지 관심에 대한 변경이 일어날 경우 그 관심이 집중되는 부분의 코드만 수정하면 된다.
관심이 다른 코드가 있는 메소드에는 영향을 주지도 않을 뿐더러, 관심 내용이 독립적으로 존재하므로 수정이 간단해짐.


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package springbook.user.dao;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
import springbook.user.domain.User;
 
public class UserDao {
    
    public void add(User user) throws ClassNotFoundException, SQLException{
        //DB 연결 기능이 필요하면 getConnection() 메소드를 이용하게 된다.
        Connection c = getConnection();
        
        PreparedStatement ps = c.prepareStatement(
            "INSERT INTO USERS(id, name, password)"
                +"VALUES( ?,?,?)"
        );
        
        ps.setString(1, user.getId());
        ps.setString(2, user.getName());
        ps.setString(3, user.getPassword());
        
        ps.executeUpdate();
        
        ps.close();
        c.close();
    }
    
    public User get(String id) throws ClassNotFoundException, SQLException{
        //DB 연결 기능이 필요하면 getConnection() 메소드를 이용하게 된다.
        Connection c = getConnection();
        
        PreparedStatement ps = c.prepareStatement("SELECT * FROM USERS WHERE id = ?");
        ps.setString(1, id);
        
        ResultSet rs = ps.executeQuery();
        rs.next();
        
        User user = new User();
        user.setId(rs.getString("id"));
        user.setName(rs.getString("name"));
        user.setPassword(rs.getString("password"));
        
        rs.close();
        ps.close();
        c.close();
        
        return user;
        
    }
    
    
    /*
     * 중복된 코드를 독립적인 메소드로 만들어서 중복을 제거한다.
     */
    private Connection getConnection() throws ClassNotFoundException, SQLException {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        Connection c = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:testDB" , "otep""otep");
        
        return c;
    }
 
}
 


'Programming > 토비의 스프링 예제' 카테고리의 다른 글

예제6. 관심사의 분리  (0) 2014.08.20
예제5. 인터페이스의 도입  (0) 2014.08.20
예제4. 클래스의 분리  (0) 2014.08.20
예제3. 상속을 통한 확장  (0) 2014.08.20
예제1  (0) 2014.08.18