반응형

  리팩터링 시 주의사항

1. 기능 추가를 목적으로 소스를 수정하는 것과 리팩터링을 위해 소스를 수정할 때 서로의 영역을 침범해서는 안된다.

2. 기능 추가시는 기존의 코드를 건들지 않아야 하고 리팩터링 시에는 기능 추가를 하지 않는다 다짐하고 해야 한다.

3. 리팩터링 시 테스트 케이스또한 새로 만들거나 수정하지 않고 진행해야 한다.(부득이한 경우 제외)

 

  리팩터링시 장점

1. 소프트웨어의 설계가 좋아진다.

2. 소프트웨어를 이해하기 쉬워진다.

3. 버그를 찾을 수 있다.

4. 프로그래밍 속도를 높일 수 있다.

 

 

 

 

 

 

 

  리팩터링 시점

1. 기이한 이름

코드는 단순하고 명료하게 작성해야 한다. 코드를 명료하게 표현하는 데 가장 중요한 요소는 "이름"이다.

출처: IT WORLD

프로그래머가 가장 힘들어하는 일이 이름 짓기일 만큼 변수 이름, 함수 이름 등 기능을 나타내는 이름을 짓는 데는 시간과 두뇌가 소모된다. 

그만큼 이름만 잘 지어도 나중에 문맥을 파악하느라 헤매는 시간을 절약할 수 있기 때문에 이름을 변경하는것은 가장 많이 사용되는 리팩터링이다.

만약 기능을 나타내는 이름을 짓기 어렵다면 설계가 잘못된 것은 아닌지 고민해봐야 한다.

2. 중복 코드 제거하기

3. 긴 함수 제거하기

...

 

해당 글은 마틴 파울러 - 리팩터링 2판을 보고 작성한 글입니다.

 

리팩토링

개발자가 선택한 프로그램 가치를 높이는 최고의 코드 관리 기술마틴 파울러의 『리팩터링』이 새롭게 돌아왔다.지난 20년간 전 세계 프로그래머에게 리팩터링의 교본이었던 이 책의 1판은, 기�

book.naver.com

 

 

반응형
반응형

  리팩터링을 왜 해야 하는가?

기존에 코드가 있다. 이 코드는 하나의 함수로 이루어진 코드이며 수정이 일어나면 해당 함수를 수정해야만 하는 구조다.

이 함수를 수정했을 때 테스트해야 하는 영역이 세 곳이 있다고 할 때 요청사항으로 인해 수정이 빈번하게 일어난다면 기존 함수와 변경된 부분을 수정하고 테스트해야 하는 입장에서는 죽을 맛일 것이다.

만약 요구사항이 1~2개씩 들어오는 상황이라는 이상적인 경우라면 시간이 들더라도 할 수 있겠지만 실제로 요구사항은 1~2개가 아닌 n개가 들어온다. 이 n개의 요구사항을 다 테스트하고 수정한다면 소모되는 시간은 기하급수적으로 늘어날 것이다. 리팩터링이 필요한 이유가 바로 앞에 말한 상황이 있기 때문이다.

잘 작동하고 변경할 일이 없는 코드도 언젠가는 변경할 일이 생길 수 있기 때문에 코드를 읽기 쉽고 이해하기 쉽게 로직을 짜야한다.

 

 

  리팩터링의 첫 단계

리팩터링의 첫 단계는 항상 리팩터링을 할 코드 영역을 꼼꼼하게 검사해줄 테스트 코드를 마련하는 것이다.

리팩 터링 기법들이 버그 발생 여지를 최소화하도록 구성됐다고는 하나 실제 작업은 사람이 수행하기 때문에 버그가 일어날 수 있다. 이는 프로그램이 클 수 록 빈번하게 일어난다.

 

리팩터링 하기 전에 제대로 된 테스트부터 마련한다.

테스트는 반드시 자가 진단하도록 만든다.

 

리팩터링은 프로그램 수정을 작은 단계로 나눠 진행한다. 그래야 중간에 실수하더라도 버그를 쉽게 찾을 수 있다.

코드에서 함수로 추출할만한 부분이 있다면 그 부분을 추출해 하나의 함수로 만들어 복잡도를 낮춰준다.

또한 해당 함수가 어떤 기능을 하는지 명확하게 알아볼 수 있도록 이름을 정해야 한다.

ex) 값이 같은지 확인하는 함수 A.equal("TEST"); 누가 봐도 같은지 확인하는 함수

반환하는 변수는 result로 지정해 파악하기 쉽게 할 수 있다.

매개변수로 play, play.b를 보낸다면 불필요한 play.b를 제거한다. → play.b는 play안에 있기 때문에 로컬 범위에 존재하는 이름이 늘어나서 추출 작업이 복잡해진다.

반복문 쪼개기 → 서로 다른 역할을 하는 변수가 하나의 반복문에 있을 때는 반복문을 나누어 명확하게 할 수도 있다.

반복문 하나를 2개로 나누기 때문에 그에 따른 성능 저하가 일어난다는 걱정을 할 수 있지만 실제로 그 영향은 미미할 때가 많다

 

리팩터링 때문에 성능이 떨어진다면, 하던 리팩터링을 마무리하고 나서 성능을 개선하자.

-> 성능이 떨어질 수 있지만 잘 다듬어진 코드가 성능을 개선하기 쉽기 때문에 각자의 판단으로 리팩터링을 진행하라

 

리팩터링 4가지

반복문 쪼개기 - 역할이 다른 변수를 분리한다

문장 슬라이드 하기 - 변수 초기화 문장을 for문 바로 앞으로 옮긴다.

함수 추출하기 - 추출할 수 있는 부분이 있다면 하나의 함수로 만든다

변수 인라인 하기 - 코드를 명확하게 볼 수 있다.

조건부 로직을 다형성으로 바꾸기(팩토리 패턴 익히기)
        - 인터페이스를 만들어 해당 인터페이스를 상속받아 조건별로 객체를 다르게 생성하는 패턴

좋은 코드를 가늠하는 확실한 방법은 '얼마나 수정하기 쉬운가'다.

 

 

"리팩터링을 진행하며 항상 생각해야 하는 것은 컴퓨터가 이해하기 쉽게 만드는 것이 아닌 사람이 이해하기 쉽게 만드는 것이다."

 

 

해당 글은 마틴 파울러 - 리팩터링 2판을 보고 작성한 글입니다.

 

리팩토링

개발자가 선택한 프로그램 가치를 높이는 최고의 코드 관리 기술마틴 파울러의 『리팩터링』이 새롭게 돌아왔다.지난 20년간 전 세계 프로그래머에게 리팩터링의 교본이었던 이 책의 1판은, 기�

book.naver.com

 

반응형

+ Recent posts