토비의 스프링 (3)

리팩토링은 기존의 코드를 외부의 동작방식에는

변화없이 내부 구조를 변경해서 재구성하는 작업 또는 기술을 말함.

리팩토링을 하면 코드 내부의 설계가 개선되어

코드를 이해하기 좋아지고 변화에 효율적으로 대응할 수 있다.


코드의 품질이 올라가고 유지보수가 용이해진다.

ex) 중복코드를 없에는 작업


상속을 통한 확장

추상메소드 사용하기

추상클래스로 만든 나의 UserDao 클래스를

옆에 친구에게 준 후 이 친구도 내가 만든

UserDao클래스를 사용할 수 있게 해줘야한다.


그럼 이친구는 나의 UserDao 클래스를 상속해서

자기 마음대로 서브클래스를 만들어 사용하면 된다.

서브클래스에서 내 UserDao클래스 안에 있는

추상메소드로 선언한 getConnection() 메소드를

원하는 방식으로 구현해 사용할 수 있다.


이렇게 함으로써 UserDao의 소스코드를 제공해서

수정해 쓰도록 하지 않아도 getConnection() 메소드를 원하는 방식으로

확장한 후에 UserDao의 기능과 함께 사용할 수 있다.


<UserDao 클래스>



<UserDao 클래스를 상속후 사용>



위처럼 슈퍼클래스에 기본적인 (커넥션 연결, sql생성 실행 반환)을 만들어

이 기능의 일부를 추상메소드나 오버라이딩이 가능한 protected 메소드

등으로 만든 뒤 서브클래스에서 이런 메소드를 필요에 맞게 구현해서

사용할 수 있도록 하는 방법이 디자인 패턴에서 템플릿 메소드 패턴.


템플릿 메소드는 스프링에서 자주 사용됨.



디자인 패턴

- 소프트웨어 설계 시 특정 상황에서 자주 만나는 문제를

해결하기 위해 사용힐 수 있는 재사용 가능한 솔루션을 말함.

디자인 패턴은 주로 객체지행 설계에 관한 것임.


패턴에서 가장 중요한 것은 각 패턴의 핵심이 담긴 목적이나 의도이다.



DAO의 확장

클래스의 분리

완전한 독립적인 클래스 만들기.


상속을 사용하지 않으니 abstract는 필요가 없다.

SimpleConnectionMaker의 오브젝트를 만들고

add 나 get 같은 다른 메소드에서 이를 이용해

DB커넥션을 가져와 사용한다.




DB커넥션 기능을 하는 SimpleConnectionMaker는 아래와 같이

아예 분리를 시켜 독립을 시킨다.




처럼 커넥션 기능을 하는 기능을 분리했더니

상속을 통해 커넥션 기능을 확장해 사용하던게 다시 불가능해졌다.

UserDao가 SimpleConnectionMaker 라는 특정 클래스에

종속 되었기 때문이다.


때문에 다음 포스팅에서 인터페이스를 볼 것이다.



'SPRING' 카테고리의 다른 글

토비의 스프링 (5)  (0) 2019.01.02
토비의 스프링 (4)  (0) 2019.01.02
토비의 스프링 (2)  (0) 2018.12.19
토비의 스프링 (1)  (0) 2018.12.18
토비의 스프링 구매  (0) 2018.10.14

댓글

Designed by JB FACTORY