토비의스프링3
-
초난감 DAO 코드를 개선해온 결과를 객체지향 기술의 여러 가지 이론을 통해 설명한다. 개방 폐쇄 원칙 (OCP. Open-Closed Principle) - 깔끔한 설계를 위해 적용 가능한 객체지향 설계 원칙 중의 하나다. ‘클래스나 모률은 확장에는 열려 있어야 하고 변경에는 닫혀있어야 한다’라고 할 수 있다. 객체지향 설계 원칙(SOLID) 객체지향 기술은 어느 날 한 번에 만들어진 것이라기보다는 오랜 시간에 걸쳐 점진적으로 발전해온 기술이라고 볼 수 있다. 그렇기 때문에 객체지향 프로그래밍 언어의 종류도 다양하고 객체지향 기술을 받아들이고 적용하는 관점과 기법도 조금씩 차이가 있다. 그럼에도 객체지향이라는 이름으로 묶을 수 있는 분명한 특징이 있다. 객체지향 설계 원칙은 객체지향의 특징을 잘 살릴 ..
DAO 분리와 확장(4/4) - 네번째, 원칙과 패턴초난감 DAO 코드를 개선해온 결과를 객체지향 기술의 여러 가지 이론을 통해 설명한다. 개방 폐쇄 원칙 (OCP. Open-Closed Principle) - 깔끔한 설계를 위해 적용 가능한 객체지향 설계 원칙 중의 하나다. ‘클래스나 모률은 확장에는 열려 있어야 하고 변경에는 닫혀있어야 한다’라고 할 수 있다. 객체지향 설계 원칙(SOLID) 객체지향 기술은 어느 날 한 번에 만들어진 것이라기보다는 오랜 시간에 걸쳐 점진적으로 발전해온 기술이라고 볼 수 있다. 그렇기 때문에 객체지향 프로그래밍 언어의 종류도 다양하고 객체지향 기술을 받아들이고 적용하는 관점과 기법도 조금씩 차이가 있다. 그럼에도 객체지향이라는 이름으로 묶을 수 있는 분명한 특징이 있다. 객체지향 설계 원칙은 객체지향의 특징을 잘 살릴 ..
2016.02.19 -
1. 클래스의 분리 관심사의 분리보다 더 화끈하게 분리를 해보자. DB커넥션과 관련된 부분을 서브클래스가 아니라 아예 별도의 클래스에 담는다. 이 클래스를 UserDao가 이용하게 한다. 예를 들어 별도의 SimpleConnectionMaker 클래스에 DB커넥션 코드를 작성하고 상속이 아닌 생성자를 통해 각 메소드에서 DB 커넥션을 가져오게 한다. public class SimpleConnectionMaker { public Connection makeNewConnection() throws ClassNotFoundException, SQLException { Class.forName("com.mysql.jdbc.Driver"); Connection c = DriverManager.getConnecti..
DAO 분리와 확장(3/4) - 세번째, DAO의 확장1. 클래스의 분리 관심사의 분리보다 더 화끈하게 분리를 해보자. DB커넥션과 관련된 부분을 서브클래스가 아니라 아예 별도의 클래스에 담는다. 이 클래스를 UserDao가 이용하게 한다. 예를 들어 별도의 SimpleConnectionMaker 클래스에 DB커넥션 코드를 작성하고 상속이 아닌 생성자를 통해 각 메소드에서 DB 커넥션을 가져오게 한다. public class SimpleConnectionMaker { public Connection makeNewConnection() throws ClassNotFoundException, SQLException { Class.forName("com.mysql.jdbc.Driver"); Connection c = DriverManager.getConnecti..
2016.02.19 -
DAO의 분리 1. 관심사의 분리 - 관심이 같은 것끼리 하나의 객체 안으로 또는 모이게 하고, 관심이 다른 것은 가능한 따로 떨어져서 서로 영향을 주지 않도록 분리한다. 2. 커넥션 만들기의 추출 - 전편의 DAO 예제를 살펴 보면 메소드 안에 커넥션 정보가 담겨 있기 때문에 수백, 수천 개의 DAO 메소드를 만들게 된다면 코드가 여기저기 중복 될 뿐만 아니라 향후 다른 커넥션 정보를 사용 할 경우 이 모든 DAO 메소드를 수정해야 한다. 즉, 커넥션 가져오는 중복 코드를 분리해야 한다. 중복된 DB 연결 코드를 getConnection() 이라는 메소드로 분리 한다면 커넥션 정보가 변경된다 하더라도 한 메소드의 코드만 수정하면 된다. 리펙토링 리펙토링은 기존의 코드를 외부의 동작방식에는 변화 없이 내..
DAO 분리와 확장(2/4) - 두번째, DAO의 분리DAO의 분리 1. 관심사의 분리 - 관심이 같은 것끼리 하나의 객체 안으로 또는 모이게 하고, 관심이 다른 것은 가능한 따로 떨어져서 서로 영향을 주지 않도록 분리한다. 2. 커넥션 만들기의 추출 - 전편의 DAO 예제를 살펴 보면 메소드 안에 커넥션 정보가 담겨 있기 때문에 수백, 수천 개의 DAO 메소드를 만들게 된다면 코드가 여기저기 중복 될 뿐만 아니라 향후 다른 커넥션 정보를 사용 할 경우 이 모든 DAO 메소드를 수정해야 한다. 즉, 커넥션 가져오는 중복 코드를 분리해야 한다. 중복된 DB 연결 코드를 getConnection() 이라는 메소드로 분리 한다면 커넥션 정보가 변경된다 하더라도 한 메소드의 코드만 수정하면 된다. 리펙토링 리펙토링은 기존의 코드를 외부의 동작방식에는 변화 없이 내..
2016.02.12 -
DAO 분리와 확장 (1/3) - 첫번째. 마구잡이 DAO 생성 DAO(Data Access Object)는 DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트를 말한다. 1. User 클래스 생성 - 사용자 정보 저장 시 자바빈 규약을 따르는 오브젝트를 이용하면 편리하다. 사용자 정보를 저장할 User 클래스를 만든다. public class User { String id; String name; String password; public String getld() ( return id; } public void setld(String id) ( this.id = id; } public String getName() { return name; } public void setNam..
DAO 분리와 확장(1/4) - 첫번째. 마구잡이 DAO 생성DAO 분리와 확장 (1/3) - 첫번째. 마구잡이 DAO 생성 DAO(Data Access Object)는 DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트를 말한다. 1. User 클래스 생성 - 사용자 정보 저장 시 자바빈 규약을 따르는 오브젝트를 이용하면 편리하다. 사용자 정보를 저장할 User 클래스를 만든다. public class User { String id; String name; String password; public String getld() ( return id; } public void setld(String id) ( this.id = id; } public String getName() { return name; } public void setNam..
2016.02.01