2011/11/17 - [웹개발/SPRING3.0] - [SPRING3.0] 2.오브젝트와 의존관계
문제점1. 중복코드
해당 소스를 보면 connection을 얻어오는 부분에서 중복해서 호출을 하게된다. 만약 DB연결에 변경이 생긴다면 해당부분을 다 수정해주어야 하는 불상사가 생길 것이다. 해당 소스를 아래와 같이 리펙토링 할수 있다.
* 리펙토링 : 기존의 코드를 외부의 동작방식에는 변화 없이 내부 구조를 변경해서 재구성하는 작업 또는 기술.
위에 소스와 같이 중복된코드를 뽑아 메소드로 만드는것을 메소드추출기법(extract method)이라고 한다.
------------------------------
다음 DB에 연결되는 부분이 좀더 다양해진다면 어떻게 될까? 매번 getConnection을 수정할수는 없는 노릇.
좀더 유연한 프로그램을 작성해보자.
- 상속을 통한 UserDao 확장방법
getConnection() 부분을 추상Method로 작성하고 NuserDao와 DuserDao클래스를 생성 UserDao를 상속받아 getConnection() 구현
* 템플릿메소드패턴(Template method pattern)
- 슈퍼클래스에 기본적인 로직의 흐름을 만들고 그 기능의 일부를 추상 메소드나 오버라이딩이 가능한 proteted 메소드 등으로 만든 뒤 서브클래스에서 이런 메소드를 필요에 맞게 구현해서 사용하도록 하는 방법. (스프링에서 애용되는 디자인 패턴)
* 팩토리메소드패턴(factory method pattern)
-
-- 계속..
문제점1. 중복코드
해당 소스를 보면 connection을 얻어오는 부분에서 중복해서 호출을 하게된다. 만약 DB연결에 변경이 생긴다면 해당부분을 다 수정해주어야 하는 불상사가 생길 것이다. 해당 소스를 아래와 같이 리펙토링 할수 있다.
package chapter1.obj; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class UserDao1 { public void add(User user) throws ClassNotFoundException, SQLException { Connection c = getConnection(); .. } public User get(String id) throws ClassNotFoundException, SQLException { Connection c = getConnection(); .. } private Connection getConnection() throws ClassNotFoundException, SQLException { Class.forName("core.log.jdbc.driver.OracleDriver"); Connection c = DriverManager.getConnection( "jdbc:oracle:thin:@192.168.56.101:1521:orcl", "hm", "hm"); return c; } public static void main(String[] args) throws ClassNotFoundException, SQLException { .. 생략 .. } }
* 리펙토링 : 기존의 코드를 외부의 동작방식에는 변화 없이 내부 구조를 변경해서 재구성하는 작업 또는 기술.
위에 소스와 같이 중복된코드를 뽑아 메소드로 만드는것을 메소드추출기법(extract method)이라고 한다.
------------------------------
다음 DB에 연결되는 부분이 좀더 다양해진다면 어떻게 될까? 매번 getConnection을 수정할수는 없는 노릇.
좀더 유연한 프로그램을 작성해보자.
getConnection() 부분을 추상Method로 작성하고 NuserDao와 DuserDao클래스를 생성 UserDao를 상속받아 getConnection() 구현
package chapter1.obj; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public abstract class UserDao123 { public void add(User user) throws ClassNotFoundException, SQLException { Connection c = getConnection(); .. } public User get(String id) throws ClassNotFoundException, SQLException { Connection c = getConnection(); .. } public abstract Connection getConnection() throws ClassNotFoundException,SQLException; } class NUserDao extends UserDao123 { public Connection getConnection() throws ClassNotFoundException,SQLException{ //처리 } } class DUserDao extends UserDao123 { public Connection getConnection() throws ClassNotFoundException,SQLException{ //처리 }}
* 템플릿메소드패턴(Template method pattern)
- 슈퍼클래스에 기본적인 로직의 흐름을 만들고 그 기능의 일부를 추상 메소드나 오버라이딩이 가능한 proteted 메소드 등으로 만든 뒤 서브클래스에서 이런 메소드를 필요에 맞게 구현해서 사용하도록 하는 방법. (스프링에서 애용되는 디자인 패턴)
* 팩토리메소드패턴(factory method pattern)
-
-- 계속..
'개발' 카테고리의 다른 글
[Spring] 스프링에서 사용되는 웹 프레임워크의 종류 (0) | 2011.12.24 |
---|---|
[spring/TIP] STS를 이용하여 순식간에 기본환경 구축하기 (4) | 2011.12.20 |
[SPRING3.0] 2.오브젝트와 의존관계 (0) | 2011.11.17 |
[Eclipse/PLUG-IN] SVN 설치 (0) | 2011.11.17 |
[SPRING3.0/Framework] 1. 시작 (0) | 2011.11.16 |