본문 바로가기
공부/Java

클래스와 인스턴스

by JERO__ 2022. 3. 15.

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

댓글