목록리팩토링 (15)
개발놀이터
로버트 C.마틴의 클린 코드를 읽었습니다. 책을 읽고 리팩토링의 중요성을 알게 되었고 제 코드에 녹여 내볼 생각입니다. 책을 읽으니 무지성으로 작성한 제 코드들이 눈앞에 휙휙 지나가더군요. 얼른 책을 다 읽고 리팩토링 해보고 싶습니다. 이 카테고리에선 리팩토링을 어떻게 진행해야 하는지 코드레벨에서 설명합니다. 출처는 클린 코드 저서구요. 리팩토링을 통해 얻을 수 있는 것들과 다양한 경험들을 소개해드리고자 합니다. 마지막으로 책의 첫부분을 인용하면서 리팩토링 카테고리 시작하도록 하겠습니다. "중복을 피하라, 한 기능만 수행하라, 제대로 표현하라, 작게 추상화 하라" -로버트 C.마틴
프록시 패턴은 무엇인가? 프록시 패턴은 인터페이스를 사용하고 실행시킬 클래스에 대해 객체가 들어갈 자링네 대리자 객체를 대신 투입하여, 클라이언트는 실제 실행시킬 클래스에 대한 메소드를 반환하는지 대리 객체의 메소드를 반환하는지를 모르게 하는 것을 말한다. 프록시 패턴은 왜 사용할까? 프록시 패턴은 전처리 및 후처리 사용에 용이하고, 특정 메서드에 대한 보안이 좋다. 하지만 프록시 패턴을 사용시 가독성이 떨어질 수 있다는 단점도 존재한다. (런타임 의존도가 복잡하기 때문) 프록시 패턴은 지연 로딩을 사용하거나, 필요할 때 객체를 추가시키고 싶을 때 사용하면 좋다. 또한 보안 문제로 인하여 특정 메서드의 접근을 제어하고 싶지 않을 때도 사용할 수 있다. 프록시 패턴의 구조 프록시 패턴 예제 1. Subje..
데코레이터 패턴은 무엇인가? 데코레이터 패턴은 주어진 상황및 용도에 따라 객체의 책임을 동적으로 추가할 수 있는 패턴을 말한다. 데코레이터 패턴은 프록시를 이용해 부가기능을 추가해주는 역할을 하는 패턴이다. 트랜잭션시작을 쉽게 해주는 @Transactional과 같은 AOP들이 데코레이터 패턴을 이용해 만든 것들이다. 데코페이터 패턴을 사용하면 기존 코드를 수정하지 않고도 행동을 확장시킬 수 있으며, 구성 및 위임을 통해 실행중인 행동을 추가할 수도 있다. 클래스의 요소들을 계속해서 수정하면서 사용하는 구조인 경우나, 일부 요소들을 조합해서 사용하는 클래스 구조인 경우에 사용하면 좋다. 데코레이터 패턴의 구조 데코레이터 패턴 예제 Component라는 인터페이스에서 런타임 의존관계를 계속해서 추가하는 방..
전략패턴이란 무엇인가? 전략패턴이란 객체가 할 수 있는 각각의 행위에 대해 전략클래스를 생성하고 유사한 행위들을 캡슐화하는 인터페이스를 정의하여 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 변경하지 않고 전략을 바꿔주기만 함으로써 행위를 유연하게 확장시킬 수 있는 패턴을 말한다. 전략패턴은 변하지 않는 부분은 Context라는 곳에 두고, 변하는 부분은 Strategy라는 인터페이스를 만들고 해당 인터페이스를 구현하도록 해서 문제를 해결한다. 상속이 아니라 위임으로 문제를 해결하는 것이다. 전략패턴을 사용하면 전략을 추가하더라도 기존 코드를 변경하지 않아도 되고 상속대신 위임을 사용하게 된다. 위임을 사용한다는 것은 상속을 강요하지않는다는 것이고 이는 상속이 정말 필요한 곳에 사용할 수 있다는 ..
템플릿 메서드 패턴은 무엇인가? 템플릿 메서드 패턴은 특정 작업을 처리하는 일부분을 서브클래스로 캡슐화하여 전체적인 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내용을 바꾸는 패턴을 말한다. 템플릿 메서드 패턴을 사용하면 중복 코드를 줄일 수 있고, 자식 클래스의 역할을 줄여 핵심 로직의 관리가 용이하게 할 수 있으며, 코드를 객체지향적으로 구성할 수 있다는 장점이 있다. 하지만 추상메서드가 많아지면서 클래스의 관리가 힘들어질 수 있고, 클래스들의 관계와 코드가 꼬일 염려가 있다는 단점이 있다. 템플릿 메서드 패턴은 클라이언트가 알고리즘의 특정 단계만 제어하고 전체 알고리즘이나 구조를 변경할 수 없도록 하고싶을 때나, 특정 단계에서 구현만 다르고 다른 대부분은 동일한 동작을 하는 경우에 사용하면 좋다...