토비의 스프링 3.1 책을 읽으며 일부분을 정리한 내용입니다. 
개념 이해를 위한 내용들 중 일부분을 정리했으므로 이해를 돕기위한 예시 코드들 및 자세한 전체적인 내용은 책을 통해 확인하시길 바랍니다.
포스팅 내용이 저작권의 문제가 발생할 경우 게시물은 바로 삭제/비공개 처리됩니다.

객체 지향의 세계에선 모든 것이 변한다.

 

오브젝트에 대한 설계와 이를 구현한 코드도 영원한 것이 아니라 변화가 필요한데

객체를 설계할 때 가장 주의를 기울여야 하는 부분이 바로 이 변화에 어떻게 대비할지이다.

가장 좋은 방안은 변화를 코드에 적용할 때 변화의 폭을 최소화하는 것이다.

->분리와 확장을 통해

 

분리의 두 가지 법칙

1. 관심사의 분리

관심이 같은 것들을 하나의 객체 안으로

관심이 다른 것은 서로에게 영향을 주지않도록 분리

2. 중복 코드의 메소드 추출

DAO의 관심사항

1. DB 커넥션을 어떻게 가져올 것인가

어떤 DB를 쓰고 어떤 드라이버를 사용할지 등등

2. SQL문을 담을 Statement를 만들고 실행

파라미터로 넘어온 정보를 statement에 바인딩시키고 거기에 담긴 SQL을 DB를 활용해 실행

3. 리소스의 반환

statement, connection 오브젝트 반환

 

변경사항 검증하는 두 가지 방안

1. 리팩토링

리팩토링: 기능은 유지하면서 구조를 바꿔나가며 목적에 맞게 코드를 개선해나가는 과정

->관심사의 분리와 확장이 키워드

->변화에 효율적으로 대응할 수 있고 생산성이 올라간다.

2. 테스트

 

상속을 통한 확장

추상 메소드를 활용해 상속을 통해 서브클래스로 분리

public abstract class UserDao { 
    public void add(User user) { // throws 코드 생략
        // ...
    }

    public User get(String id) {
        // ..
    }
    
    public abstract Connection getConnection(){ // 이 메소드를 상속해야 함
        // ..
        //추상 클래스
    }
}

public class NUserDao extends UserDao {
    public Connection getConnection(){
        //메소드의 구현은 서브클래스가 담당
    }
}

상속의 단점

1. 다중 상속 허용 X

2. 상속을 통한 상하위 클래스의 관계가 생각보다 밀접

서브클래스는 슈퍼클래스의 기능을 직접 사용 가능함

슈퍼클래스 내부의 변화가 생길경우 서브클래스도 수정해야할수도

3. 다른 DAO 클래스에 사용 불가능

디자인 패턴

개발 시 자주 직면하는 문제들을 해결하기 위해 사용하는 재사용 가능한 솔루션

주로 객제지향 설계에 관한 것

패턴을 적용할 상황, 해결해야 할 문제, 솔루션의 구조와 각 요소의 역할과 함께 핵심 의도가 무엇인지 공부

 

템플릿 메소드 패턴

변하지 않는 기능은 슈퍼클래스에, 확장이 필요한 기능은 서브클래스에

훅메소드: 서브클래스에서 선택적으로 오버라이드 할 수 있도록 슈퍼클래스에 정의해둔 메소드

추상메소드를 구현하거나(위의 예시), 훅 메소드를 오버라이드하는 방법 이용 

 

팩토리 메소드 패턴

상속을 통해 기능을 확장하게 하는 패턴

슈퍼클래스 코드에서 서브클래스에서 구현한 메소드를 호출해서 필요한 타입의 오브젝트로 가져와 사용

주로 인터페이스 타입으로 오브젝트를 리턴

 

+읽고 느낀 점

더보기
모든 코드는 변한다라는 말이 엄청 와닿았다. 

앞으로 개발을 함에 있어 코드는 항상 변화할 수 있다는 점을 염두해두고 관심사를 분리하여 변화에 효율적으로 대응할 수 있는 코드를 만드는 습관을 만들어야겠다는 생각을 했다.

 

개발을 할 때 리팩토링과 테스트가 중요하다는 말을 종종 들어왔었는데 왜 중요한지에 대해 생각해볼 수 있는 기회였던 것 같다. 여태까지 프로젝트를 할 땐 리팩토링과 테스트보단 당장의 기능 구현에 초점을 맞춰서 개발을 해왔던 것 같은데 지금 진행하고 있는 프로젝트부턴 리팩토링과 테스트에 힘을 실어 개발을 해야할 것 같다.

 

책에서 디자인패턴과 관련된 내용이 간략하게 나왔는데 처음 접하는 용어라 이에 대해 좀 더 공부해보면 좋을 것 같다.

 

+ Recent posts