좋은 코드란 코드를 읽는 다른 사람이 별다른 수고를 들이지 않고 이해할 수 있는 코드이다. 빠르고 리소스를 적게 먹는 코드를 좋은 코드라고 할 수도 있지만, 작성한 사람만이 알 수 있는 코드라면 그 가치를 빠르게 잃을 수 밖에 없다. 현대 시대의 프로그램은 굉장히 많은 코드로 구성되고, 한명이 모든 프로그램을 설계하는 것이 아닌 굉장히 많은 사람들이 오랜 시간 유지보수하며 발전하는 과정을 가질 수 밖에 없기 때문이다. 협업 환경에서는 코드를 작성하는 시간보다 다른 사람의 코드를 읽고 이해하는데 대부분의 시간이 소요된다.
Readable Code가 좋은 코드라는 것은 알겠으나, 어떻게하면 누구나 읽기 쉽게 할 수 있을까?
그 시작은 함수명과 변수명을 직관적으로 이해할 수 있도록 역할, 목적, 형태에 대한 정보를 담는 것이다. 코드 작성자 입장에서는 함수명과 변수명이 그다지 직관적이지 않더라도, 코드의 구조나 각 함수와 변수의 역할을 이해하고 있으므로 큰 문제가 되지 않을 수 있다. 그러나 코드를 처음 읽는 사람은 함수와 변수를 이해하기 위해 코드의 구조, 맥락을 파악하는데 수고로움이 든다.
get_something()
이 something_get()
보다 자연스럽다.get_fragged_cells()
가 get_something()
보다 명확하다.get
, fetch
, load
등 무언가 들고온다는 뜻은 같지만 사용되는 상황이 다르다.적절한 동사
에 대한 고민이 필요하고, 오픈 소스 코드를 많이 읽어보는 것이 중요하다.article_list
보다 article_queryset
이 변수의 type을 이해하기 쉽다.get_duplicate_list()
는 동사 + 목적어 + type정보를 가지고 있지만, 리스트에서
중복요소를 찾는다는 것과는 거리가 멀다.get_duplicates_in_list()
는 함수의 이름이 길어졌지만 의미가 더 명확해진다.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
로 쪼갤 수 있다.parse_XML()
은 새로운 클래스의 메소드로 분리하거나 util 함수로 분리한다.