Naming
우연히 유튜브 알고리즘에 의해 함수 네이밍 관련 영샹을 발견했고, 함수 네이밍에 대해 고민이 있었기에 영상 시청 후 도움이 되었던 것들 정리
함수 이렇게 만들면 넌 주니어
https://youtu.be/Wd6FJ1s_ZUc?si=a_cUE8y0twUJc14t
함수 내부의 코드, 연산에 따라 함수명을 만든다면 주니어다! 라고 영상을 시작하는데 완전 내 얘기;;
함수는 코드의 재활용이 되어야하고, 그러기 위해서는 “함수 생성자”가 아닌 함수를 사용하게되는 “호출자”가 이 함수가 어떤 함수인지 명백히 알고 호출할 수 있게 해야한다
함수 내부에서 사용되는 데이터들의 결과를 잘 보여주는 것이 함수의 역활이지, 내부 데이터가 어떻게 저장되는지 알리는 기능이 아니다. 그렇기에 함수 내부에 사용하고 있는 코드,연산을 가지고 함수명을 작성하면 본인만 편할뿐이다. 특히, 함수명에
and
,or
이 포함되어있다면 이 것은 함수 내부에서 사용된 연산들을 나열해둔 것일 가능성이 크고, 이 연산들이 어떤 결과를 주는데 호출자의 입장을 생각하지 못했을 가능성이 크다.본인이 문서화를 잘못한다면 기술 스택의 이해도가 부족해서 용어를 사용하지 못한다거나, 내가 사용한 용어가 틀릴까 두려워 의도적으로 피하고 있을 수도 있다. 문서화를 잘 해야 재사용성이 늘고 유지보수 비용이 줄어든다!
함수의 결과를 함수명에 나타내는 것이 더 효율적이고, 이 것은 상세한 내부 구현은 숨기고 사용자에게 필요한 인터페이스만 제공해야한다는 OOP의 캡슐화 원칙과 매우 유사하다. 그러니까 함수 시그니처 작성도 신경써라!
개발자의 영원한 숙제, 변수 이름 잘 짓는 5가지 원칙
https://youtu.be/GlIYGrXWIuk?si=qQWEyF0uPL0PQ66H
- typing하기 쉬운 이름 보다는 이해하기 쉬운 이름으로 구현
해당 도메인에서 널리 알려진 용어가 아니라면 함수명이 길어져서 줄이는 것은 좋지 않다. Process ID를 가져오는 함수를 get_PID와 같이 네이밍 하는 정도라면 Ok
- 정확한 이름, 하는 일을 정확하게 설명할 것
이름을 정확히 작성하려다 보면 단일 책임 원칙에 위반하는 함수들을 발견하기 쉽다. ReadUserData 라고 네임밍 해놓고, 함수 안에서 Write 동작이 있다면, 차라리 함수를 분리하자
- 의도를 설명하는 이름, 내가 이 함수를 작성한 의도를 이름에 어떻게 나타낼까를 고민하는 것이 좋은 네이밍을 할 수 있게 도와줌
변수명을 잘 짓기 위한 몸부림
https://brunch.co.kr/@wapj2000/29
- 특정한 단어 선정하기
get_somthing
과 같은 함수명은 매우 많이 사용하게 되는데, get
은 너무 광범위 하기 때문에 네크워크를 통해 가져온다면 fetch
, DB에서 가져온다면 read
와 같이 특정한 단어를 선정하는 것이 좋다.
- show… : 무언가를 보여주는 함수. ex) showMessage()
- get… : 값을 반환하는 함수. ex) getAge()
- calc… : 값을 반환하는 함수. ex) calcSum()
- create… : 무언가를 생성하는 함수. ex) createForm()
- check… : 무언가를 확인하고 불린값을 반환하는 함수. ex) checkPermission()
- convert… : 무언가를 전환해주는 함수. ex) convertToString()
- 변수명에 세부 정보 추가하기
`game_list’ 보다는 ‘game_queryset’ 과 같이 데이터 타입, 클래스 타입을 넣어주는 것이 좋다. 특히 python은 동적 언어이기 때문에 변수의 타입을 바로 알기 쉽지 않기 때문이다.
- 오해할만한 네이밍 피하기
리스트안에서 중복된 element를 가져오는 함수를 만들고자 할때, get_duplicate_list()
라는 함수는 어떤 객체의 중복 리스트를 가져오는 함수라고 생각될 수 있기 때문에 ‘get_duplicatge_in_list()’와 같이 네이밍하는 것이 더 명확하다. 내가 납득되었다고 끝낼 것이 아니라, 다른 사람도 제대로 해석할 수 있을까 라고 고민하는 것이 필요!
- 검색하기 쉬운 네이밍
NO_RESULT
보다는 ERROR_NO_RESULT
처럼 상위 범주의 이름을 앞부분에 추가해주는 것이 검색하기 쉽다.