Skip to content

Commit

Permalink
1장: DAO의 분리 - 관심사의 분리 - 상속을 통한 분리
Browse files Browse the repository at this point in the history
- DB 커넥션에 대한 확장성을 고려하여 상속을 통해 분리해보자

두가지 디자인 패턴이 포함된다.
1. 템플릿 메소드 패턴 - 추상 메소드를 만들어 서브클래스에서 필요에 맞게 구현해서 사용할 수 있도록 구현하는 방법 :: UserDao 에서 getConnection 메서드
2. 팩토리 메소드 패턴 - 객체를 만들어내는 부분을 서브클래스에 위임 시킴 - NUserDao 와 DUserDao 에서 return 되는 각각의 Connection

또한, 단점이 포함된다.
1. 다중상속의 문제
2. 슈퍼클래스 내부의 변경이 있을 때, 모든 서브클래스에서 변경 사항이 생길 수 있다.
3. 해당 DB 커넥션을 생성하는 코드를 다른 dao 클래스에 적용할 수 없다.
  • Loading branch information
kimdahyeee committed Mar 6, 2020
1 parent b30ba4a commit 2589ebb
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 7 deletions.
15 changes: 15 additions & 0 deletions src/main/java/com/toby/tobyspring/user/dao/DUserDao.java
@@ -0,0 +1,15 @@
package com.toby.tobyspring.user.dao;

import java.sql.Connection;
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;
}
}
15 changes: 15 additions & 0 deletions src/main/java/com/toby/tobyspring/user/dao/NUserDao.java
@@ -0,0 +1,15 @@
package com.toby.tobyspring.user.dao;

import java.sql.Connection;
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;
}
}
9 changes: 2 additions & 7 deletions src/main/java/com/toby/tobyspring/user/dao/UserDao.java
Expand Up @@ -4,7 +4,7 @@

import java.sql.*;

public class UserDao {
public abstract class UserDao {
public void add(User user) throws ClassNotFoundException, SQLException {
Connection connection = getConnection();
// sql 실행
Expand Down Expand Up @@ -42,10 +42,5 @@ public User get(String id) throws ClassNotFoundException, SQLException {
return user;
}

private Connection getConnection() throws ClassNotFoundException, SQLException {
// DB 연결
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "dahye", "dahye");
return connection;
}
public abstract Connection getConnection() throws ClassNotFoundException, SQLException;
}

0 comments on commit 2589ebb

Please sign in to comment.