코드 가독성에 대한 몇가지 이야기
코드 가독성 얘기하다 보면
이런 이야기들, 한 번쯤은 다 들어보셨을 거예요.
변수 이름은 이렇게 써야 된다,
함수는 동사로 시작해야 된다,
camelCase가 맞다, snake_case가 맞다…
뭐 이런 이야기들이요.
보통은 이런 게
“좋은 코드 작성법”처럼 소개되죠.
근데 저는 이걸
조금 다르게 보고 있어요.
이게 틀렸다는 얘기를 하고 싶은 건 아닌데요,
정확히 말하면
전제가 하나 빠져 있다는 느낌이에요.
그 전제가 뭐냐면,
이 작성법들이
영어를 기준으로 만들어졌다는 점입니다.
보통 예로 드는 이름들 있잖아요.
1
2
3
getUserName()
isValid
shouldRender
이런 이름들은
코드를 문장처럼 읽기 쉽게 만들기 위한 거예요.
정확히 말하면,
영어 문장을 읽듯이
코드를 읽게 하려는 방식이죠.
영어는 문장을 읽을 때
앞부분에서 의미가 꽤 빨리 잡혀요.
그래서
isUserLoggedIn 같은 이름도
왼쪽에서 오른쪽으로 쭉 읽으면서
“아, 이게 무슨 뜻이구나” 하고 바로 이해가 됩니다.
근데 한국어는 좀 다르죠.
한국어는
끝까지 들어봐야 의미가 완성되는 언어잖아요.
“한국말은 끝까지 들어봐야 한다”
이런 말도 있고요.
그래서 한국어가 모국어인 우리는
이름을 한 번에 훑어 읽기보다는
코드의 구조라든지,
상태라든지,
맥락 단위로 파악하는 데 더 익숙해요.
예를 하나 들어볼게요.
1
if (isUserAuthorized && hasValidToken)
이 코드는
영어권 사고방식으로 보면
질문을 나열하듯이
되게 자연스럽게 읽혀요.
“권한이 있는가?”
“유효한 토큰이 있는가?”
이런 느낌이죠.
근데 한국인 입장에서는
이 코드가 꼭 그렇게 편하게 느껴지진 않을 수 있어요.
오히려 이런 쪽이 더 빨리 들어올 때도 많죠.
1
if (userState === AUTHORIZED && tokenState === VALID)
이건
문장을 읽는다기보다는,
상태를 확인하는 느낌이에요.
“아, 지금 유저 상태는 이거고,
토큰 상태는 이거구나.”
이런 식으로요.
이게 뭐가 더 낫다,
뭐가 틀렸다
이런 이야기는 아닙니다.
그냥
읽는 방식이 다르다는 거예요.
그래서 영어권 코드 리뷰를 보면요,
사실상 이게
코드를 문장처럼 다듬는 작업에 가까워요.
이름이 자연스럽게 읽히는지,
질문처럼 들리는지,
문장이 어색하지 않은지
이런 걸 많이 보죠.
반대로 한국어 화자 입장에서는
그런 코드가
논리적으로는 깔끔한데
읽다 보면 은근히 피곤한 코드가 되기도 해요.
물론 상황에 따라 다릅니다.
해외 오픈소스 프로젝트에 참여한다든지,
회사에서 특정 컨벤션을 쓰기로 정해져 있다면
그 문화에 맞춰서 코딩하는 게 맞죠.
그건 협업의 문제니까요.
다만,
개인 프로젝트라든지
국내 중심의 소규모 프로젝트라면,
영어권에서 정해놓은 작성법을
무조건 정답처럼 따라야 할 필요는 없다는 겁니다.
그럼 여기서
자연스럽게 이런 질문이 하나 생겨요.
“그럼 왜
아예 한국어를 기준으로 한,
한국어 프로그래밍 언어는 없는 걸까?”
이건 단순히
기술의 문제가 아니라,
구조와 생태계의 문제에 가깝습니다.