본문 바로가기

SPRING

(spring)Assert Class


4. Spring Assert class



이번에는 Spring Framework 에서 제공하는 Assert 클래스이다. 아래 문서를 참고 하였다.

[springframework Assert class](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/Assert.html)

패키지 위치는 org.springframework.util.Assert

`public abstract class Assert extends Object` public 접근 제어자에 java.lang.Object를 상속하는 추상 클래스라고 한다.

지금까지 포스팅 했던

junit의 Assert 클래스는 public class, Assertions 클래스는 public final class 인데 스프링프레임워크의 Assert 클래스는 public abstract이다.

추상클래스인걸 보아 직접 인스턴스화 하지 말고 사용하라는 의도가 있는것 같다.

다음으로

해당 클래스는 검증하는데 도움이 되는 유틸리티 클래스이고 런타임시 오류를 빨리 발견하게 하는데 좋다.
예를 들어, 메서드에서 매개변수에 null이 허용되지 않을 경우 사용할수 있고, 불변성을 보호할 수 있다.


configuration properties이 아닌 매개변수의 유효성 검사에 사용하고, 프로그래머의 오류를 확인한다. 이런 메서드에서는 기본값으로 되돌아 가는 것이 의미가 없다.
(이 부분에서 configuration properties는 db정보나 포트 등 프로그램 실행 전에 설정되어야 하는 정보들을 말한다. 보통 오류가 있을시 프로그램 구동시 오류가 발생됨.)
(기본값으로 되돌아 가는 것이 의미가 없다는 말은 null이 매개변수로 허용되지 않는 메서드에서 null이 들어왔을때 해당 변수를 기본값으로 초기화해서 넘기지 말고 - 애초에 null 을 값으로 받으면 안되는거니까 - 확실하게 exception을 발생시켜 오류를 해결하고 넘어가라는 뜻으로 보인다.)


이 클래스는 jUnit Assertions 라이브러리와 비슷하고, 오류 발생시 IllegalArgumentException이 throw된다.


또 다음으로 생성자는 public Assert() 이며 메서드는 전부 static이다.

지금까지 Assert 라는 이름을 가진 클래스들을 보면서 이래서 공식문서를 보는것이 중요하구나 느껴졌다. 각각의 차이가 있었다.


정리해보자면 (java의 assert는 예약어라 제외)

JUnit4 Assert JUnit5 Assertions Springframework Assert
클래스 public class Assert
public final class Assertions public abstract class Assert Object
생성자 protected protected public
메서드 static static static

(Junit)Assert 클래스는 public class 이지만 생성자가 protected이기 떄문에 외부에서 인스턴스화 하지 못한다. 하지만 상속은 가능하여 상속해서 내가 직접 기능을 추가한 커스텀 클래스를 만들어 사용 가능하다. 외부 인스턴스화가 불가능하기 때문에 메서드는 static이며 static이어서 편의성, 성능, 불변성에 있어서 이점을 가진다.

(spring)Assert 클래스는 public abstract class 이며 생성자는 public이다. abstract 클래스여서 외부 인스턴스화는 불가능하고 상속하여 커스텀 하는것은 가능하다. abstract가 이 부분을 확실히 명시해주는 부분이다. 메서드는 역시 static이다.

(Junit)Assertions 클래스는 public final class 이며 생성자도 protected 이다. final 클래스라 상속이 불가능하며 생성자가 protected라 외부 인스턴스화가 불가능하다. 메서드 또한 static이다. final 클래스인것을 보아 기존의 Assert보다 더 불변성을 보장할수 있는 유틸리티 클래스로 설계한게 아닐까 싶다.

'SPRING' 카테고리의 다른 글

하루종일 화가났던 Querydsl gradle 설정 오류에 대하여..  (0) 2024.07.22
(Junit5)Assertions Class  (1) 2024.07.08
(Junit4)Assert Class  (0) 2024.07.08
(Java)assert  (0) 2024.07.04
의존성 주입 1  (0) 2024.04.29