JaPark Bug World
item2. 생성자에 매개변수가 많다면 빌더를 고려하라. 본문
* 해당 내용은 인프런 이펙티브 자바 완벽 공략 1부 백기선님의 영상을 기준으로 작성하였습니다. https://inf.run/fnnRy
- 자바빈즈, 게터, 세터
- 자바빈(JavaBean) - (주로 GUI에서) 재사용 가능한 소프트웨어 컴포넌트
- https://download.oracle.com/otndocs/jcp/7224-javabeans-1.01-fr-spec-oth-JSpec/
- 그 중에서도 자바빈이 지켜야 할 규약
- 아규먼트 없는 기본 생성자
- getter와 setter 메소드 이름 규약
- Serializable 인터페이스 구현
// 2. getter, setter 메소드 이름 규약
// boolean type인 경우
private boolean selected;
// get이 아닌 is로 표기하는게 기본
public boolean isSelected() {
return selected;
}
-
- 하지만 실제로 오늘날 자바빈 스팩 중에서도 getter와 setter를 주로 쓰는 이유는?
- JPA나 스프링과 같은 여러 프레임워크에서 리플렉션을 통해 특정 객체의 값을 조회하거나 설정하기 때문입니다.
- 하지만 실제로 오늘날 자바빈 스팩 중에서도 getter와 setter를 주로 쓰는 이유는?
- 객체 얼리기 (freezing) - 임의의 객체를 불변 객체로 만들어주는 기능 (자바 스크립트에서 사용가능 자바x)
- Object.freeze()에 전달한 객체는 그 뒤로 변경될 수 없다.
- 새 프로퍼티를 추가하기 못함
- 기존 프로퍼티를 제거하지 못함
- 기존 프로퍼티 값을 변경하지 못함
- 프로토타입을 변경하지 못함
- strict 모드에서만 동작함
- 비슷한 류의 function으로 Object.seal()과 Object.preventextensions()가 있다.
- Object.freeze()에 전달한 객체는 그 뒤로 변경될 수 없다.
* 자바에서는 지원하지 않는 기능이니까 가볍게 듣고 흘려본다..
- 빌더 패턴 - 동일한 프로세스를 거쳐 다양한 구성의 인스턴스를 만드는방법
- 복잡한 객체를 만드는 프로세스를 독립적으로 분리할 수 있다.
- IllegalArgumentException - 잘못된 인자를 넘겨 받았을 때 사용할 수 있는 기본 런타임 예외
- 질문1) checked exception과 unchecked exception의 차이?
- checked exception은 RuntimeException을 상속하지 않고, 컴파일 시점에서 컴파일러 확인절차필요하므로 반드시 예외처리를 해야함. 대표적인 예외로 FileNotFonndException
- unchecked exception은 RuntimeException을 상속하며 런타임 단계에서 확인이 가능하므로 에러 처리를 강제하지 않는다. 대표적인 예외로 NullPointException, ArrayIndexOutOfBoundsException
- 질문2) 간혹 메서드 선언부에 unchecked exception을 선언하는 이유는?
- 어떠한 상황에 대해 클라이언트에게 명시적으로 알려줄 필요가 있을 때
- 질문3) checked exception은 왜 사용할까?
- 에러가 발생했을 때 클라이언트가 후속작업을 해야함을 알려줄 때?
- 과제1) 자바의 모든 RuntimeException 클래스 이름 한번씩 읽어보기
- 과제2) 이 링크에 있는 글을 꼭 읽으세요.
- 질문1) checked exception과 unchecked exception의 차이?
- 재귀적인 타입 한정을 이용하는 제네릭 타입
- 빌더를 사용하면 가변인수(varargs)매개변수를 여러 개 사용할 수 있다.
- 가변인수는 메소드에 오직 하나만 선언할 수 있다.
- 가변인수는 메소드의 가장 마지막 매개변수가 되어야 한다.
public class VarargsSamples {
// 가변인수는 하나만 선언 가능, 매개변수가 여러개 일때 가변인수는 마지막에 선언 해줘야 함.
public void printNums(int... nums) {
System.out.println(nums.getClass().getCanonicalName());
System.out.println(nums.getClass().getComponentType());
Arrays.stream(nums).forEach(System.out::println);
}
public static void main(String[] args) {
VarargsSamples samples = new VarargsSamples();
samples.printNums(5, 10);
}
}
// 가변인수는 하나만 선언 가능, 매개변수가 여러개 일때 가변인수는 마지막에 선언 해줘야 함.
public void printNums(String str, int... nums) {
System.out.println(nums.getClass().getCanonicalName());
System.out.println(nums.getClass().getComponentType());
Arrays.stream(nums).forEach(System.out::println);
}
'개발새발 > Effective Java' 카테고리의 다른 글
item3. private 생성자나 열거 타입으로 싱글턴임을 보증하라. (0) | 2024.03.28 |
---|---|
item3. private 생성자나 열거 타입으로 싱글턴임을 보증하라. (0) | 2024.03.28 |
item2. 생성자에 매개변수가 많다면 빌더를 고려하라. (0) | 2024.03.26 |
item2. 생성자에 매개변수가 많다면 빌더를 고려하라. (0) | 2024.03.26 |
Item1. 생성자 대신 정적 팩터리 메서드를 고려하라. (0) | 2024.03.26 |