1. 자바의 메모리 영역에 대해 설명해주세요
자바의 메모리 공간은 크게 Method 영역, Stack 영역, Heap 영역으로 구분되고, 데이터 타입에 따라 할당된다.
2. 인터페이스와 추상클래스의 차이
추상 클래스는 클래스 내 추상 메소드가 하나 이상 포함되거나 abstract로 정의된 경우를 말하고, 인터페이스는 모든 메소드가 추상 메소드로만 이루어져 있는 것을 말한다.
공통점
차이점
3. Error vs Checked Exception vs Unchecked Exception
Error
Exception
Exception은 프로그램 실행 중에 개발자의 실수로 예기치 않은 상황이 발생
Checked Exception
UnChecked Exception
4. Reflection에 대해 설명해주세요
Reflection : 실행시간에 JVM의 메모리 영역에 저장된 클래스 정보를 꺼내와 활용하는 기술
[10분 테코톡] 파랑, 아키의 리플렉션,
[Java] 기본 생성자가 필요한 '진짜' 이유 (리플렉션 오해 바로 잡기!!!)
5. '==' vs equals
'==' : == 연산자는 비교하고자 하는 두개 대상의 주소값을 비교
equals : 비교하고자 하는 두개의 대상의 값 자체를 비교
6. Access Modifer에 대해 설명해주세요
Access Modifier : 변수 또는 메소드의 접근 범위를 설정해주기 위해서 사용하는 Java 의 예약어를 의미하며 총 네 가지 종류가 존재한다.
public : 어떤 클래스에서라도 접근이 가능하다.
protected : 클래스가 정의되어 있는 해당 패키지 내 그리고 해당 클래스를 상속받은 외부 패키지의 클래스에서 접근이 가능하다.
default : 클래스가 정의되어 있는 해당 패키지 내에서만 접근이 가능하도록 접근 범위를 제한한다.
private : 정의된 해당 클래스에서만 접근이 가능하도록 접근 범위를 제한한다.
7. IOC와 DI에 대해 설명해주세요
IOC(제어의 역전) : 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것
DI(의존성 주입) : 필요한 객체를 직접 생성하는 것이 아닌 외부로부터 객체를 받아서 사용하는 것
8. Spring Filter와 Interceptor에 대해 설명하고, 사용 예시를 설명해주세요.
필터
인터셉터
9. Controller로 들어오는 입력값에 대한 Validation 방법
스프링에서 유효성 검사를 수행하는 방법은 다양하다. 주로 validation 패키지의 애노테이션을 사용하여 입력값의 유효성을 검사한다. 대표적으로 @NotNull, @NotEmpty, @Min, @Max 등이 있다. 이러한 애노테이션들을 DTO 클래스의 필드에 적용한다. 컨트롤러 메서드에서 유효성 검사 결과를 처리하기 위해 BindingResult 객체를 활용할 수 있다. BindingResult는 유효성 검사 결과와 에러 메세지를 포함하고 있다. BindingResult 객체를 통해서 서비스 단에서 직접 클라이언트에게 예외가 발생하였음을 알릴 수도 있지만 유효성 검사가 필요한 메서드마다 일일이 예외처리 로직을 작성하는 것은 불필요하다. 따라서 보통 @ControllerAdvice를 이용한 전역 에러 핸들링을 통해 간편화 할 수 있다.
10. @Pathvariable vs @RequestParam vs @RequestBody vs @ModelAttribute
@PathVariable : 값을 하나만 받아올 수 있으며 보통 id 값을 전송할때 주로 사용함
@RequestParam : param 형식으로 간단한 데이터를 전송할때 주로 사용함, 주로 검색값, 페이지네이션(Page, Size)에서 사용됨
@RequestBody : Json 형식으로 데이터를 전송할때 주로 사용함
@ModelAttribute : 폼 형태의 데이터를 전송할떄 주로 사용함. MultipartFile 형식이 필요할때 주로 사용함, @Setter 필수