이펙티브 자바 2

[이펙티브 자바] 적시에 방어적 복사본을 만들라 (Item. 50)

방어적으로 프로그래밍하라 항상 우리는 클라이언트가 우리의 불변식을 깨뜨리려고 혈안이 되어 있다고 가정하고 방어적으로 프로그래밍해야 한다. 아래와 같은 클래스를 불변식으로 만들려고 의도하고 코드를 작성하였다고 해보자. 위 클래스는 불변인가? 그렇지 않다. 기본적으로 final은 기본형인 int와 같은 타입은 변경이 불가능하도록 한다. 하지만 Date와 같은 가변 클래스는 변경이 가능하게 된다. 그 말인 즉슨 Date를 final로 선언하여도 Date 내부의 값을 변경할 수 있다는 뜻이다. 이러한 이유로 Date보다는 자바 8 이후에 등장한 Java.time.Instant나, LocalDateTIme과 같은 불변으로 정의된 클래스를 사용하는 것이 좋다. 하지만 현재 위 코드의 상태로 클라이언트로부터 Peri..

Java 2024.03.21

[이펙티브 자바] 매개변수가 유효한지 검사하라. (Item 49)

원칙 1. 오류는 가능한 한 빨리 잡아야 한다 메서드와 생성자의 매개변수는 대게 어떤 조건을 만족하기를 바란다. 예를 들면, 파라미터로 들어오는 인덱스의 값은 음수이면 안된다거나, 주민등록번호는 13자리인 것처럼 말이다. 이러한 제약은 문서화해야하며, 메서드 몸체가 시작되기 전에 검사해야한다. 만약 그러지 않고 오류를 발생한 즉시 잡지 못했다면, 오류를 감지하기 어려워지고, 발생 지점을 찾기 힘들어진다. 매개변수 검사를 제대로 하지 않았을 때 파라미터의 조건을 만족하지 못하게 되면 실패 원자성을 어기는 결과를 초래할 수 있다. 실패 원자성이란, 호출된 메서드가 실패하더라도 해당 객체는 메서드 호출 전 상태를 유지해야하는 성질을 말한다. 이렇게 매개변수를 제대로 하지 못하면 아래와 같은 상황이 벌어질 수 ..

Java 2024.02.27