Filter는 요청과 응답에 대해 전반적인 전처리 및 후처리를 하기 위한 수단이다.
ArgumentResolver는 컨트롤러 메서드의 파라미터를 편리하게 주입받기 위해 사용된다.
객체
Bean 담는 곳
Bean으로 만들기
@Component 붙은 놈 찾아서 Bean으로 만들기 (@SpringBootApplication에 포함)
Bean=객체 (객체는 new 해서 생성하는 것)
그런데 @Service, @RestController 이런 것들이 붙은 클래스들은 new 해서 생성한 적이 없네?
컴포넌트들은 Bean(객체)으로 생성되서 IoC Container에 의해 관리되더라.
그리고 필요한 곳이 있으면 DI 되더라.
💡 왜 이렇게까지 하는데?

굳이 매번 new 해서 생성할 필요 없다
static 변수는 클래스 레벨에서 생성되므로 new 키워드로 객체를 생성하지 않아도 메모리에 할당됩니다. 이는 프로그램 실행 중 메모리의 클래스 영역(또는 메서드 영역)에 위치하며, 모든 인스턴스에서 공통으로 접근할 수 있습니다.
예를 들어, 다음과 같은 static 변수는 프로그램이 시작될 때 메모리에 올라가고, 모든 객체에서 같은 값을 공유하게 됩니다
public class Example {
public static int count = 0; // static 변수
public Example() {
count++; // 모든 인스턴스가 같은 count를 공유
}
}
final 키워드는 변수가 상수가 되도록 하거나, 클래스 또는 메서드의 변경을 방지할 때 사용됩니다.
static은 클래스 레벨에서 공유되며, 객체 간에 공유할 때 유용합니다.
final은 한 번 정의되면 변경되지 않도록 보장하는 데 사용됩니다.
static final 변수는 변경할 수 없는 상수가 되며, 클래스 레벨에서 공유된다.
User user = User.fromAuthUser(authUser)