[Spring] 예외 처리 - ExceptionResolver
·
Java | Spring
ExceptionResolver스프링 부트의 ExceptionResolver 우선 순위ExceptionResolver설명 우선 순위ExceptionHandlerExceptionResolver@ExceptionHandler 처리1ResponseStatusExceptionResolver상태 코드가 적용된 예외 처리2DefaultHandlerExceptionResolver스프링 내부 기본 예외 처리3 ExceptionHandlerExceptionResolver`@ExceptionHandler` 가 붙은 메서드를 통해 예외 처리를 할 수 있도록 설정하는 클래스`@ExceptionHandler` 사용법 : 메소드에 어노테이션을 선언하고 해당 메소드에서 처리하고 싶은 예외를 지정 → 해당 예외가 발생하면 이 메소드..
[Spring] @ControllerAdvice, @RestControllerAdvice
·
Java | Spring
@(Rest)ControllerAdvice 란모든 @Controller 가 붙은 빈에서 사용하는 `@ExceptionHandler`, `@InitBinder`, `@ModelAttribute` 가 붙은 메소드들을 한번에 처리할 수 있도록 도와주는 기능해당 컨트롤러 내에서 정의 시 해당 컨트롤러에서만 적용전역적으로 사용하고 싶을 때 `@(Rest)ControllerAdvice` 를 활용@ExceptionHandler`@Controller` 가 붙은 빈에서 발생한 예외를 잡아서 하나의 메서드에서 처리@ControllerAdvice // 모든 컨트롤러에서 발생하는 exception 처리public class GlobalHandler { @ExceptionHandler(CustomException.clas..
[Spring] @RequestParam, @RequestBody, @ModelAttribute
·
Java | Spring
@RequestParam1개의 HTTP 요청 파라미터를 받기 위해 사용required 기본값 true → 반드시 해당 파라미터가 전송되어야 함반드시 필요하지 않다면 required = false 설정defaultValue 옵션으로 기본값 설정 가능@RequestBody클라이언트가 전송하는 JSON (application/json) 형태의 HTTP 바디를 자바 객체로 변환`@RequestBody` 로 받는 데이터는 스프링의 MessageConverter 중 하나인 MappingJackson2HttpMessageConverter 를 통해 자바 객체로 변환됨 (ObjectMapper 클래스 사용)@ModelAttribute클라이언트가 전송하는 폼(form) 형태의 HTTP 바디와 요청 파라미터들을 생성자나 S..
[Java] 제네릭 (Generics)
·
Java | Spring
Generics// 제네릭 이전ArrayList numberList = new ArrayList();numberList.add(10); // OknumberList.add("20"); // String 을 추가해도 컴파일 에러가 발생하지 않음 // ClassCastException (형변환 에러) 발생Integer i = (Integer)list.get(1); // 형변환 필요// 제네릭 이후ArrayList tvList = new ArrayList();tvList.add(new TV()); // Ok// tvList.add(new Audio()); // 컴파일 에러 (Tv 타입 외의 타입은 저장 불가)Tv tv = tvList.get(0); // 형변환 생략 가능컴파일 시 타입을 체크해주는 ..
[Java] 다형성과 캐스팅
·
Java | Spring
다형성다형성 : 하나의 인터페이스로 여러 타입의 객체를 다룰 수 있게 하는 개념동일한 인터페이스 : 여러 클래스가 동일한 인터페이스나 부모 클래스를 구현하여 서로 다른 방식으로 동작할 수 있게 함오버라이딩 : 자식 클래스에서 부모 클래스의 메서드를 재정의하여 다르게 동작런타임 다형성 : 실행 시간에 객체의 실제 타입에 따라 적절한 메서드가 호출코드 재사용성 : 하나의 인터페이스로 다양한 객체를 다룰 수 있어 코드의 유연성과 재사용성을 높임업캐스팅: 부모 클래스 타입의 참조변수를 사용해 자식 클래스 객체를 참조함으로써 다양한 객체를 일관되게 처리→ 더 유연하고 확장 가능하며 유지보수가 쉬운 구조를 가질 수 있게캐스팅의 종류업 캐스팅업캐스팅 (Upcasting) : 자식 클래스 타입의 객체를 부모 클래스 타..
[Java] Builder 패턴과 @Builder 어노테이션
·
Java | Spring
Builder 패턴빌더 패턴은 복잡한 객체를 생성하는 방법을 정의한 클래스와 표현하는 방법을 정의한 클래스를 별도로 분리하여 서로 다른 표현이더라도 이를 생성할 수 있는 동일한 절차를 제공하는 패턴기존의 팩토리 패턴, 추상 팩토리 패턴의 문제점많은 파라미터를 넘겨줄 때 타입, 순서 등에 대한 관리가 어려워져 에러 발생 확률 높아짐경우에 따라 필요없는 파라미터에 대해서 일일이 null 값을 넘겨줘야 함생성해야 하는 sub class 가 무거워지고 복잡해지면 팩토리 클래스 또한 복잡해짐빌더 패턴 도입별도의 Builder 클래스를 만들어 필수 값에 대해서는 생성자를 통해 입력받고 선택 값에 대해서는 메소드를 통해 step-by-step 으로 값을 입력 받은 후 `build()` 메서드를 통해 최종적으로 하나의..
[Java] Synchronized / ReentrantLock 차이
·
Java | Spring
스레드 동기화스레드 동기화 개념스레드 동기화 : 멀티 스레드 환경에서 여러 스레드가 한 공유 자원에 동시에 접근하지 못하도록 막는 것임계 영역 : 공유 데이터가 사용되어 동기화가 필요한 부분상호 배제 : 임계 영역이 오직 한 스레드에 의해 배타독점적으로 사용되도록 하는 기술임계 영역에 먼저 진입한 스레드가 임계 영역의 실행을 끝낼 때까지 다른 스레드가 진입하지 못하도록 보장스레드 동기화의 필요성예시 : 재고가 1개인 제품에 대해 동시다발적으로 주문이 10건 인입되었을 때, 남은 재고가 1개임에도 불구하고 주문 10건이 모두 성공하는 상황이 발생→ 공유 데이터가 훼손되는 문제 발생 synchronized 키워드Synchronized (임계 영역 설정과 락 권한)public synchronized void ..