개발로그

Item 2 - 생성자에 매개변수가 많다면 빌더를 고려하라

Item2 - 생성자에 매개변수가 많다면 빌더를 고려하라 정적 팩터리 메서드와 생성자는 선택적 매개변수가 많을 때 적절히 대응하기 어렵다. 🤦‍♀️ 이러한 제약의 대안으로 프로그래머들은 다음과 같은 방법을 사용했다. 점층적 생성자 패턴 자바 빈즈 패턴 빌더 패턴 (1) 점층적 생성자 패턴 (확장의 어려움) public c...

Item 1 - 생성자 대신 정적 팩터리 메서드를 고려하라

정적 팩터리 메서드의 장점 👍 (1) 이름을 가질 수 있다. 생성자에 넘기는 매개변수와 생성자 자체만으론 반환될 객체의 특성을 제대로 설명하지 못한다. 반면, 정적 팩터리 메서드는 이름만 잘 지으면 반환될 객체의 특성을 쉽게 묘사할 수 있다. [생성자] : BigInteger(int, int, Random) [정적 팩터리 메서드]...

Item 90 - 직렬화된 인스턴스 대신 직렬화 프록시 사용을 검토하라

Serializable을 구현하는 순간, 생성자 이외의 방법으로 인스턴스를 생성할 수 있게 된다. 이전 아이템에서도 계속 언급되지만, 버그와 보안 문제가 일어날 가능성이 커진다. 하지만 직렬화 프록시 패턴을 사용하면 이 위험을 크게 줄일 수 있다. 직렬화 프록시 패턴 public final class Period implements Serial...

Item 87 - 커스텀 직렬화 형태를 고려하라

클래스가 Serializable을 구현하고 기본 직렬화 형태를 사용한다면 다음 릴리스 때 버리려 한 현재의 구현에 발이 묶이게 된다. 먼저 고민해보고 괜찮다고 판단될 때만 기본 직렬화 형태를 사용하라. 기본 직렬화 형태는 유연성, 성능, 정확성 측면에서 신중히 고민한 후 합당할 때만 사용해야 한다. 객체의 물리...

Item 85 - 자바 직렬화의 대안을 찾아라

직렬화 객체 직렬화 : 자바가 객체를 바이트 스트림으로 인코딩(직렬화)하고, 그 바이트 스트림으로부터 다시 객체를 재구성(역직렬화)하는 매커니즘이다. 직렬화된 객체는 다른 VM에 전송하거나 디스크에 저장한 후 필요할 때 역직렬화하여 사용할 수 있다. 자바의 직렬화 “자바의 직렬화는 위험하다.” 보이지 않는 생성자, API와 구...

Item 84 - 프로그램의 동작을 스레드 스케줄러에 기대지 말라

이식성을 높이는 방법 정확성이나 성능이 스레드 스케줄러에 따라 달라지는 프로그램이라면 다른 플랫폼에 이식하기 어렵다. 🤦 (1) 실행 가능한 스레드의 평균적인 수를 프로세스 수보다 지나치게 많아지지 않도록 하라. 그래야 스케줄러가 고민할 거리가 줄어든다. 실행 준비가 된 스레드들은맡은 작업을 완료할 때까지 계속 실행되도록 만들어라...