노트

정리(Tidying)

Tidying

설계#refactoring · 연결된 개념 13개

쉽게 말하면

정리는 동작은 그대로 두고 몇 분이면 끝나는 아주 작은 코드 손질이에요. 책상 위 펜을 꽂고 서류를 한쪽에 모으듯, 겁나지 않을 만큼 작게 해서 다음 작업을 바로 쉽게 만들어요.

비유가 깨지는 곳 작다고 아무 때나 하는 건 아니에요. 정리 하나가 다음 정리를 부르니 충동을 다스려야 하고, 기능 변경과는 커밋·PR을 따로 내야 리뷰가 빨라져요.

동작을 바꾸지 않는 아주 작은 구조 변경. 켄트 벡은 리팩터링이라는 말이 "기능 개발 중간의 긴 공사"처럼 쓰이며 동작 보존 원칙이 흐려지자, 더 작고 겁나지 않는 단위를 정리라는 이름으로 따로 불렀다. 리팩터링의 부분집합이다.

구조 변경과 동작 변경을 나눈다

  • 정리 커밋과 동작 변경 커밋, 가능하면 PR(Pull Request)까지 따로 낸다. 섞여 있으면 리뷰어가 주저하고 리뷰가 늦어진다
  • 신뢰가 쌓인 팀이라면 정리 PR은 리뷰 없이 넣는 시도도 해 볼 만하다
  • 이미 섞어 버렸다면, 버리고 정리부터 다시 하는 것도 방법이다. 같은 변경을 다시 하면서 더 많이 배운다

얼마나, 언제

  • 배치 크기(Batch Size): 한 번에 정리를 많이 묶을수록 충돌·의도치 않은 동작 변경·추측 비용이 커지고, 적게 묶을수록 리뷰 횟수가 는다. 균형점은 팀의 신뢰와 리뷰 비용에 달렸다
  • 연쇄(Chaining): 정리 하나가 다음 정리를 부른다. 정리하고 싶은 충동을 다스리는 것이 기술의 핵심이다
  • 시점: 다음 변경이 바로 쉬워지고 무엇을 할지 알면 먼저, 지금 하기엔 비싸면 나중에(작은 목록에 적어 두고 짬이 날 때), 다시 볼 일이 없는 코드면 안 한다
  • 정리에 한 시간 넘게 걸린다면 필요한 최소한을 넘었다는 신호다
  • 변경은 일부 코드에 몰리는 경향이 있어서, 자주 고치는 곳은 자연스럽게 정리된 상태로 유지된다

왜 이렇게 판단하는지의 경제학은 구조와 동작, 옵션의 가치에, 개별 기법은 『켄트 벡의 Tidy First?』 개요에 있다. 커밋을 나누는 실무 요령은 커밋 메시지와 원자적 커밋와 인터랙티브 리베이스로 커밋 정리 참고.

출처: 『켄트 벡의 Tidy First?』 켄트 벡 (원서 Tidy First?)

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 결합도

    한 요소를 바꿀 때 다른 요소도 바꿔야 하는 관계. 결합도는 언제나 "어떤 변경에 대해" 결합되어 있는지를 함께 말해야 의미가 있다. 같은 두 모듈도 어떤 변경에는 묶여 있고 어떤 변경에는 독립적일 수 있다.

  • 리팩터링 기법 카탈로그

    리팩터링 기법을 무엇을 정리하는지에 따라 묶어 본 지도. 기법마다 거의 항상 반대 방향 기법이 짝으로 있어서(추출↔인라인, 올리기↔내리기) 상황에 따라 양쪽으로 오간다. 아래 묶음은 Refactoring.Guru 카탈로그(1판 기반)의 분류를 따랐고, 기법 이름은 2판 기준으로 적었다.

  • 죽은 코드 제거

    더 이상 실행되지 않거나 필요 없어진 코드를 지우는 일. 죽은 코드는 "무시해도 된다"는 신호를 주지 않기 때문에, 읽는 사람은 그 코드가 왜 있는지 이해하려고 시간을 쓰고, 고쳤는데 결과가 안 바뀌는 이유를 찾느라 헤맨다.

  • 테스트 주도 개발 (TDD)

    코드를 쓰기 전에 실패하는 자동화된 테스트부터 쓰고, 그 테스트를 통과시킨 뒤 중복을 없애는 짧은 주기를 반복하는 개발 방식. 켄트 벡이 정리했다.

  • 청킹과 코드 읽기

    여러 정보를 의미 있는 덩어리 하나로 묶어 기억하는 것. 아는 것이 많을수록 코드를 큰 덩어리로 읽는다.

보기 옵션