김시용
1. 📌 핵심 개념 정리
✅ 요약하기
- 의도 분명히 밝히기
주석을 통한 설명이 필요한 변수명 짓지 말기.
-> 코드의 함축성이 문제이다. 코드 맥락이 코드 자체에 명시적이여야 한다.
- 그릇된 정보 피하기
일관성이 떨어지는 변수명 표기법 피하기
특히, 'l' (알파벳 소문자 엘), 'O' (알파벳 대문자 오) 등의 사용 피하기
- 의미 있게 구분하자
noise word (a, an, the 등), 의미가 비슷한 단어 (info, data 등) 피하기
- 검색하기 쉬운 이름 사용
변수, 상수 이름이 길어져도 찾기 쉬우면 ok!
- 인코딩을 피하라
변수명에 인코딩할 정보는 아주 많으므로 유형이나 범위 정보까지는 인코딩하기 피하기
- 멤버 변수에 m_ 이라는 접두어 붙이지 않기
- 인터페이스에 I라는 접두어 붙이지 않기
- 클래스, 메서드 이름
- 클래스 이름 : 명사나 명사구 사용 (동사 사용x)
- 메서드 이름 : 동사나 동사구 사용
* 생성자 중복정의 -> 정적 팩토리 메서드 사용
2. 🤔 이해가 어려운 부분
🔍 질문하기
- 생성자 중복 정의
- 어려웠던 부분
정적 팩토리 메서드 통해서 생성자 중복 정의 하는 법
- 궁금한 점
실제 사용 방법과 예시 살펴보기
- 의미 있는 맥락 추가하기
- 어려웠던 부분
함수 하나에 여러 기능을 넣지 말고 작은 조각으로 쪼개기 (맥락 추가하기)
- 궁금한 점
함수 하나당 기능을 하나만 넣는 것이 맥락을 파악하기 편한데 기능의 단위가 궁긍하다.
- 함수 이름이 기능을 명확하게 설명해야 한다
- 하나의 함수는 하나의 역할만 수행해야 한다
- 중복 코드를 제거하고 재사용 가능해야 한다
- 다른 함수에 과도하게 의존하지 않도록 해야 한다.
3. 📚 참고 사항
📢 논의하기
- 관련 자료 공유
- 개선 전 : 생성자 이름이 똑같으므로 어떤 의미인지 명확하지 않음 -> 생성자 개수 늘면 관리 힘듦
class Person {
private String name;
private int age;
// 첫 번째 생성자
public Person(String name) {
this.name = name;
this.age = 0; // 기본 나이 설정
}
// 두 번째 생성자 (오버로딩)
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
- 개선 후 : 각 생성자 의미가 명확, new연산자 사용하지 않으므로 불필요한 객체 생성 방지
class Person {
private String name;
private int age;
// private 생성자로 직접 객체 생성 방지
private Person(String name, int age) {
this.name = name;
this.age = age;
}
// 정적 팩토리 메서드 1: 이름만 설정하는 경우
public static Person withName(String name) {
return new Person(name, 0); // 기본 나이 설정
}
// 정적 팩토리 메서드 2: 이름과 나이를 설정하는 경우
public static Person withNameAndAge(String name, int age) {
return new Person(name, age);
}
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
public class Main {
public static void main(String[] args) {
Person p1 = Person.withName("Alice"); // 기본 나이 0
Person p2 = Person.withNameAndAge("Bob", 25); // 이름 + 나이 설정
System.out.println(p1); // Person{name='Alice', age=0}
System.out.println(p2); // Person{name='Bob', age=25}
}
}
No Comments