김시용
1. 📌 핵심 개념 정리
✅ 요약하기
- 주석은 나쁜 코드를 보완하지 못한다.
나쁜 코드에 주석을 달지마라. 코드를 다시 짜라
- 주석은 최대한 자제하기
주석으로 설명한 부분 함수로 만들어 표현 가능한지 살펴보기- 주석으로 설명하는 부분 (개선 전)
if ((employee.flags & HOURLY_FLAG) && (employee.age > 65))
- 함수로 표현한 부분 (개선 후)
if(employee.isEligibleForFullBenefits())
- 좋은 주석
- 정보를 제공하는 주석 (반환값 설명, 형식 등)
- 의도를 설명하는 주석 (저자가 문제를 해결한 방식 부분 - 저자의 의도)
- 결과를 경고하는 주석 (수행 시간이 긴 부분)
- TODO 주석 (해야할 작업 나타냄 - 당장 구현 어려운 부분, 누군가에게 요청할 사항 등)
- 중요성을 강조하는 주석 (빼먹으면 안되는 부분)
- Javadocs (너무 남용하면 안됨)
- 나쁜 주석
- 중복하는 주석 (함수 및 변수 이름 등으로 충분히 파악 가능한 내용을 설명 ex. 모든 component에 달린 Javadocs 주석)
- 오해할 여지가 있는 주석 (매 상황에 엄밀한 주석을 달지 못하므로)
- 의무적으로 다는 주석 (과도한 Javadocs 주석)
- 주석으로 처리한 코드 (존재의 이유를 모름 -> 중요한건가? -> 다른 사람들이 지우기 주저함)
- HTML주석 (IDE에서조차 읽기가 어려움)
- 비공개 코드에서 Javadocs (배포용이 아닌 시스템 내부에 속한 클래스와 함수에는 Javadocs 생성할 필요 없음)
2. 🤔 이해가 어려운 부분
🔍 질문하기
- 오해할 여지가 있는 주석
- 어려웠던 부분
// this.closed가 true일 때 반환되는 유틸리티 메서드다.
this.closed가 true로 변하는 순간에 메서드는 반환되지 않는다.
this.closed가 true여야 메서드가 반환된다.
해당 예제로 나왔던 위에 적은 코드 설명과 주석 설명이 이해가 잘 안됨 - 궁금한 점
// this.closed가 true일 때 반환되는 유틸리티 메서드다. // 타임아우에 도달하면 예외를 던진다. public synchronized void waitForCloase(final long timeoutMillis) throws Exception { if(!closed) { wait(timeoutMillis); if(!closed) throw new Exception("MockResponseSender could not be closed"); } }
- 어려웠던 부분
- Javadocs 주석
- 어려웠던 부분
어느 정도로 달아야 하는가? 평소 프롬프트 요청을 통해 추가한 Javadocs 주석 정도는 괜찮은가? - 궁금한 점
적절한 함수명과 변수명 선정으로 코드를 읽으면 해당 함수의 기능을 파악할 수 있지만 Javadocs 주석이 해당 함수의 기능을 더 깔끔하게 설명하는 경우가 있는데 이러한 경우는 주석을 달아도 되는가?
- 어려웠던 부분
3. 📚 참고 사항
에라스토테네스의 체 알고리즘
소수를 효율적으로 찾는 알고리즘으로, 특정 범위 내에서 소수를 빠르게 판별하는데 사용
이 알고리즘은 배수를 제거하는 방식으로 시간 복잡도는 O(NlogN)
- 알고리즘 동작 과정
- 2부터 N까지의 모든 정수를 포함하는 배열을 만든다.
- 2부터 시작하여 남아 있는 수 중에서 가장 작은 수를 소수로 판별한다.
- 그 소수의 배수들을 모두 제거한다.
- 다음으로 남아 있는 가장 작은 수를 선택하고 3번 과정을 반복한다.
- N의 제곱근(√N)까지만 반복하면 된다.
∵ 두 약수가 모두 √N 보다 클 수는 없기때문에