Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
TIL(2. 의미 있는 이름)
#clean_code
2년 전
854


TIL (Today I Learned)

2022.02.20

오늘 읽은 범위

2장. 의미 있는 이름

책에서 기억하고 싶은 내용을 써보세요.

  1. 의도를 분명히 밝혀라. - 주석이 불필요한 “정보제공"(존재 이유, 수행 기능, 사용 방법)

  • d, x, theList 같은 포괄적이고 함축적인 것보다 daysSinceCreation, elapsedTimesInDays, fileAgeInDays ...

  1. 그릇된 정보 피하기. 이미 특정한 의미로 통용되는 변수, 서로 흡수한 변수는 쓰지 않는다.

  • 특히 소문자 L, 대문자 O만 쓰는 경우 숫자 1, 0과 헷갈릴 수 있으니까 절대 쓰지 말길..

  1. 다른 이름은 다른 의미를 가져야 한다! 분명히 다른 의미에 다른 이름을 쓴다.

  • 불용어는 중복이다. - Product라는 클래스가 있고 다른 클래스에 ProductInfo, ProductData 식으로 이름을 붙인다면 개념을 구분한 게 아님. Info, Data는 모두 의미가 불분명한 불용어(noise word)다.

    • 안 좋은 예: moneyAccount vs. money / customerInfo vs. customer / theMessage vs. message

  1. 발음하기 쉬운 이름

  2. 검색하기 쉬운 이름. 이 관점에서는 긴 이름이 짧은 이름보다 좋다. 그러나 의미가 분명한 경우 짧은 이름이 좋다. 이름에 불필요한 맥락을 추가하지 않도록 주의한다.

  3. 인코딩을 피하라

  4. 문자 하나만 사용하는 변수, 기발한 이름 대신 명료함이 최고! 의도가 분명히 드러나는, 남들이 이해하는 코드를 사용하라.

  • 클래스, 객체 이름에는 명사나 명사구. Manager, Processor, Data, Info 같은 단어는 피하고 동사는 사용하지 않는다.

  • 메서드 이름에는 동사나 동사구. (+ get, set, is)

  1. 서로 다른 맥락에는 서로 다른 단어를 사용한다.

  • 지금까지 사용한 add는 기존 값 두 개를 더하거나 이어서 새로운 값을 만든다. 새로운 메서드는 집합에 값 하나를 추가한다. ⇒ 맥락이 다르기 때문에 여기에는 add를 쓰지 않는다. insert, append 등을 쓴다.

  1. 해법 영역(solution domain)과 문제 영역(problem domain) 구분하기. 각 영역과 관련된 코드는 각 영역에서 이름 가져오기.

  2. 맥락 추가!

  • 전체적인 변수를 훑으면 의미를 알 수 있지만 하나만 떼어놓고 봤을 때 의미가 잘 드러나지 않는 경우!

    • ex. [firstName, lastName, street, houseNumber, city, state, zipcode] ⇒ +”addr” ⇒ [addrFirstName, addrLastName, addrStreet ....]

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

  • 정보를 내포하는 이름을 짓는 것의 중요성은 알았지만, 실제로 코딩하다보면 정확하고 쉽게 이름 짓는 데 어려움이 많았다. 어떻게 지어야 할지도 잘 모르고, 이름 짓기에 익숙하지 않아 책에서 든 moneyAccount와 money 예시처럼 불용어로 클래스 이름을 지은 적도 있었다. 또한 별다른 이유 없이 긴 이름은 (복사해 붙여넣으면 되긴 하지만) 왠지 좋지 않을 것 같다고 생각했다. 그런데 2장을 읽은 뒤 의미가 분명한 경우 짧은 이름이 좋지만, 의미가 잘 드러나지 않고 짧기만 한 이름 대신 의미를 명확히 드러내는 긴 이름을 지을 필요가 있음을 깨달았다. 이렇게 책에서 나온 여러 유의사항을 떠올리면 코드 이름을 짓는 데 훨씬 도움이 될 것 같다. 다만 충분한 연습이 필요할 것 같다. 프로그래밍 언어는 자바 스크립트와 파이썬만 조금 접해봤는데, 어느 정도 이해할 수는 있지만 자바를 모른다는 게 책 읽는 데 한계인 것 같다. 그리고 영어가 모국어가 아니라 그런지, 여러 단어들 간의 차이를 정확히 모르는 경우가 많아서 이름을 두루뭉술하게 짓게 되는 것 같다. 코딩 공부를 하면서 영어 공부도 열심히 하고 특히 단어 뜻을 정확히 찾는 연습을 해야겠다.

궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

Q. 컴파일러, 인터프리터?

  • 컴파일러(compiler): 특정 프로그래밍 언어로 쓰인 문서를 다른 프로그래밍 언어로 옮기는 언어 번역 프로그램. 컴파일 = 원시 코드에서 목적 코드(다른 프로그램/하드웨어가 처리하기에 용이한 형태로 출력. 문서나 그림 파일로 옮기는 경우도 있음.)로 옮기는 과정.

  • 인터프리터(interpreter): 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경.

  • 컴파일 과정은 일반적으로 인터프리터보다 빠르게 실행되지만 원시 프로그램의 크기가 크면 상당한 시간이 걸릴 수 있다. 인터프리터는 기계어 명령어들이 만들어지는 컴파일 과정을 거칠 필요가 없이 고급 프로그램을 즉시 실행할 수 있다. 인터프리터를 활용하면 한번에 적은 양의 내용을 추가하고 빠르게 테스트할 수 있으며, 대화식으로 프로그래밍할 수 있어 학생들의 교육용으로 사용되기도 한다.

Q. 인코딩(문자 인코딩 또는 텍스트 인코딩): 사용자가 입력한 문자나 기호들을 컴퓨터가 이용할 수 있는 신호로 만드는 것