Readable Code: 함수명, 변수명

·2022년 6월 21일
1
post-thumbnail

개요

좋은 코드란 코드를 읽는 다른 사람이 별다른 수고를 들이지 않고 이해할 수 있는 코드이다. 빠르고 리소스를 적게 먹는 코드를 좋은 코드라고 할 수도 있지만, 작성한 사람만이 알 수 있는 코드라면 그 가치를 빠르게 잃을 수 밖에 없다. 현대 시대의 프로그램은 굉장히 많은 코드로 구성되고, 한명이 모든 프로그램을 설계하는 것이 아닌 굉장히 많은 사람들이 오랜 시간 유지보수하며 발전하는 과정을 가질 수 밖에 없기 때문이다. 협업 환경에서는 코드를 작성하는 시간보다 다른 사람의 코드를 읽고 이해하는데 대부분의 시간이 소요된다.

Readable Code가 좋은 코드라는 것은 알겠으나, 어떻게하면 누구나 읽기 쉽게 할 수 있을까?
그 시작은 함수명과 변수명직관적으로 이해할 수 있도록 역할, 목적, 형태에 대한 정보를 담는 것이다. 코드 작성자 입장에서는 함수명과 변수명이 그다지 직관적이지 않더라도, 코드의 구조나 각 함수와 변수의 역할을 이해하고 있으므로 큰 문제가 되지 않을 수 있다. 그러나 코드를 처음 읽는 사람은 함수와 변수를 이해하기 위해 코드의 구조, 맥락을 파악하는데 수고로움이 든다.

방법

동사 + 목적어

  • 문장의 어순에 맞게 배열하는 것이 읽을 때에도 자연스럽게 읽힌다.
    • get_something()something_get()보다 자연스럽다.
  • 목적어는 명확해야 한다.
    • get_fragged_cells()get_something()보다 명확하다.
  • 상황에 맞는 뉘앙스의 동사를 선택하자.
    • get, fetch, load등 무언가 들고온다는 뜻은 같지만 사용되는 상황이 다르다.
    • 사람들이 일반적으로 인식하는 적절한 동사에 대한 고민이 필요하고, 오픈 소스 코드를 많이 읽어보는 것이 중요하다.

이름의 길이

  • 의미가 분명한 경우 짧은 이름이 긴 이름보다 직관적이다.
  • 이해할 수 있다면 이름이 길어도 상관이 없다.
    • 요즘은 대부분 IDE를 이용하고 있고, IDE의 자동 완성 기능이 긴 이름의 단점을 보완해준다.

동적 타입 언어는 변수의 형태를 추가해주자

  • 동적 타입 언어는 코드를 작성한 사람이 아니라면 변수의 타입을 바로 알기가 쉽지 않다.
  • 가능한 자세한 type을 변수명에 넣어주자
    • article_list보다 article_queryset이 변수의 type을 이해하기 쉽다.

필요하다면 부사를 추가하자

  • 리스트에서 중복요소를 찾는 함수의 이름을 짓는 경우를 예시로 들어보자
    • get_duplicate_list()는 동사 + 목적어 + type정보를 가지고 있지만, 리스트에서 중복요소를 찾는다는 것과는 거리가 멀다.
    • get_duplicates_in_list()는 함수의 이름이 길어졌지만 의미가 더 명확해진다.

의미 없는 단어/축약어 피하기

  • 변수의 scope가 좁더라도, 일반적으로 통용되는 단어라도 풀어쓰려고 노력하자
    • for obj in [...] 보다 for pattern_matched in [...] 처럼 풀어쓰자.
    • postfix_position처럼 쓰는 것이 귀찮더라도 postfix_pos보다 의미가 명확하다.
    • tmp, ret, retval, qs와 같은 변수명보다 맥락에 맞는 변수를 쓰자.

함수의 모든 목적과 동작을 포함해보자 링크

  • 함수의 책임을 파악하고, 함수를 쪼개는 신호가 될 수 있다.
  • 과정
    • 함수의 동작을 파악
    • 동작에 따라 함수를 쪼개기
    • 함수가 동작하는 맥락을 이해하고 포괄적인 이름 붙이기
  • 예시
    • parse_XML_and_add_Flight_to_DB_and_local_cache_and_add_to_screen_if_visible() 처럼 함수의 이름에 목적과 동작을 모두 추가함으로써 너무 많은 책임을 가졌다는 사실을 직관적으로 알 수 있다.
    • 이 함수는 parse_XML(), save_flight_to_DB(), show_flight_on_screen_if_visible로 쪼갤 수 있다.
    • 쪼개진 함수를 관찰해보고 목적에 따라 통합, 분리하자. 함수의 목적은 결국 비행 경로를 표시하고 DB에 저장하는 것이다. 따라서, parse_XML()은 새로운 클래스의 메소드로 분리하거나 util 함수로 분리한다.
profile
Ben

0개의 댓글