Skip to content

Commit

Permalink
1장: DAO의 확장 - 클래스의 분리
Browse files Browse the repository at this point in the history
앞에서 상속으로인한 확장의 단점을 알아봤다.
UserDao에서 Connection의 관심사를 새로운 클래스로 분리 & 확장해보자. (SimpleConnectionMaker)

하지만 단점 발생
1. UserDao는 DB 커넥션을 가져오는 구체적인 방법에 종속되어 있다.
   UserDao에 SimpleConnectionMaker인스턴스를 직접 사용하기 때문에, N사 D사로 구분하려면 문제가 발생한다. (즉, UserDao의 수정이 불가피해진다.)
2. 메소드명이 변경되어서는 안된다.
   만약에 NUserDao에서 db 커넥션을 가져오는 메서드 이름을 openConnection으로 사용한다면, UserDao의 수 많은 메서드들이 변경되어야 한다.
  • Loading branch information
kimdahyeee committed Mar 6, 2020
1 parent 2589ebb commit 7f5ae21
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 20 deletions.
9 changes: 1 addition & 8 deletions src/main/java/com/toby/tobyspring/user/dao/DUserDao.java
Expand Up @@ -4,12 +4,5 @@
import java.sql.DriverManager;
import java.sql.SQLException;

public class DUserDao extends UserDao {
@Override
public Connection getConnection() throws ClassNotFoundException, SQLException {
// D사 db connection
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "dahye", "dahye");
return connection;
}
public class DUserDao {
}
9 changes: 1 addition & 8 deletions src/main/java/com/toby/tobyspring/user/dao/NUserDao.java
Expand Up @@ -4,12 +4,5 @@
import java.sql.DriverManager;
import java.sql.SQLException;

public class NUserDao extends UserDao {
@Override
public Connection getConnection() throws ClassNotFoundException, SQLException {
// N사의 DB 연결
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "dahye", "dahye");
return connection;
}
public class NUserDao {
}
@@ -0,0 +1,13 @@
package com.toby.tobyspring.user.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class SimpleConnectionMaker {
public Connection makeNewConnection() throws ClassNotFoundException, SQLException {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "dahye", "dahye");
return connection;
}
}
11 changes: 7 additions & 4 deletions src/main/java/com/toby/tobyspring/user/dao/UserDao.java
Expand Up @@ -5,8 +5,13 @@
import java.sql.*;

public abstract class UserDao {
private SimpleConnectionMaker simpleConnectionMaker;

public UserDao() {
this.simpleConnectionMaker = new SimpleConnectionMaker();
}
public void add(User user) throws ClassNotFoundException, SQLException {
Connection connection = getConnection();
Connection connection = simpleConnectionMaker.makeNewConnection();
// sql 실행
PreparedStatement preparedStatement = connection.prepareStatement("insert into users(id, name, password) values(?, ?, ?)");
preparedStatement.setString(1, user.getId());
Expand All @@ -21,7 +26,7 @@ public void add(User user) throws ClassNotFoundException, SQLException {
}

public User get(String id) throws ClassNotFoundException, SQLException {
Connection connection = getConnection();
Connection connection = simpleConnectionMaker.makeNewConnection();

// sql 실행
PreparedStatement preparedStatement = connection.prepareStatement("select * from users where id = ?");
Expand All @@ -41,6 +46,4 @@ public User get(String id) throws ClassNotFoundException, SQLException {

return user;
}

public abstract Connection getConnection() throws ClassNotFoundException, SQLException;
}

0 comments on commit 7f5ae21

Please sign in to comment.