Skip to main content

박수완

1. 📌 핵심 개념 정리

✅ 요약하기

  1. 의도를 분명히 밝혀라

    좋은 이름을 지으려면 시간이 걸리지만 좋은 이름으로 절약하는 시간이 훨씬 더 많다.

  • 개선 전
public List<int[]> getThem() {
List<int[]> list1 = new ArrayList<int[]>();
for (int[] x: theList)
  if (x[0] == 4)
    list1.add(x);
return list1;
}
  1. theList에 무엇이 들었는가?
  2. theList에서 0번째 값이 어째서 중요힌가?
  3. 값 4는 무슨 의미인가?
  4. 함수가 반환하는 리스트 List1 을 어떻게 사용하는가?
  • 개선 후
public List<int[]> getFlaggedCells() {
  List<int[]> flaggedCells = new ArrayList<int[]>();
  for (int[] cell : gameBoard)
    if (cell[STATUS_VALUE] == FLAGGED)
      flaggedCells.add(cell);
  return flaggedCells;
}

각 개념에 대한 이름을 명확하게 해줌으로 코드가 더욱 명확해졌다.


  1. 그릇된 정보를 피해라

    그릇된 단서는 코드 의미를 흐린다. 널리 쓰이는 의미가 있는 단어를 사용해도 안 된다. hp, aix, sco는 변수 이름으로 적합하지 않다. 유닉스 플랫폼이나 유닉스 변종을 가리키는 이름이기 때문이다.


  1. 의미 있게 구분해라 컴파일러나 인터프리터만 통과하려는 생각으로 코드를 구현하는 프로그래머는 스스로 문제를 일으킨다. 예를 들어, 동일한 범위 안에서는 다른 두 개념에 같은 이름을 사용하지 못한다.

  2. 검색하기 쉬운 이름을 사용하라

  • 개선 전
for (int j=0; j<34; j++){
    s += (t[j]*4)/5;
}
  • 개선 후
int realDaysPerIdealDay = 4;
const int WORK_DAYS_PER_WEEK = 5;
int sum = 0;
for (int j=0; j < NUMBER_OF_TASKS; j++){
  int realTaskDays = taskEstimate[j] * realDaysPerIdealDay;
  int realTaskWeeks = (realTaskDays / WORK_DAYS_PER_WEEK);
  sum += realTaskWeeks;
}

그냥 5를 사용한다면 5가 들어가는 이름을 모두 찾은 후 의미를 분석해 원하는 상수를 가려내야 한다. 하지만 WORK_DAYS_PER_WEEK라고 한다면 찾기 쉬운 코드를 작성할 수 있다.


  1. 인코딩을 피하라

자바 프로그래머는 변수 이름에 타입을 인코딩할 필요가 없다. 객체는 강한 타입이며, IDE는 코드를 컴파일하지 않고도 타입 오류를 감지할 정도로 발전했다. 따라서 이제는 헝가리식 표기법이나 기타 인코딩 방식이 오히려 방해가 될 뿐이다.


  1. 자신의 기억력을 지랑하지 마라 독자가 코드를 읽으면서 변수 이름을 자신이 아는 이름으로 변환해야 한다면, 그 변수 이름은 바람직하지 못하다. 이는 일반적으로 문제 영역이나 해법 영역에서 사용하지 않는 이름을 선택했기 때문이다.

  1. 클래스 이름

    클래스 이름과 객체 이름은 명사나 명사구가 적합하다.


  1. 메서드 이름

    메서드 이름은 동사나 동사구가 적합하다. 생성자를 중복 정의 할 때는 정적 팩토리 메서드를 사용한다. 메서드는 인수를 설명하는 이름을 사용한다.

  • 개선 전
Complex fulcrumPoint = new Complex(23.0);
  • 개선 후
  Complex fulcrumPoint = complex.FromRealNumber(23.0);

생성자 사용을 제한하려면 해당 생성자를 private로 선언한다.


  1. 기발한 이름을 피하라

    이름이 너무 기발하면 저자와 유머 감각이 비슷한 사람만, 그리고 농담을 기억하는 동안만, 이름을 기억한다. HolyHandGrenade라는 함수가 무엇을 하는지 알겠는가? 기발한 이름이지만, DeleteItems가 더 좋다. 재미난 이름보다 명료한 이름을 선택하라.


  1. 한 개념에 한 단어를 사용하라

    추상적인 개념 하나에 단어 하나를 선택해 이를 고수한다. 에를 들어, 똑같은 매서드를 클래스마다 fetch, retreive, get으로 제각각으로 부르면 혼란스럽다. 어느 클래스에서 어느 이름을 썻는지 기억하기 어렵다. 안타갑게도 현실에서는 이름을 기억하기 위해, 라이브러리를 작성한 회사나 그룹이나 개인을 기억해야 하는 경우가 많다. 안 그러면 헤더와 과거 코드 예제를 살피느라 엄청난 시간을 소모하기 십상이다.


2. 🤔 이해가 어려운 부분

🔍 질문하기

  1. 개념 또는 원칙의 이름
    • 어려웠던 부분
      해당 개념이 헷갈리거나 명확하지 않았던 점을 구체적으로 설명합니다.
    • 궁금한 점
      해당 개념이 어떤 원리로 동작하는지, 실무에서 어떻게 활용되는지 등을 질문 형태로 정리합니다.