02. 의미있는 이름

이름 잘짓는 간단한 규칙 몇 가지 소개

요약#

의도를 분명히 하기#

  • 좋은 이름은 가독성을 높여줌
// 이것 보단
int d;
// 의미있는 이름으로
int elapsedTimeInDays; // or
int daysSinceCreation; // or
int daysSinceModification; // or
int fileAgeInDays;

지뢰찾기 게임 판 예시

// v1
public List<int[]> getThem() {
List<int[]> list1 = new ArrayList<int[]>();
for (int[] x : theList)
if (x[0] == 4)
list.add(x);
return list1;
}
// v2: 의미있는 이름으로 수정
public List<int[]> getFlaggedCells() {
List<int[]> flaggedCells = new ArrayList<int[]>();
for (int[] cell : gameBoard)
if (cell[STATUS_VALUE] == FLAGGED)
flaggedCells.add(cell);
return flaggedCells;
}
// v3: Cell 클래스 화
public List<Cell> getFlaggedCells() {
List<Cell> flaggedCells = new ArrayList<Cell>();
for (Cell cell : gameBoard)
if (cell.isFlagged())
flaggedCells.add(cell);
return flaggedCells;
}

그릇된 정보 X#

  • 약어 사용시 유의 (다른 의미로 해석될 수 있음)
  • 타입 명시시 다른 타입 안적히도록 주의
  • 흡사한 이름 사용 X
  • 유사한 개념은 유사하게 사용
    • 일관성을 유지하지 않는다면 그릇된 정보가 나올 확률이 매우 높음

의미 있게 구분#

  • 읽는사람이 다른 이름과 구분할 수 있도록 지어야 함

발음하기 쉬운 이름을 사용#

검색하기 쉬운 이름을 사용#

  • 상수로 적지말고 의도를 담는 const(final) 변수 사용

인코딩 X#

  • 여기서 인코딩은 명명시 부차적인 타입과 같은 정보를 새겨넣는 것을 말함
  • 헝가리 표기법, 멤버 변수 접두어 사용 안해도 됨
  • 인터페이스는 그대로 하고 구현체에 인코딩 하는 방법을 택함
    • interface 예시: ShapeFactory
    • 구현체 예시: ShapeFactoryImp or CShapeFactory

자신의 기억력 자랑 X#

문제 해결과 관련된 이름이 아니라 자신이 그때 떠오르거나, 아는 이름으로 짓게 되는 경우 코드를 다시 보았을 때 헷갈릴 수 있어 가독성이 떨어짐

  • 명료함이 최고
    • 남들이 이해하는 코드를 짜는게 최고임

클래스 이름#

  • 명사, 명사구

메서드 이름#

  • 동사, 동사구
  • 변경, 접근, 조건자는 javabean 표준에 따라 get, set, is 를 앞에 붙임
  • 정적 팩토리 보단 일반 생성자를 권장함
    • 정적 팩토리가 더 낫고, 일방 생성자를 막으려면 private으로 생성자를 지정해 막을 수 있음

기발한 이름 X#

  • 재미난 이름보단 명료한 이름으로!

한 개념에 한 단어 사용#

  • 한 프로젝트 내에서 일관성있는 어휘를 사용하는 코드를 개발
    • 가독성 증가
    • Manager. Controller, Driver 와 같은 것을 섞어쓰면 혼란스러울 수 있음

말장난 X#

  • 한 단어를 두가지의 의미로 사용 X
  • 예시, add 를 두 값을 더한다는 의미로 사용했으면
    • 컬렉션에 값을 추가하는 것은 add보단 append나 insert 가 적절

해법 영역에 가져온 이름을 사용#

  • 해법 영역이란, 프로그래머가 공부하는 전산 / 알고리즘 / 패턴 / 수학 과 같은 영역
  • 해당 영역에 이름을 사용하는 것은 좋음

문제 영역에 가져온 이름을 사용#

  • 문제 영역이란, 각 앱의 분야의 영역
    • 예를 들어 음악 장르, 방송 송출과 관련된 용어 들

의미 있는 맥락을 추가#

  • 클래스, 함수, 네임스페이스에 넣어 맥락을 부여
    • 위가 다 실패하면 접두어를 붙임

불필요한 맥락 없애기#

  • 모든 클래스에 앱이름 접두어를 붙이는 건 불필요한 맥락
    • Gas Station Deluxe 라는 프로젝트가 있으면 모든 클래스에 GSD* 를 붙이는 격
  • 의미가 분명하다면 짧은 이름을 권장

마치면서#

  • 좋은 이름을 선택하려면 설명력이 좋아하고 문화적 배경이 같아야 가능하다
  • 글처럼 가독성이 좋은 코드를 작성하려 노력해야 함
  • 이 장에서 소개한 규칙을 이용해 코드 가독성이 높아지는지 살펴보기
    • 스프링 토이 프로젝트를 하게 된다면 고고!

추가 공부해야할 사항#

  • Abstract Factory 란?
  • Visitor 패턴
Last updated on