Spring/예외처리

[Spring] 예외처리 - 정적 팩토리 메서드

한비Skyla 2024. 6. 13. 19:34

예외 

 - 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