From 2589ebb3446cea001f32716cc82d87f604b542f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8B=A4=ED=98=9C?= Date: Fri, 6 Mar 2020 23:48:09 +0900 Subject: [PATCH] =?UTF-8?q?1=EC=9E=A5:=20DAO=EC=9D=98=20=EB=B6=84=EB=A6=AC?= =?UTF-8?q?=20-=20=EA=B4=80=EC=8B=AC=EC=82=AC=EC=9D=98=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC=20-=20=EC=83=81=EC=86=8D=EC=9D=84=20=ED=86=B5?= =?UTF-8?q?=ED=95=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - DB 커넥션에 대한 확장성을 고려하여 상속을 통해 분리해보자 두가지 디자인 패턴이 포함된다. 1. 템플릿 메소드 패턴 - 추상 메소드를 만들어 서브클래스에서 필요에 맞게 구현해서 사용할 수 있도록 구현하는 방법 :: UserDao 에서 getConnection 메서드 2. 팩토리 메소드 패턴 - 객체를 만들어내는 부분을 서브클래스에 위임 시킴 - NUserDao 와 DUserDao 에서 return 되는 각각의 Connection 또한, 단점이 포함된다. 1. 다중상속의 문제 2. 슈퍼클래스 내부의 변경이 있을 때, 모든 서브클래스에서 변경 사항이 생길 수 있다. 3. 해당 DB 커넥션을 생성하는 코드를 다른 dao 클래스에 적용할 수 없다. --- .../com/toby/tobyspring/user/dao/DUserDao.java | 15 +++++++++++++++ .../com/toby/tobyspring/user/dao/NUserDao.java | 15 +++++++++++++++ .../com/toby/tobyspring/user/dao/UserDao.java | 9 ++------- 3 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/toby/tobyspring/user/dao/DUserDao.java create mode 100644 src/main/java/com/toby/tobyspring/user/dao/NUserDao.java diff --git a/src/main/java/com/toby/tobyspring/user/dao/DUserDao.java b/src/main/java/com/toby/tobyspring/user/dao/DUserDao.java new file mode 100644 index 0000000..a28899e --- /dev/null +++ b/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; + } +} diff --git a/src/main/java/com/toby/tobyspring/user/dao/NUserDao.java b/src/main/java/com/toby/tobyspring/user/dao/NUserDao.java new file mode 100644 index 0000000..4dacde7 --- /dev/null +++ b/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; + } +} diff --git a/src/main/java/com/toby/tobyspring/user/dao/UserDao.java b/src/main/java/com/toby/tobyspring/user/dao/UserDao.java index c3fa27c..0f6507c 100644 --- a/src/main/java/com/toby/tobyspring/user/dao/UserDao.java +++ b/src/main/java/com/toby/tobyspring/user/dao/UserDao.java @@ -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 실행 @@ -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; }