[Spring] 예외처리 - 정적 팩토리 메서드
예외
- checked Error : class 파일로도 안 바뀌고 그 전에 찾아서 멈취버림. 컴파일이 안 됨. 사용자가 처리를 해줘야 함.
- unchecked Error : 사용자가 예외처리 안 해도 컴파일 되는 에러.
안해도 컴파일이 됨. 코드가 실행됐을 때 에러 발생. 어떠한 수를 0으로 나눌 때.
에러 : 개발자의 손을 떠나감.
1. 생성자가 오버로딩이 되는데 static으로 안 만들고 생성자로 만들면되지 않느냐
- 생성자는 객체를 만들거라는 의미 밖에 없음.
- 생성자로 오버로딩 하면 static 을 못함. 어찌됐든 객체를 만들어야 함.
- 정적 팩토리 메서드(Static Factory Method)
Static Method 를 통해 간접적으로 생성자를 호출하는 객체를 생성하는 방식.
직접적으로 생성자를 호출하지 않고, 별도의 객체 생성 역할을 하는 클래스 메서드를 통해 객체 생성 유도.
출처: https://inpa.tistory.com/entry/GOF-💠-정적-팩토리-메서드-생성자-대신-사용하자 [Inpa Dev 👨💻:티스토리]
private List<FieldError> fieldErrors;
private List<ConstraintViolationError> violationErrors;
// private 접근제어자를 받음. 동일 클래스 내에서만 받음. 다른 곳에서는 생성자를 호출할 수 없도록 함.
// 내부에서 쓰겠다는 의미.
private ErrorResponse(List<FieldError> fieldErrors,
List<ConstraintViolationError> violationErrors) {
this.fieldErrors = fieldErrors;
this.violationErrors = violationErrors;
}
// 생성자를 막아놓고, 불러와서 쓸 수 있음.
// 정적 팩토리 메서드.
public static ErrorResponse of(BindingResult bindingResult) {
// new를 통해 안 들고 쓸 수 있어야 해서 static 이 붙은 거임.
return new ErrorResponse(FieldError.of(bindingResult), null);
// bindingResult 를 넣어서 호출하고 있음.
}
// Set<ConstraintViolation<?>> 객체에 대한 ErrorResponse 객체 생성
public static ErrorResponse of(Set<ConstraintViolation<?>> violations) {
return new ErrorResponse(null, ConstraintViolationError.of(violations));
// 외부에서 에러를 of 라는 하나의 기능으로 만들고 싶은 거임.
// 발생하는 예외가 다를 때마다 다르게 생성자를 만드는 것임.
}
[Java] 생성자 대신 정적 팩토리 메서드를 고려하라
생성자 대신 정적 팩토리 메서드를 고려하라 생성자(constructor)는 객체 지향 프로그래밍에서 클래스의 인스턴스를 초기화하는 메서드이다. 주된 목적은 객체 생성시점에 필요한 초기화 작업을
olrlobt.tistory.com
2. of 를 쓰는 이유는?
- 네이밍 컨벤션.
- 이 메서드는 객체를 만드는 것임. 뒤에 들어오는 것과 연관되는 객체를 만들거에요. 라는 의미.
- 이름을 통합한 것임 . (~를 만드는)
- 뒤에 들어오는 파라미터를 따라서, 달라지는 객체를 만드는 구나. 라고 이해할 수 있음.
3. private 을 쓰는 이유. errorresponse 라는 객체를 만들면 다양한 타입의 exception 을 데려와서 수행하는 것.
- 나를 쓸 거면 of 를 써 .
- 다른 걸 감춰두고 하나만 쓸 수 있게 함.
- 길을 하나만 만들어 놓는 방법. 디자인 패턴에서는 팩토리 매서드 패턴.
- of 뿐만 아니라 다양한 정적 팩토리 메서드 네이밍 방식이 있음.
정적 팩토리 메서드 네이밍 방식
layout: posttitle: "Naming of Static Factory Method"date: 2021-08-25T14:25:52-05:00author: sangyeopcategories: Java매개변수를 하나 받아서 해당 타입의 인스턴스를 반환하는 형
velog.io