일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 네트워크
- Dataproc
- cdk
- golang
- 구글 클라우드
- 마이크로서비스
- 머신러닝
- cloud
- Associate
- 클라우드
- 딥러닝
- nnictl
- 코세라
- 쿠버네티스
- AWS #빅데이터 #분석 #데이터
- docker
- coursera
- 구글클라우드
- Kubernest
- aws
- 구글
- 클라우드 자격증
- 구글클라우드서밋
- go
- 자격증
- 도커
- GCP
- 구글클라우드플랫폼
- DataFlow
- Today
- Total
JD의 블로그
[Software engineering] Refactorin 본문
리펙토링은 많이 들어본 단어이다.
"리펙토링(refactoring)은 주로 '결과의 변경 없이 코드의 구조를 재조정함'을 뜻한다."
그러나 정확하게 리펙토링이 무엇을 뜻하는지 자세히 생각해본 적은 없는데 이번 기회에 공부할겸 한 번 정리해보려고 한다.
Code refactoring은
기존의 기능을 변경하지 않고, 프로그램 내부 구조를 변경하는 과정이다.
왜?, 소프트웨어 내부적인 quality attribute를 향상시키기 위해!
"A quality attribute (QA) is a measurable or testable property of a system that is used to indicate how well the system satisfies the needs of its stakeholders. "
또한 Code refactoring은 유지보수성을 향상시켜준다.
( 코드를 좀 더 쉽게 이해할 수 있고, 확장성을 늘려준다.)
1. 복잡한 표현은 지양하라
2. 내부 클래스의 메서드보다 외부 클래스의 메서드를 많이 사용한다면, 그것은 좋지 못하다.
언제 리펙토링을 고려해야하는가?
1. 프로그램에 무엇인가 추가해야한다는 것을 찾았을 때 (추가해야할지도 모를때!)
2. 그리고 새로운 것을 추가할 때 개발자가 수정하기에 편리한 방식의 구조를 가진 코드가 아닐 때!
소스 코드를 리펙토링할 때 도와주는 도구를 활용하는 것은 필수이다!
(Java 를 위한 리펙토링 툴은 많지만 C++을 위한 것은 별로 없다..)
[1] Split Temporary Variable
loop varaible과 collecting temporary varaible이 아닌 임시 변수가 두 번 이상 할당되면 다른 변수 이름으로 선언해라
[2] Introduce Assertion
Assert로 가정을 명확하게 만든다
[3] Replace Error Code with Exception
메서드가 에러를 알리기 위해 특수한 코드를 return하게 만든다. '
[4] Replace Nested Conditional with Guard Clauses
분명하지 않는 작동 방식을 가진 메서드를 수정한다.
[5] Replace Magic Number with Symbolic Constant
특정한 의미를 가지는 고유한 숫자는 literal number로 변환해서 써라
[6] Extract Method
함께 합쳐질 수 있는 코드는 합쳐라
메서드의 목적을 나타낼 수 있는 이름을 가진 메서드로 합쳐라
[7] Replace Parameter with Explicit Methods
enumerated paramter의 값에 따라 다른 코드가 돌아가는 메서드의 경우 각각의 파라미터에 따른 분리된 메서드를 만들어서 사용해라