본문 바로가기
안정적인 프로덕트를 위한 고민

변수, 함수, 타입 이름 작성에 대한 고민

by MINTOEngineer 2024. 8. 16.
사수에게 받은 피드백중 많은 고민이 필요하고 중요한 부분이 바로 이름 짓는거라고 생각합니다. 이 글은 좋은 변수를 짓는것에 대한 피드백과 제 생각을 정리한 글입니다.

 

변수의 이름 짓기란 매우 중요한건 모두 알고있을것이다. 하지만 시간이 없어 빠르게 코드를 작성해야 하는 상황이나 내가 적절하다고 생각한 변수명이 상대방이 느꼈을때는 파악하기 어려운 변수일 수도 있다. 

 

위와 같은 문제 해결을 위해서는 세 가지 규칙을 기반으로 작성하는게 중요하다.

  1.  변수명은 제 3자가 봤을때 코드의 문맥을 파악하지 않아도 변수명만 보고도 어떤 역할을 하는 변수인지 파악이 가능한지를 고민하고 작성하는게 중요하다.
  2. 문법적으로 오류가 없는지 파악하고 작성해야한다. 
  3. 함수가 정확히 어떤 동작을 하는지 파악할 수 있어야한다. 

첫 번째는 팀으로 일하던지 혼자 일하던지 매우 중요한 마인드? 라고 생각한다. 코드를 작성할때는 이미 전체적인 코드의 흐름과 문맥을 이해하고 작성하고 있어 제 3자의 입장에서 이해되는 변수명을 사용해서 작성하지 않는 경우가 나 같은 경우 종종 있었다. 

이 경우 제 3자가 처음 내 코드를 볼 때 해당 변수가 어디서 사용되고 있는지 파악을 해야 이해를 할 수 있었기 때문에 매우 좋지 않은 코드라는 생각이 들었다. 심지어 내가 짠 코드를 이삼일만 지나서 봐도 해당 변수가 어떤 값을 갖고 있는지 파악하는데 연관된 코드를 확인해야하는 불상사가 생겼었다.

 

private _booksCategorySame = new Subject<string>();

 

하나 예를 들어보자 위에 코드를 보고 무슨 의미의 변수인지 생각해보자.

직역하면 책들의 카테고리가 동일이라는 의미인데 서버로부터 데이터를 받아오기위한 Subject인데 도대체 어떤 값을 받아오는지 코드를 분석하지 않고서는 모른다. 

위와 같은 경우 동료 개발자에게도 불편함을 줄 수 있고 몇일뒤에 다시 코드를 확인한 자기 자신 조차도 무슨 뜻인지 바로 파악하지 못할 확률이 높다.

 

https://soojin.ro/blog/naming-boolean-variables

 

Bool 변수 이름 제대로 짓기 위한 최소한의 영어 문법 · Soojin Ro

Background 프로그래머의 가장 어려운 업무가 이름 짓기라는 설문 결과도 있듯이 변수에 적절한 이름을 지어주는 것은 어렵고 오래걸리는 일이다. 영어가 모국어가 아닌 사람들에게는 더 어려울

soojin.ro

참고로 boolean 타입의 변수의 경우 위에 블로그를 참조하면 정확한 의미의 변수 이름 짓기가 가능하니 참고하도록 하자.

 


 

두 번째의 경우 문법적인 오류인데 

 

interface Books {
  id: string;
  name: string;
}

public comicBooks: Books[];

 

위에 코드에 Books 타입의 경우 책들이라는 복수형으로 작성이 되어있다. 서버로부터 받는 데이터는 여러개의 책 정보가 배열의 형태로 오기 때문에 적절하다는 생각이 들 수 있다.

하지만 comicBook에 타입으로 Books의 배열이 타입으로 선언된걸 보면 책들의 책들? 이라는 문법적으로 이해하기 어려운 타입이 될 수 있다. 이런 경우 Books가 아닌 Book으로 타입을 작성해주는게 문법적으로 . 더 적절하다.

 

let comicBook: 책들;

 

문법적으로 적절한 변수명을 작성하는게 영어라서 조금 와닿지 않을 수도 있다. 하지만 타입을 한글로 바꿔봤을때 한 번 생각해봐라 위에 코드는 comicBook의 단수로 책 한권을 의미하는데 타입은 책들 의미하니 변수를 사용하는 개발자 입장에서 변수명과 타입이 서로 달라 어떤 데이터인지 헤깔릴 수가 있다.

 


 

세 번째의 경우를 보면 첫 번째랑 같은 의미인가? 싶지만 조금 다르다. 

 

public _deleteExpiredBook(): void {
  this.deleteEvent.emit(this.bookId);
}
 

참고로 앵귤러 문법이다. 위에 코드를 보면 위에 함수는 삭제 버튼이 클릭됐을때 호출 되는 함수인데 함수 이름은 정작 함수 내부에서 삭제를 위한 특정 로직이 처리되겠구나 라고 생각이 드는 이름으로 작성돼있다.

이는 첫 번째 법칙처럼 제3자가 함수명만 봐도 어떤 의미인지 파악하기는 쉽게 작성되어있지만 정작 의미하는바에 해당하는 동작은 수행하지 않아 코드 이름 자체에 대한 신뢰도가 떨어질 수 있다.

 

함수이름은 onDeleteButtonClick 으로 바꾸어 단순히 클릭으로 인해 발생하는 특정 로직만 처리하는구나 라고 생각이 들 수 있게 바꾸는게 좋을꺼 같다.