1. 클래스
- 클래스는 객체를 보관, 객체를 꺼낼 수 있다.
- 더 이상 필요하지 않을 때, 객체를 반환할 수 있는 저장소/웨어하우스
public class LottoNumber {
private static final int MINIMUM_NUMBER = 1;
private static final int MAXIMUM_NUMBER = 45;
private static final LottoNumber[] NUMBERS = new LottoNumber[MAXIMUM_NUMBER + 1];
private int value;
static {
IntStream.rangeClosed(LottoNumber.MINIMUM_NUMBER, LottoNumber.MAXIMUM_NUMBER)
.forEach(number -> NUMBERS[number] = new LottoNumber(number))
;
}
private LottoNumber(final int value) {
this.value = value;
}
public static LottoNumber from(final int value) {
validate(value);
return NUMBERS[value];
}
}
2. 상속
public class Document {
public int length() {
return this.content().length;
}
public byte[] content() {
// 문서의 내용을
// 바이트 배열로 로드한다
}
}
public class EncryptedDocument extends Document {
@Override
public byte[] content() {
// 문서를 로드해서,
// 즉시 복호화하고,
// 복호화한 내용을 반환한다.
}
}
- 상위 클래스 내부 구현이 달라지면, 하위 클래스가 오동작할 수 있다.
3. 조합
1. 가변 객체
public class Cash {
private int dollars;
public void mul(final int factor) {
this.dollars *= factor;
}
}
2. 불변 객체
public class Cash {
private final int dollars;
public Cash mul(final int factor) {
return new Cash(this.dollars * factor);
}
}
- 유지보수성 향상 : 실패 원자성 가짐
'공부 > Java' 카테고리의 다른 글
DTO와 VO 비교 (0) | 2022.03.17 |
---|---|
Stream.forEach와 Collection.forEach의 차이 (0) | 2022.03.17 |
테스트하기 좋은 메서드 만들기 (인터페이스 분리) (0) | 2022.03.14 |
Optional<T> (0) | 2022.03.13 |
스트림(Stream) - 3 (스트림 연산) (0) | 2022.03.13 |
댓글