기본 콘텐츠로 건너뛰기

Refactoring


Refactoring
-마틴 파울러-



1일차

추후 수정할 부분?
1.      Refactoring 할 코드 부분에 대한 신뢰도 높은 각종 테스트 작성.
- 이 테스트 들은 반드시 자체 검사 되게 작성
2.      임시변수 최대한 없애기
3.      상속구조 만들기

Refactoring 개론
- 겉으로 드러나는 기능은 그대로 둔 채, 알아보기 쉽고 수정하기 간편하게 소프트웨어 내부를 수정하는 작업
- Refactoring 기법을 연달아 적용해서 겉으로 드러나는 기능은 그대로 둔 채 소프트웨어 구조를 변경한다

해야하는 이유?
- 소프트웨어 설계 개선
- 좀 더 쉽게 소프트웨어 이해하기 위해
- 버그를 좀 더 쉽게 찾기 위해
- 생산성 향상

Refactoring이 필요할 때?
- 같은 작업의 삼진 아웃(3번 반복)
- 기능 추가
- 버그 수정
- 코드 검수

Refactoring 관련 문제
- 데이터베이스
- 인터페이스 변경
- 설계를 수정하는 일
- 처음 코딩 작성시
- 납기 임박 시점

코드의 구린내

- 중복 코드 ( Duplicated Code )
- 장환한 메서드 ( Long Method )
- 방대한 클래스 ( Large Class )
- 과다한 매개변수 ( Long Paremeter List )
- 수정의 산발 ( Divergent Change )
- 기능의 산재 ( Shotgun Surgery )
- 잘못된 소속 ( Feature Envy )
- 데이터 뭉치 ( Data Clumps )
- 강박적 기본 타입 사용 ( Primitive Obsession )
- switch
- 평행 상속 계층 ( Parallel Inheritance Hierarchies )
- 직무 유기 클래스 ( Laze Class )
- 막연한 범용 코드 ( Speculative Generality )
- 임시 필드 ( Temporary Feild )
- 메시지 체인 ( Message Chains )
- 과잉 중개 메서드 ( Middle Man )
- 지나친 관여 ( Inappropriate Intimacy )
- 인터페이스가 다른 대용 클래스 ( Alternative Classes with Different Interfaces )
- 미흡한 라이브러리 클래스 ( Incomplete Library Class )
- 데이터 클래스 ( Data Class )
- 방치된 상속물 (Refused Bequest )
- 불필요한 주석 ( Comments )

테스트 작성

- Refactoring 실시 하기 위한 필요 전제 조건
- 자가 테스트 코드의 가치
- JUnit 테스트 프레임워크
- 테스트 추가



댓글

이 블로그의 인기 게시물

Message Queue 란 무엇인가

Message Queue 란 무엇인가?? 메시지 지향 미들웨어(Meesage Oriented Middleware: MOM)은 비동기 메시지를 사용하는 다른 응용 프로그램 사이에서 데이터 송수신을 의미 MOM을 구현한 시스템을 메시지 큐(MessageQueue: MQ)라 함 Producer(sender) 가 메시지를 큐에 전송하면 Consumer(receiver) 가 처리하는 방식으로, producer 와 consumer 에 message 프로세스가 추가되는 것이 특징 메시지 큐의 장점 비동기(Asynchronous): Queue에 넣기 때문에 나중에 처리할 수 있습니다. 비동조(Decoupling): 애츨리케이션과 분리할 수 있습니다. 탄력성(Resilience): 일부가 실패 시 전체에 영향을 받지 않습니다. 과잉(Redundancy): 실패할 경우 재실행 가능합니다. 보증(Guarantees): 작업이 처리된걸 확인할 수 있습니다. 확장성(Scalable): 다수의 프로세스들이 큐에 메시지를 보낼 수 있습니다. 메시지 큐 종류 Apache ActiveMQ, Apache Kafka, Apache Qpid, Apache RocketMQ, Beanstalkd, Enduro/X, HTTPSQS, JBoss Messaging, JORAM, RabbitMQ, Sun Open Message Queue, and Tarantool 등 Apache ActiveMQ Java Message Service (JMS)를 사용하는 오픈소스 MQ Java, C, C ++, C #, Ruby, Perl, Python, PHP 등 다양한 크로스 언어 클라이언트 및 프로토콜 지원 Spring 지원으로 Spring xml config 메커니즘 이용 가능 JDBC 지원으로 DB 높은 퍼포먼스 가능 높은 퍼포먼스를 위해 클러스터링 구성 가능 Restful API 제공 단 모니터링 도구제공하지 않음 ...