코드의 간결함을 위해 롬복을 이용
@Getter
@Setter
public class User{
private String id;
private String name;
private String password;
}
package user.dao;
import user.domain.User;
import java.sql.*;
public class UserDAO {
public void add(User user) throws ClassNotFoundException, SQLException{
Class.forName("사용하는 드라이버클래스명");
Connection c = DriverManager.getConnection(
"dburl","대충유저이름","대충비밀번호"
);
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("사용하는 드라이버클래스명");
Connection c = DriverManager.getConnection(
"dburl","대충유저이름","대충비밀번호"
);
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;
}
public static void main(String[] args) throws SQLException, ClassNotFoundException {
UserDAO dao = new UserDAO();
User user = new User();
user.setId("cvcvcx");
user.setName("조창훈");
user.setPassword("12345678");
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 Connection getConnection() throws SQLException, ClassNotFoundException {
Class.forName("사용하는 드라이버클래스명");
Connection c = DriverManager.getConnection(
"dburl","대충유저이름","대충비밀번호"
);
return c;
}

UserDAO에서 구현코드를 제거하고, getConnection을 추상 메서드로 만든다.

위와같이 클래스도 추상클래스로 변경해야함

추상 메서드라서 코드는 없지만 메서드는 존재한다.
즉, 메서드getConnection()을 호출하는 코드는 유지가능



둘은 구성이 같지만, 목적이 생성이냐 행위인가에 따라서 다른패턴이다.