본문 바로가기

☕️ JAVA/🦋 Effective Java12

매개변수가 유효한지 검사하기 이 글은 책 이펙티브 자바 3판 Item 49와 하단 Reference 참고했습니다. 잘못된 내용이 있다면 편하게 말씀해주세요 🙏🏻 메서드, 생성자들의 입력값이 특정 조건을 만족하길 바란다. 예를 들어 인덱스 값은 음수 X, 객체 참조는 null이 아니어야 한다. 보통 메서드, 생성자의 몸체가 실행되기 전에 매개 변수 확인한다면 잘못된 값이 넘어왔을 때 즉각적, 깔끔한 방식으로 예외를 던질 수 있다. 어떻게 유효한지 검사해야 할까? public, protected 메서드 보통, 몸체(주요 로직) 실행되기 전 상단에서 매개변수 값 확인 후 예외를 던진다 자바독에 @throws, 예외 경우를 작성한다. public 또는 protected 메서드는 패키지 개발자가 아닌 외부 사용자가 사용한다. 따라서 매개변수.. 2022. 3. 21.
생성자에 매개변수가 많다면 빌더 패턴을 써볼까?! (HTTPClient와 lombok @Builder) 🧰 이 글은 책 이펙티브 자바 3판 Item 2와 하단 Reference 참고했습니다. 잘못된 내용이 있다면 편하게 말씀해주세요 🙏🏻 목차 1. 점층적 생성자 패턴(Telescoping Constructor pattern) 2. 자바빈즈 패턴(JavaBeans pattern) 3. 빌더 패턴(Builder pattern) - 빌더 패턴 사용 예 : java.net +a) lombok의 @Builder를 사용한 빌더 패턴 사용 +a) 다른 언어의 빌더 패턴 한 줄 요약 : 생성자에 매개변수가 많다면 빌더 패턴(Builder pattern)을 써보자. 이전 글 객체 생성할 때 '생성자' 대신 '정적 팩토리 메서드'를 써볼까? 🏭 에서 생성자 대신 정적 팩토리 메서드를 사용하면 좋은 이유를 알아봤다. 그렇다면 생.. 2022. 2. 11.
표준 예외를 사용하자 이 글은 책 이펙티브 자바 3판 Item72과 하단 Reference 참고했습니다. 잘못된 내용이 있다면 편하게 말씀해주세요 🙏🏻 결론 자바 언어가 제공하는 표준 예외는 충분히 많다. 직접 만들지 말고 현재 상황에 맞는 표준 예외를 찾아 사용하자 이전 글 표준 라이브러리를 익히고 사용하자 에서 표준 라이브러리를 써야 하는 이유에 대해 알아봤다. 예외를 던질때도 마찬가지이다. 표준 예외를 사용하자. 왜? 읽기 쉬워진다. 메모리 사용량 감소, 클래스 적재 시간 감소, 예외도 직렬화에 포함되기 때문에 표준 사용이 좋다 자주 쓰이는 예외 예외 쓰임 예 IllegalArgumentException 허용하지 않는 값이 인수로 건네졌을 때 (null일 때 써도 되지만 따로) 나이를 나타내는 매개변수에 음수가 들어올 .. 2022. 2. 6.
자바에서 객체 복사는 clone()이 아닌 복사 생성자, 팩토리를 사용하자 이 글은 책 이펙티브 자바 3판 Item 13과 하단 Reference를 참고했습니다. 잘못된 내용이 있다면 편하게 말씀해주세요 🙏🏻 결론 객체를 복사할 때 특별한 경우(이미 Cloneable로 구현한 클래스로 사용하고 있을 때)를 제외하고 복사 생성자와 복사 팩토리를 사용하자 자바에서 객체를 복사할 때 어떻게 할까? 방법은 보통 2가지가 있다. 1. Object 객체의 clone() 메서드 + Cloneable 인터페이스 사용 2. 복사 생성자 또는 복사 팩토리 사용 1번의 경우 Object.clone() 메서드가 있다. 복사가 필요한 클래스에서 이를 오버 라이딩하여 사용한다. 이때 Cloneable 인터페이스를 받아 구현한다. Cloneable를 받지 않으면 clone()는 예외를 던지게 설계되어있기.. 2022. 2. 5.
자바의 동시성 프로그래밍, 가변 데이터를 동기화하는 3가지 방법(+a. 자바 기본 타입의 원자성에 대하여) 이 글은 책 이펙티브 자바 3판 Item78과 하단 Reference 참고했습니다. 잘못된 내용이 있다면 편하게 말씀해주세요 🙏🏻 주제 공유 중인 가변 데이터는 동기화해 사용하라 결론 가변 데이터는 공유하지 않는 게 좋다. 하지만 공유해야 한다면 가변 데이터의 읽고, 쓰는 동작에 동기화를 신경 써야 한다. 동기화 방법은 3가지(synchronized, Atomic class, volatile)가 있다. 적재적소에 사용하자. 목차 동기화란? synchronized Atomic class (java.util.concurrent.atomic) volatile 예제 StopThread +a 자바 기본 타입의 원자성에 대하여 동시성 프로그래밍에서 스레드 간 데이터를 공유할 때는 불변 데이터만 공유하거나 가변 데이.. 2022. 1. 24.