Closed segyong56 closed 1 year ago
이펙티브 자바
메서드의 이름을 신중히 짓자 -> 같은 패키지에 속한 다른 이름들과 일관되게 짓는게 최우선 목표임
편의 메서드를 너무 많이 만들지 말자 -> 자주 쓰일 경우에만 별도의 약칭 메서드를 만들고 확신이 서지 않으면 만들지 말자
매개변수 목록은 짧게 유지하자 -> 4개 이하, 같은 타입의 매개변수 여러개가 연달아 나오는 경우는 특히 해로움 -> 여러 메서드로 쪼개기, 매개변수 여러개를 묶어주는 도우미 클래스를 만들기, 두 기법을 혼합한 빌더패턴을 메서드 호출에 응용하기
public void calculate(int num1, int num2, int num3, int num4) {
int sum = num1 + num2;
int multi = sum * num3;
// 등등
// 매개변수 타입이 같으면 헷갈려서 실수 할 수 있음 -> 실수하면 값이 다르게 바뀜
}
매개변수 타입으로는 클래스 보다는 인터페이스가 낫다
//이거 보다는
public void calculate(ArrayList<Integer> nums) {
}
//이게 낫다
public void calculate(List<Integer> nums) {
}
boolean 보다는 원소 2개짜리 열거 타입이 낫다
//이것 보다는
if(x == true) {
return 1;
} else {
return 2;
}
//이렇게 하면 public enum Num {ONE, TWO} if(x == Num.ONE){ return 1; }else { return 2; } //추후 THREE가 생길 수 있음 public enum Num {ONE, TWO, THREE} if(x == Num.ONE){ return 1; }else if(x == Num.TWO){ return 2; } else { return 3; }
의미있는 이름
의미있는 맥락을 추가하라
private void printGuessStatics(char candidate, int count){
String number;
String verb;
String pluralModifier;
if(count == 0){ number = "no"; verb = "are"; pluralModifier = "s"; }else if(count == 1){ ... }else{ ... } ... print(); }
- 현재 메서드에선 아무리 변수의 이름을 명확하게 짓더라도 읽는 프로그래머들의 해석이 중요해 집니다.
- 그 이유는 변수의 명칭을 넣지만 분기별로 그 변수의 값이 매번 달라지기 때문입니다.
```java
public class printGuessStatics{
String number;
String verb;
String pluralModifier;
public String make(char candidate, int count){
createPluralDependentMessagePart(count);
return print();
}
public void createPluralDependentMessagePart(int count){
if(count == 0){
thereAreNoLetter();
}else if(count == 1){
thereAreOneLetter();
}else{
thereAreManyLetter();
}
}
public void thereAreNoLetter(){
number = "no";
verb = "are";
pluralModifier = "s";
}
...
}
오브젝트
다형성이란 동일한 메시지를 수신했을 때 객체의 타입에 따라 다르게 응답할 수 있는 능력 대표적인예 ) 오버라이딩, 오버로딩
합성이란 다른객체의 인스턴스를 자신의 인스턴스 변수로 포함해서 재사용하는 방법
상속은 두 가지 관점에서 안좋은 영향을 미친다.
결론. 합성은 상속이 가지는 두 가지 문제점을 모두 해결한다. - 대부분의 설계에서는 상속과 합성을 함께 사용한다.
퇴근 후 독서