가변데이터 데이터를 변경하다보면 예상치 못했던 결과나 해결하기 어려운 버그가 발생하기도 한다. 함수형 프로그래밍 언어는 데이터를 변경하지 않고 복사본을 전달한다. 하지만 그밖의 프로그래밍 언어는 데이터 변경을 허용하고 있다. 따라서 변경되는 데이터 사용 시 발생할 수 있는 리스크를 관리할 수 있는 방법을 적용하는 것이 좋다. 이와 관련된 리팩토링으로는 변수 쪼개기 (Split Variable)을 사용해 여러 데이터를 저장하는 변수를 나눌 수 있다. 질의 함수와 변경 함수 분리하기 (Separate Query from Modifier)를 적용해서 클라이언트가 원하는 경우에만 사이드 이팩트가 있는 함수를 호출하도록 API를 개선할 수 있다. 가능하다면 세터 제거하기 (Remove Setting Method)..
전역 데이터 전역 데이터 (예, 자바의 public static 변수) 전역 데이터는 아무곳에서나 변경될 수 있다는 문제가 있다. 어떤 코드로 인해 값이 바뀐 것인지 파악하기 어렵다. 클래스 변수 (필드)도 비슷한 문제를 겪을 수 있다. 변수 캡슐화하기 (Encapsulate Variable)를 적용해서 접근을 제어하거나 어디서 사 용하는지 파악하기 쉽게 만들 수 있다. 파라켈수스의 격언, 약과 독의 차이를 결정하는 것은 사용량일 뿐이다. 변수 캡슐화하기 (Encapsulate Variable) 메소드는 점진적으로 새로운 메소드로 변경할 수 있으나, 데이터는 한번에 모두 변경해야 한다. 데이터 구조를 변경하는 작업을 그보다는 조금 더 수월한 메소드 구조 변경 작업으로 대체 할 수 있다. 데이터가 사용되는..
긴 함수 짧은 함수 VS 긴 함수 함수가 길수록 이해하기 어려워진다. VS 짧은 함수는 더 많은 문맥전환을 필요로 한다. 과거에는 작은 함수를 사용하는 경우에 더 많은 서브루틴 호출로 인한 오버헤드가 있었다. 작은 함수에 좋은 이름을 사용했다면 해당 함수의 코드를 보지 않고도 이해할 수 있다. 어떤 코드에 주석을 남기고 싶다면, 주석 대신 함수를 만들고 함수의 이름으로 의도를 표현해보자. 이에 해당하는 리팩토링 기술은 7종류가 있다. 문제의 99%는 함수 추출하기(Extract Funtion)로 해결할 수 있다. 함수로 분리하면서 해당 함수로 전달해야 할 매개변수가 많아진다면 다음과 같은 리팩토링을 고려해볼 수 있다. 임시 변수를 질의 함수로 바꾸기 (Replace Temp with Query) 매개변수..
이해하기 힘든 이름 깔끔한 코드에서 가장 중요한 것 중 하나는 “좋은 이름”이다. 함수, 변수, 클래스, 모듈의 이름 등 모두 어떤 역할을 하며 어떻게 쓰이는지 직관적이어야 한다. 이에 해당하는 리팩토링 기술은 3종류가 있다. 함수 선언 변경하기 변수 이름 바꾸기 필드 이름 바꾸기 함수 선언 변경하기 좋은 이름을 가진 함수는 함수가 어떻게 구현되었는지 코드를 보지 않아도 이름만으로 이해할 수 있다. 좋은 이름을 찾아내기 위해서 함수에 주석을 작성한 다음, 주석을 함수 이름으로 만들어보자. 함수의 매개변수는 ? 함수 내부의 문맥을 결정한다. 의존성을 결정한다. 변수 이름 바꾸기 많이 사용되는 변수일수록 이름이 더 중요해진다. 다이나믹 타입을 지원하는 언어에서는 타입을 이름에 넣기도 한다. 여러 함수에 걸쳐..
- Total
- Today
- Yesterday
- 릿코드
- Spring
- 스프링 부트
- 자료구조
- 리팩토링
- 정렬
- 북클럽
- Algorithm
- 스프링
- 인프런
- webflux
- 그리디
- leetcode
- MySQL
- kotlin
- 알고리즘
- mysql 8.0
- 문자열
- Real MySQL
- 노마드
- 코테
- 김영한
- 스프링부트
- spring boot
- 코틀린
- 데이터베이스
- 백준
- 구현
- 노마드코더
- 파이썬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |