본문 바로가기

Programming/토비의 스프링 예제9

예제5. 인터페이스의 도입 인터페이스로 추상화해놓은 최소한의 통로를 통해 접근하는 쪽에서는 오브젝트를 만들 때 사용할 클래스가 무엇인지 몰라도 된다. 인터페이스를 통해 접근하게 하면 실제 구현 클래스를 바꿔도 신경쓸 일이 없다. DConnection 클래스 생성자를 호출해서 오브젝트를 생성하는 코드가 여전히 UserDao에 남아있다.UserDao와 UserDao가 사용할 ConnectionMaker의 특정 구현 클래스 사이의 관계를 설정해주는 것에 대한 관심사를 담은 코드를 UserDao에서 분리하지 않으면 UserDao는 결코 독립적으로 확장 가능한 클래스가 될 수 없음. ConnectinMaker.java 1234567891011package springbook.user.dao; import java.sql.Connection.. 2014. 8. 20.
예제4. 클래스의 분리 상속관계도 아닌 완전히 독립적인 클래스로 만든다.SimpleConnectionMaker 라는 새로운 클래스를 만들고 DB생성 기능을 그 안에 넣음. 한번만 SImpleConnectionMaker 오브젝트를만들어서 저장해두고 이를 계속 사용.문제점1. 메소드 이름이 바꼈을 경우문제점2. DB커넥션을 제공하는 클래스가 어떤 것인지를 UserDao가 구체적으로 알고 있어야한다. UserDao가 SImpleConnectinMaker라는 특정 클래스와 그 코드에 종속적이기 때문에 DB커넥션을 가져오는 방법을 자유롭게 확장하기가 힘들어짐. SImpleConnectionMaker.java 12345678910111213141516package springbook.user.dao; import java.sql.Conn.. 2014. 8. 20.
예제3. 상속을 통한 확장 템플릿 메소드 패턴 : 슈퍼클래스에 기본적인 로직의 흐름(커넥션, SQL생성, 실행, 반환) 을 만들고, 그 기능의 일부를 추상 메소드나 오버라이딩이 가능한 protected 메소드 등으로 만든 뒤 서브클래스에서 이런 메소드를 필요에 맞게 구현해서 사용하도록 하는 방법 팩토리 메소드 패턴 : 서브클래서에 구체적인 오브젝트 생성 방법을 결정하게 하는 것 NUserDao, DUserDao 에서는 어떤식으로 Connection 기능을 제공하는지, 어떤 방법으로 Connection 오브젝트를 만들어내는지에 대한 관심을 가지고 있음. 상속을 통한 확장방법이 제공UserDAO.java12345678910111213141516171819202122232425262728293031323334353637383940414.. 2014. 8. 20.
예제2 중복 코드의 메소드 추출 커넥션을 가져오는 중복된 코드 분리 DB연결 관련된 부분을 분리해놓음으로써, DB연결과 관련된 부분에 변경이 일어났을 경우( 로그인 정보, url, db종류 등)getConnection() 이라는 한 메소드의 코드만 수정하면된다.관심의 종류에 따라 코드를 구분해놓았기 때문에 한 가지 관심에 대한 변경이 일어날 경우 그 관심이 집중되는 부분의 코드만 수정하면 된다.관심이 다른 코드가 있는 메소드에는 영향을 주지도 않을 뿐더러, 관심 내용이 독립적으로 존재하므로 수정이 간단해짐. 메소드 추출 : 공통의 기능을 담당하는 메소드로 중복된 코드를 뽑아내는 것 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748.. 2014. 8. 18.