536
자바에서 코틀린으로
함께 일할 수 있는 행운아였다. 이런 사람들은 여러분이 리팩터링을 하는 과정에 컴파일 오류
를 발생시키면 혀를 찰만한 사람들이었다. 보여 준 변환이 최적은 아니지만 (게다가 도구와 언
어가 달라지면 최적 변환도 달라지기 마련이다 ) 각각 독특한 변환으로, 코드를 작성하는 방법
이나 코드를 리팩터링하는 방법을 반영하지 않는다.
23.6
리팩터링과 함수형 사고
여행하면서 본 것처럼, 함수형 사고와 리팩터링 사이에는 관계가 있다. 리팩터링은 코드를 재
배열하는 것이고, 코드가 동작(실행하는 위치에 따라 결과가 달라지는 코드 )을 표현할 때 (
7
.
3
절 ‘동작’)는 재배열에 따라 동작의 실행이 달라질 수 있고, 그로 인해 소프트웨어의 기능도 달
라질 수 있다. 반대로 계산(
7
.
2
절 ‘계산’ )은 재배열을 해도 안전할뿐더러 궁극적으로는 무능력
하다 (즉 읽거나 쓰지 않고 열 (컴퓨터에서 발생함 )을 만들어내기만 한다 ). 함수형 사고는 우리
가 동작을 식별하고 제어하도록 장려하며, 동작을 구별해 제어하면 리팩터링도 더 안전해 진다.
이 사실을 어렵게 배웠다. 가변 객체의 시대에 리팩터링을 배웠고, 리팩터링의 여파를 예측하
지 못하고 버그를 만들었다. 그로 인해 리팩터링을 포기할 수도 있었겠지만, 시스템을 처음부
터 제대로 만들 정도로 영리하지는 못했다. 리팩터링을 포기하는 대신, 어떤 스타일 (객체 지향
이지만 불변성을 활용하는 스타일)의 프로그래밍 방법이 표현력이 좋고 이해하기도 쉬우며 리
팩터링하기도 좋고 안전하다는 사실을 발견했다. ...