-
리팩토링 / 마틴 파울러 - (4) Chapter 03. 코드의 구린내개발/자습중 2018. 2. 13. 10:13
세번째 챕터에서는 어떤 코드가 리팩토링을 해야 하는 '구린내 나는' 코드인지 설명한다.
저자의 말대로 세번째 챕터를 읽자마자 그래! 바로 요 줄부터 저 줄까지 리팩토링을 하면 되겠군!! 할 수 있는 건 아니고
대충 이런 느낌이 올 때 리팩토링을 쓸 수도 있겠다 정도의 감은 잡을 수 있다.
아직 경험이 부족해서 그런지 깔끔하게 요약해서 정리하기 어려웠다.
이번 챕터만큼은 한번 읽고 넘어가는 수준에서 정리한다.
저자가 말하는 구린내 목록은 아래와 같다.
1. 중복코드
- 똑같은 코드 구조가 두 군데 이상 있을 때는 그 부분을 하나로 통일 시 프로그램 개선 가능
2. 장황한 메소드
- 메소드에서 하나로 묶으면 좋을 만한 부분들을 찾아내어 메소드로 만들어줌
3. 방대한 클래스
- 기능이 지나치게 많은 클래스
4. 과다한 매개변수
- 객체를 사용할 때는 메소드에 필요한 모든 데이터를 가져올 수 있는 메소드만 전달하면 됨
5. 수정의 산발
- 하나의 수정건 발생 시 한 클래스 내에서 여러 군데를 수정해야하는 문제
6. 기능의 산재
- 하나의 수정건 발생 시 여러 클래스를 수정해야 하는 문제
7. 잘못된 소속
- 어떤 메소드가 자신이 속하지 않은 클래스에 더 많이 접근하는 문제
8. 데이터 뭉치
- 동일한 3~4개의 데이터 항목이 여러 위치에 몰려 있는 경우
- 둘 이상의 필드를 객체로 전환하면 코드가 개선됨
9. 강박적 기본 타입 사용
- 객체의 주요 장점 중 하나가 언어에 내장된 기본 타입 클래스와 응용 클래스 간의 경계를 허문다는 점
- 데이터 값을 객체로 전환하는 것을 지향
10. switch문
- switch-case 문은 중복이 생기기 쉬운 단점 존재
- 다형성, 즉 재정의를 이용하여 switch문을 바꿔야함
11. 평행 상속 계층
- 기능의 산재의 특수한 상황. 한 클래스의 하위 클래스를 만들 때마다 다른 클래스의 하위 클래스도 만들어야 하는 문제
- 한 상속 계층의 인스턴스가 다른 상속 계층의 인스턴스를 참조하게 만들면 됨
12. 직무유기 클래스
- 비용만큼의 기능을 수행하지 못하는 비효율적인 클래스는 제거해야 함
13. 막연한 범용 코드
- 아직은 필요없는 기능을 수행하기 위해 작성된 코드
14. 임시 필드
- 어떤 객체 안에 인스턴스 변수가 특정 상황에서만 할당되는 경우
15. 메시지 체인
- 메시지 체인이란 클라이언트가 한 객체에 제 2의 객체를 요청하면 제 2의 객체가 제 3의 객체를 요청하고,
제 3의 객체가 제 4의 객체를 요청하는 식으로 연쇄적 요청이 발생하는 문제점을 의미함
16. 과잉 중개 메소드
- 캡슐화 시에는 대개 기능의 위임이 수반되는데, 이것도 지나치면 문제가 됨
17. 지나친 관여
- 상속으로 인해 지나친 관여가 발생하는 경우가 많음
- 클래스의 양방향 연결을 단방향으로 전환
18. 인터페이스가 다른 대용 클래스
- 기능은 같은데 시그너처가 다른 메소드
19. 미흡한 라이브러리 클래스
- 라이브러리 클래스가 원하는 기능을 수행하도록 수정하는 것이 불가능한 문제
20. 데이터 클래스
- 데이터 클래스란 필드와 필드 읽기, 쓰기 메소드만 들어 있는 클래스. 데이터 보관만 담당하게 됨
- 변경되지 않아야 하는 필드에 대해서는 쓰기 메소드를 제거하는 등 캡슐화가 제대로 되어있는지 확인
21. 방치된 상속물
- 하위 클래스가 부모 클래스의 메소드나 데이터를 상속 받았으나 쓰지 않을 경우
22. 불필요한 주석
- 주석이 구린내를 감춰주는 탈취제 용도로 쓰일 때
- 주석은 무슨 작업을 해야 좋을지 모를 때, 코드를 넣은 이유를 메모할 때, 정보나 잊기 쉬운 사항을 메모할 때 넣는 것이 좋음
정리하다보니 저자 말대로라면 내가 작성했던 소스들은 그냥 똥의 산인 것 같다.
이 장에서 인상 깊었던 부분들을 따로 빼면서 정리를 마무리한다.
"주석을 넣어야겠다는 생각이 들 땐 먼저 코드를 리팩토링해서 주석을 없앨 수 있게 만들어보자."
"객체의 핵심은 데이터와 그 데이터에 사용되는 프로세스를 한 데 묶는 기술이라는 점이다."
'개발 > 자습중' 카테고리의 다른 글
읽기 좋은 코드가 좋은 코드다 / 더스틴 보즈웰, 트레버 파우커 (0) 2019.01.07 리팩토링 / 마틴 파울러 - (3) Chapter 02. 리팩토링 개론 (0) 2018.02.12 리팩토링 / 마틴 파울러 - (2) Chapter 01. 맛보기 (0) 2018.02.09 리팩토링 / 마틴 파울러 - (1) 발단 (0) 2018.02.09 댓글