티스토리 뷰

토비의 스프링 정리

1.1 초난감 DAO

yki1204 2018. 2. 27. 22:29

사용자 정보를 DB에 넣고 관리할 수 있는 DAO 클래스를 만들어 보자.

우선 사용자 정보를 저장하고 조회하는 기능의 add() 메소드와 get() 메소드를 구현해 보았다.

 

UserDao.java

 

public class UserDao {


	public void add(User user) throws ClassNotFoundException, SQLException {
		
		Class.forName("com.mysql.jdbc.Driver");
		Connection c = DriverManager.getConnection(
				"jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8", "testuser", "1234");

		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 {
		Class.forName("com.mysql.jdbc.Driver");
		Connection c = DriverManager.getConnection(
				"jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8", "testuser", "1234");
		
		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;
	}
}

 

User.java

 
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 String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}

 

기능을 검증하기 위해 main() 메소드를 이용하여 테스트 해보자.

 

UserDaoTest.java

 
public class UserDaoTest {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {

		UserDao dao = new UserDao();
		
		User user = new User();
		user.setId("superYuser");
		user.setName("YuD");
		user.setPassword("1111");

		dao.add(user);
			
		System.out.println(user.getId() + " 등록 성공");
		
		User user2 = dao.get(user.getId());
			
		System.out.println(user2.getId() + " 조회 성공");
		
	}
}

 

이 클래스를 정상적으로 실행하면 다음과 같은 메시지를 확인할 수 있다.

 

superYuser 등록 성공

superYuser 조회 성공

 

그런데 지금까지 만든 이 클래스 코드는 사실 여러가지 문제가 있다.

가장 큰 문제는 add() 메소드에 있는 DB 커넥션 생성과정의 코드가 get() 메소드에 동일하게 중복되어 있다는 점이다.

따라서 중복된 코드를 별도의 메소드로 분리하는 작업이 필요하다.

 

또한, UserDao가 커넥션 생성에 대한 정보를 너무 많이 알고 있다.

다른 관심사에 대해 필요 이상의 많은 정보를 알게 되면 변화에 효율적으로 대응하기 어렵고 생산성이 떨어져 결국 소스의 품질이 떨어질 수 있다.

 

다음장에서 이와 같은 문제점을 해결해 보자.

'토비의 스프링 정리' 카테고리의 다른 글

1.2 상속을 통한 확장  (0) 2018.03.05
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/09   »
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
글 보관함