์ ๋ต ํจํด์ ์์ ์ ๊ธฐ๋ฅ ๋งฅ๋ฝ(context)์์ ํ์์ ๋ฐ๋ผ ๋ณ๊ฒฝ์ด ํ์ํ ์๊ณ ๋ฆฌ์ฆ์ ์ธํฐํ์ด์ค๋ฅผ ํตํด ํต์งธ๋ก ์ธ๋ถ์ ๋ถ๋ฆฌ์ํค๊ณ , ์ด๋ฅผ ๊ตฌํํ ๊ตฌ์ฒด์ ์ธ ์๊ณ ๋ฆฌ์ฆ ํด๋์ค๋ฅผ ํ์์ ๋ฐ๋ผ ๋ฐ๊ฟ์ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ ๋์์ธ ํจํด์ด๋ค. ๋์ฒด ๊ฐ๋ฅํ ์ ๋ต์ด๋ผ๊ณ ๋ณด๊ธฐ๋๋ฌธ์ ์ ๋ต ํจํด์ด๋ผ ๋ถ๋ฆฐ๋ค.
์ฌ๊ธฐ์ ์๊ณ ๋ฆฌ์ฆ์ด๋ ๋
๋ฆฝ์ ์ธ ์ฑ
์์ผ๋ก ๋ถ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ๊ธฐ๋ฅ์ ์๋ฏธํ๋ค.
์ฆ, ํ๋ก์ ํธ์์ ๋ณ๊ฒฝ์ด ์ผ์ด๋์ง ์๋ ๋ถ๋ถ์์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ ๋ถ๋ถ์ ์ฐพ์ ๋ฐ๋ก ์บก์ํ ํ๋ค๊ณ ๋ณด๋ฉด๋๋ค.
์์
UserDao๋ ์ ๋ต ํจํด์ Context์ ํด๋นํ๋ค. Context๋ ์์ ์ ๊ธฐ๋ฅ์ ์ํํ๋๋ฐ ํ์ํ ๊ธฐ๋ฅ์ค์์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ DB์ฐ๊ฒฐ ์๊ณ ๋ฆฌ์ฆ์ ConnectionMaker ์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌํ์ฌ ์ ์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ๊ตฌํํ ํด๋์ค์์ ์ ๋ต์ ๋ฐ๊ฟ๊ฐ๋ฉด์ ์ฌ์ฉํ ์ ์๋๋ก ๋ถ๋ฆฌํ๋ค.
public class UserDaoTest {
public static void main(String[] args) throws ClassNotFoundException, SQLException{
ConnectionMaker connectionMaker = new DConnectionMaker();
UserDao dao = new UserDao(connectionMaker);
}
}
public class UserDao {
private ConnectionMaker connectionMaker;
public UserDao(ConnectionMaker connectionMaker) {
this.connectionMaker = connectionMaker;
}
public void add(User user) throws ClassNotFoundException, SQLException {
Connection c = connectionMaker.makeConnection();
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 {
Connection c = connectionMaker.makeConnection();
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 interface ConnectionMaker {
public Connection makeConnection() throws ClassNotFoundException, SQLException;
}
public class DConnectionMaker implements ConnectionMaker{
@Override
public Connection makeConnection() throws ClassNotFoundException, SQLException {
// TODO Auto-generated method stub
return null;
}
}
Context(UserDao)๋ฅผ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ(UserDaoTest)๋ Context๊ฐ ์ฌ์ฉํ ์ ๋ต(DConnectionMaker)์ Context์ ์์ฑ์๋ฅผ ํตํด ์ ๊ณตํด์ฃผ๋ฉฐ ์ ๋ตํจํด์ ์ ์งํค๊ณ ์๋ ์์์ด๋ค.
์ฌ๊ธฐ์ ๋ณด๋ฉด UserDao๋ ๊ฐ๋ฐฉ ํ์ ์์น(OPC) ์ ์ ๋ฐ๋ฅด๊ณ ์์ผ๋ฉฐ, ๊ฒฐํฉ๋๋ ๋ฎ์ผ๋ฉฐ, ์ ๋ตํจํด์ ์ ์ฉํ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ฐธ๊ณ