Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- apollo-sandbox
- 강릉여행
- 루스틱
- 중사랑
- 송고버섯피자
- 여니브레드
- 오운완
- 플라스틱은 어떻게 브랜드의 무기가 되는가
- 한국걱정
- parquet
- apollo-server-v3
- 트럼프2.0시대
- 가람집옹심이
- 마법의연금굴리기
- schema-registry
- Zone2
- kafka-connect
- 저동하녹
- sparksql
- 달리기
- 마연굴
- 여행
- neovim
- 일권하는사회
- 런데이애플워치
- 런데이
- 잘쉬어야지
- 티지아이포럼
- deepseek
- 이코노미스트한국구독센터
Archives
- Today
- Total
해뜨기전에자자
자바로 배우는 리팩토링 입문 본문
읽는 중
3장 introduce assertion
코드 안에서 성립해야할 조건이라면 주석 대신 assert를 쓴다..
java -ea/-esa 로 활성 -da/-dsa로 비활성화.
-da를 해도 바이트코드는 남아있어서, unreachable statement써서 삭제해야함. 메모리를 절약해야하는 제한된 환경이나 클래스 파일 크기가 성능에 큰영향을 줄 때.. 라는데 별로 신경안써도 될 듯
assert expression: option; == if (!expr) throw new AssrtionError(option);
ex
private void updateAll() {
// 메서드를 호출한 스레드는 _lock 객체락을 취득해야만 함. 즉 syncrhonized(_lock) {} 내부에서만 호출할것!
// 따라서 Thread.holdsLock(_lock)은 true임이 틀림없음
// 이 경우에 이렇게 주석으로 남기지 말고 아래처럼!
assert Thread.holdsLock(_lock);
updateResult();
updateConsole();
if(_logger.isEnabled()) {
updateLogger();
}
}
* 7장 int로 객체를 구분하는 경우
* 분류 코드를 클래스로 치환
* int로 사용하면.. type safe가 아닌 문제가 생김. 분류 코드 범위 밖의 값이 사용됨. 다른 분류 코드와 착각함.
public enum ItemType {
BOOK(0),
DVD(1),
SOFTWARE(2);
private final int _typecode;
private ItemType(int typecode) {
_typecode = typecode;
}
public int getTypecode() {
return _typecode;
}
}
* 8장 분류 코드마다 동작이 다른 경우(1)
* 분류 코드를 하위 클래스로 치환
* 리팩토링을 해야하는지 여부는 기능 추가 예정이 있는지 중요.
* 9장 분류 코드마다 동작이 다른 경우(2)
* 분류 코드를 상태/전략 패턴으로 치환
* 상황: 분류 코드마다 객체가 다른 동작을 함. 동작을 switch문으로 나누고 있지만 분류 코드가 동적으로 변하므로 분류코드를 하위 클래스로 치환은 사용 불가.
* 동작을 switch문으로 나누고있지만 분류 코드가 동적으로 변하므로 분류 코드를 하위 클래스로 치환은 사용 불가할때.
public class Logger {
private enum State {
STOPPED {
@Override public void start() {
System.out.println("** START LOGGING **");
}
@Override public void stop() {}
@Override public void log(Strin ginfo) {
System.out.println("Ignoring: " + info);
}
};
LOGGING {
@Override public void start() {}
@Override public void stop() {
System.out.println("** STOP LOGGING **");
}
@Override public voidå log(Strin ginfo) {
System.out.println("Logging: " + info);
}
};
public abstract void start();
public abstract void stop();
public abstract void log(String info);
}
private State _state;
public Logger() {
setState(State.STOPPED);
}
public void setState(State state) {
_state = state;
}
public void start() {
_start.start();
setState(State.LOGGING)
}
public void stop() {
_start.stop();
setState(State.STOPPED)
}
public void log(String info) {
_state.log(info);
}
}
'개발 > java' 카테고리의 다른 글
이펙티브자바 3판 Effective java 3/E (0) | 2019.03.17 |
---|---|
gc archive (0) | 2018.03.21 |