더북(TheBook)

“이 함수는 문자열의 각 어절 첫 글자를 대문자로 변환하고, 나머지 글자를 모두 소문자로 변환한다”와 같이 실제 기능을 더 자세히 설명할 수는 있겠지만, 이 모든 것을 하나의 이름으로 만들기는 어렵다. 이름은 가능한 한 짧으면서 동시에 모호하지 않아야 한다. 그런 면에서 Capitalize라는 이름은 쓸만하다.

코드의 관심사를 아는 것은 우리에게 필요한 중요한 기술이다. 보통 함수나 클래스의 특징을 분류하기 위해 인격을 부여한다. “이 함수는 이런 건 신경 안 써”라고 마치 사람을 대하듯 말한다. 마찬가지로 코드 조각이 무엇에 관심이 있는지 이해할 수 있다. 모든 어절의 첫 글자만 대문자로 바꾸는 함수는 입력된 내용이 도시인지 아닌지는 신경 쓰지 않기 때문에 isCity 대신 everyWord라는 매개변수 이름을 사용했다. 도시는 함수의 관심사가 아니기 때문이다.

관심사와 비슷하게 이름을 지정하면 사용 패턴이 더 분명해진다. 그렇다면 왜 파일 이름의 형식을 지정하는 함수 이름을 FormatFilename이라고 했을까? CapitalizeInvariantAndSeparateWithUnderscores라고 하는 게 낫지 않았을까? 아니다. 함수는 여러 일을 처리하지만, 결국 작업 하나만 수행해야 한다. 해당하는 작업의 이름을 따서 명명해야 한다. 함수 이름에 ‘and’나 ‘or’를 사용해야 한다고 느낀다면 함수 이름을 잘못 정했거나 함수에 너무 많은 책임을 부여한 것이다.

이름은 코드의 관심사 중 하나일 뿐이다. 코드의 위치나 모듈, 클래스 등은 코드의 재사용 여부를 판단하는 지표가 될 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.