DAO 분리와 확장 (1/3) - 첫번째. 마구잡이 DAO 생성
DAO(Data Access Object)는 DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트를 말한다.
1. User 클래스 생성
- 사용자 정보 저장 시 자바빈 규약을 따르는 오브젝트를 이용하면 편리하다. 사용자 정보를 저장할 User 클래스를 만든다.
public class User {
String id;
String name;
String password;
public String getld() (
return id;
}
public void setld(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;
}
}
2. DAO 클래스 생성
- 사용자 정보를 DB에 넣고 관리할 수 있는 DAO 클래스를 생성 한다.
public class UserDao {
public void add(User user) throws ClassNotFoundException, 5QLException {
--ex) Class.forName( "com.mysql.jdbc.Driver");
--ex) Class.forName( "oracle.jdbc.driver.OracleDriver");
Connection c = DriverManager.getConnection(
--ex) “jdbc :mysql: //localhost/springbook" , "spring" , "book");
--ex) "jdbc:oracle:thin:@100.000.000.000:1521:HSHOP", "id", "pass");
PreparedStatement ps = c.prepareStatement(
"insert into users(id , name, password) values(?, ?, ?)");
ps.set5tring(1 , user.getld());
ps.set5tring(2 , user.getName());
ps.set5tring(3 , user.getPassword());
ps.executeUpdate();
ps .close();
c.close();
}
public User get(String id) throws ClassNotFoundException, SQLException {
--ex) Class.forName( "com.mysql.jdbc.Driver");
--ex) Class.forName( "oracle.jdbc.driver.OracleDriver");
Connection c = DriverManager.getConnection(
--ex) “jdbc :mysql: //localhost/springbook" , "spring" , "book");
--ex) "jdbc:oracle:thin:@100.000.000.000:1521:HSHOP", "id", "pass");
PreparedStatement ps = c.prepareStatement(
"select * from users where id = ?");
ps.setString(1 , id);
ResultSet rs = ps .executeQuery ();
rs .next();
User user = new User();
user.setld(rs .getString("id"));
user.setName(rs .getString("name"));
user.setPassword(rs.getString(password"));
rs . close ();
ps . close();
c. close();
return user;
}
}
3. main()을 이용한 DAO 테스트
- 만들어진 코드의 기능을 검증하고자 할 때 가장 간단한 방법중 한가지는 main() 메소드이다.
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( 깨arried');
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() + " 조회 성공");
}
- 이 코드에 무슨 문제가 많은 것인가?
- 잘 동작하는 코드를 굳이 수정하고 개선해야 하는 이유는 뭘까?
- 개선 후 장점?
- 객체지향 설계의 원칙과 무슨 상관이 있을까?
스프링은 앞으로 공부하면서 이런 고민을 끈임없이 확인하고 좋은 결론을 내릴 수 있도록 객체지향 기술과 자바 개발의 선구자들이 고민하고 제안한 방법에 대한 힌트를 제공해 준다.