이제 UserDao 클래스에 main() 메소드를 생성해 테스트 할 수 있는 코드가 되도록 해보겠다.
public static void main(String[] args) throws ClassNotFoundException, SQLException {
UserDao dao = new UserDao();
User user = new User();
user.setId("whiteship");
user.setName("백기선");
user.setPassword("married");
dao.add(user);
System.out.println(user.getId() + ": 등록 성공");
User user2 = dao.get(user.getId());
System.out.println(user2.getName());
System.out.println(user2.getPassword());
System.out.println(user2.getId() + ": 조회 성공");
}
해당 main() 메소드를 실행하면 다음과 같은 테스트 성공 메시지를 얻을 수 있다. 만약 실패했다면 DB 설정 부분을 확인하고 디버깅을 돌려보자.
whiteship 등록 성공
백기선
married
whiteship 조회 성공
DAO 개선하기 - 1 과 2 를 통해서 간단한 사용자 정보 등록과 조회가 되는 무척 간단한 DAO 와 테스트용 메소드가 완성이 돼었다. 하지만 이렇게 만든 UserDao 에는 문제가 많다. 이 코드들을 좀 더 객체지향 적으로 변경을 해보도록 하자.
해당 코드들의 문제점으로는 만약 오라클 DB 를 사용하고 있는데 MySQL DB로 변경을 하려고 할 때 많은 코드들을 변경해야 한다. 즉, 변화가 있을 때 수정하기 무척 힘들다는 것이다.
그렇다면 중복된 코드를 메소드로 추출해보자.
public class UserDao {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
UserDao dao = new UserDao();
User user = new User();
user.setId("whiteship");
user.setName("백기선");
user.setPassword("married");
dao.add(user);
System.out.println(user.getId() + ": 등록 성공");
User user2 = dao.get(user.getId());
System.out.println(user2.getName());
System.out.println(user2.getPassword());
System.out.println(user2.getId() + ": 조회 성공");
}
public void add(User user) throws ClassNotFoundException, SQLException {
Connection connection = getConnection();
PreparedStatement ps = connection.prepareStatement(
"INSERT INTO users(id, name, password) values(?, ?, ?)");
ps.setString(1, user.getId());
ps.setString(2, user.getName());
ps.setString(3, user.getPassword());
ps.executeQuery();
ps.close();
connection.close();
}
public User get(String id) throws ClassNotFoundException, SQLException {
Connection connection = getConnection();
PreparedStatement ps = connection.prepareStatement(
"SELECT * FROM users WHERE id = ?"
);
ps.setString(1, id);
ResultSet resultSet = ps.executeQuery();
resultSet.next();
User user = new User();
user.setId(resultSet.getString("id"));
user.setName(resultSet.getString("name"));
user.setPassword(resultSet.getString("password"));
resultSet.close();
ps.close();
connection.close();
return user;
}
private Connection getConnection() throws ClassNotFoundException, SQLException {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "hojak99", "0430");
return connection;
}
}
다음과 같이 getConnection() 메소드를 만들어서 중복된 코드를 제거했다.
다음 편에서는 상속을 통해 확장하는 내용을 작성하도록 하겠다.
반응형