스터디/Five Lines of Code

Five Lines of Code 3장 긴 코드 조각내기

마디니 2023. 9. 22. 21:35
반응형

긴 코드 조각내기

혼란스러운 코드 원인

  • 여러가지 일을 수행하는 메서드
  • 낮은 수준의 원시 연산(배열조작, 산술연산)
  • 사람이 읽을 수 있는 텍스트 부족

규칙: 다섯줄 제한

"메서드는 공백, {, }를 제외하고 5줄 이상이 되서는 안된다"

  • 메서드가 길면 한 번에 긴 메서드의 모든 논리를 머릿속에 담아야 해서 작업하기 어렵다 => 스멜
  • 메서드는 한가지 작업만 담당해야 하며 상황에 따라 다르지만 보통 한 기능은 5줄 정도로 끝나는 경우가 많다.
  • 메소드를 반으로 나눠 도우미 메소드를 호출하는 식으로 변경하여 줄여나가기

함수 분해를 위한 리팩터링 패턴

  1. 추출할 부분 찾기
    • 동일한 작업을 하는 데 필요한 줄을 식별하려 그룹화 시킨다.
    • 이때 그룹간 구분은 빈줄이나 주석을 활용한다
  2. 원하는 이름으로 새로운 비어있는 메소드 생성
  3. 그룹 맨 위에서 새로운 메소드 호출
  4. 그룹의 모든 줄을 선택해서 잘라내어 새로운 메소드 본문에 붙여넣기
  5. 컴파일
  6. 매개변수를 도입하여 호출하는 쪽의 오류 발생시키기
  7. 매개변수를 반환값으로 할당해야 하는경우 새로운 메서드 마지막에 return 타입 추가하고, 새로운 메소드를 호출하는 쪽에서 받기
  8. 컴파일
  9. 파라미터 전달하여 컴파일 에러 잡기
  10. 사용하지 않는 빈줄과 주석 제거
자신감이 떨어지는 예쁜 코드를 만드는 것보다 특이하게 생긴 안전한 코드를 만드는게 낫다

추상화 수준을 맞추기 위한 함수 분해

"메서드는 호출 또는 전달 한가지만 할 것"

  • 하나의 메서드 내에서 객체에 있는 메서드를 호출하거나 객체를 매개변수로 전달할 수 있지만, 둘다 해서는 안된다.
  • 함수의 내용은 동일한 수준의 추상화에 있어야 한다.

좋은 함수 이름의 속성

  • 함수의 의도를 설명해야 한다.
  • 함수가 하는 모든 것을 담아야 한다.
  • 도메인에서 사용하는 단어를 사용한다. -> 이해도 증가

너무 많은 일을 하는 함수 분리하기

"if문이 있는 경우 해당 if문은 함수의 첫 번째 항목이어야 한다."

  • if문 자체가 하나의 확인 작업이므로 하나의 메소드로 분리해야한다.
  • else if는 if문과 분리할 수 없는 원자 단위로 본다. -> if문을 분리 할 때  else if 도 함께 분리한다.
  • 메소드 추출을 이용해 분리한다.
반응형