클린코드와 리팩토링은 비슷한 의미를 가지고 있다.
이해하기 쉽도록 가독성이 높은 코드를 작성하고자 하는 행위들이다.
클린코드
가독성이 높은 코드
가독성이 높은 코드를 작성하기 위해서 지켜야할 규칙이 있다.
- 네이밍
- 오류 X
- 중복 X
- 의존성 최대한 없이
- 클래스/메소드가 한가지 일만 처리해야 함
왜 클린하게 코드를 작성해야 할까?
- 유지보수 향상
- 빠른 개발
- 품질 좋은 소프트웨어 보장
- 기술부채 회피
*기술부채: 지저분한 방식으로 빠르게 개발할 시 추후 새롭게 기능을 개발할 때 더 많은 시간이 필요하다.
def AAA(a, b)
...
return a + b
def BBB(a, b)
...
return a - b
이 코드의 문제점은
1. 함수 네이밍
누가봐도 함수가 어떤 역할을 하는 함수인지 알 수 있어야 한다.
2. 함수와 함수 간격
여러 함수가 존재할 때 시작과 끝을 구분하기 위해 간격을 나눠 가독성을 높인다.
def sum(a, b)
...
return a + b
def sub(a, b)
...
return a - b
위 문제점을 반영하여 클린코드로 작성한다.
리팩토링
내부의 코드를 정리하면서 개선하는 것 (외부동작은 동일)
a.k.a 리모델링 작업
지저분한 코드로 인해 가독성이 떨어지는 코드를 개선하는 것이다.
지저분한 코드란?
- 중복코드
- 긴 메소드
- 거대한 클래스
- Switch문
- 절차지향 코드
* 파이썬에는 Switch문이 존재하지 않는다.
* Switch문: 어떤 값을 가진 대상을 두고 조건값과 일치하는지를 확인하고 동작을 수행하는 방식
리팩토링은 성능을 최적화하는 것이 아니라,
코드를 신속하게 개발할 수 있도록 만들어주고, 코드 품질을 좋게 만들어 주는 것이다.
왜냐하면 코드가 이해하기 쉽고 수정하기 쉬우면 개발속도가 증가하기 때문이다.
언제 리팩토링이 필요할까?
새로운 기능을 추가할 때 사용한다.
리팩토링 과정
1. 테스트
def calculator(number1, number2, operator):
if operator == '+':
return number1 + number2
elif operator == '-':
return number1 - number2
assert calculator(3, 5, '+') == 8
assert calculator(10, 4, '-') == 6
해당 연산의 결과가 잘 나오면 그냥 넘어가고 아니면 오류를 일으켜 테스트를 하는 것이다.
여기서 기능을 추가하거나 코드를 수정할 때마다 assert를 돌려서 원래의 기능이 잘 수행되는지 보는 것이다.
가정 설정문 (assert)
assert는 뒤의 조건이 True가 아니면 AssertError를 발생한다.
왜 assert가 필요한 것일까?
성능을 높이기 위해 반드시 정수만을 입력받아 처리하도록 만들 수 있다.
이런 함수를 만들기 위해서는 반드시 함수에 정수만 들어오는지 확인할 필요가 있다
2. 함수 쪼개기
함수 쪼개기 원칙
- 추상화 수준을 높여 같은 일을 하는 것을 추출한다.
- 추출한 것들을 따로 함수로 만들어 함수를 최대한 작게 만든다.
3. 임시 변수 제거
임시 변수란 값이 한 번만 대입되고 변경되지 않는 변수이다.
def sum():
previous = 10000
current = previous
...
previous는 한 번만 사용되고 다시 사용되지 않는 임시 변수이다.
def sum():
current = 10000
...
클린코드와 리팩토링의 차이
클린코드
- 가독성을 높이기 위한 작업에 비중이 높다
- 설계부터 잘 이루어져 있는 것이 중요
리팩토링
- 유지보수를 위한 코드 개선
- 추후 요구사항 수정 및 추가 작업을 위해 개선해 나가는 것
'CS' 카테고리의 다른 글
정규화 Normalization (0) | 2023.02.02 |
---|---|
13913. 숨바꼭질4 [BAEKJOON / Python] (0) | 2023.01.27 |
프로세스와 스레드 Process & Thread (0) | 2023.01.23 |
RDBMS와 NoSQL (1) | 2023.01.23 |
[네트워크] TCP/UDP 특징 (1) | 2023.01.16 |