Java
1. String, StringBuffer, StringBuilder의 차이를 설명해주세요.
String은 불변의 속성을 가지며, StringBuffer와 StringBuilder는 가변의 속성을 가집니다.
StringBuffer는 동기화를 지원하며 멀티 쓰레드 환경에서 주로 사용하며, StringBuilder는 동기화를 지원하지 않아 싱글 쓰레드 환경에서 주로 사용합니다.
https://dev-coco.tistory.com/25
2. 오버라이딩(Overriding)과 오버로딩(Overloading)에 대해 설명해주세요.
오버라이딩은 상위 클래스에 있는 메소드를 하위 클래스에서 재정의 하는 것을 말하고, 오버로딩은 매개변수의 개수나 타입을 다르게 하여 같은 이름의 메소드를 여러개 정의하는 것입니다.
3. JVM의 역할에 대해 설명해주세요.
JVM은 스택 기반으로 동작하며, Java Byte Code를 OS에 맞게 해석해주는 역할을 하고 가비지 컬렉션을 통해 자동적인 메모리 관리를 해줍니다.
4. collection 설명해주세요.
자바에서 컬렉션 프레임워크(collection framework)란 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미합니다
즉, 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것입니다.
5. Call by Value 와 Call by Reference 차이에 대해 설명해주세요
call by value는 함수 호출 시 데이터 값을 복사해서 함수의 인자로 전달합니다. 따라서 메모리를 사용하게 되지만 원본 데이터의 변경 가능성이 없습니다. 반면에 call by reference는 함수 호출 시 데이터의 레퍼런스를 함수의 인자로 전달합니다. 원본 데이터의 변경 가능성이 있지만 메모리를 따로 할당할 필요없다는 차이점이 있습니다.
6. 인터페이스와 추상 클래스의 차이점에 대해 설명해주세요
이 둘의 공통점은 메서드의 선언만 있고, 구현 내용이 없다는 것입니다. (추상 메서드)
new 키워드를 통해 객체를 생성할 수 없으며, 상속받은 클래스가 반드시 선언된 추상 메서드를 구현하도록 한다는 것입니다.
차이점으로는 추상 클래스는 extends 키워드를 사용하여 상속하며, 다중 상속은 불가능합니다. 반면 인터페이스는 implements 키워드를 사용하여 상속하며, 다중 상속이 가능합니다.
7. GC가 필요한 이유와 동작 방법을 설명해주세요
GC란 ? 갈비지 컬렉터로 힙 영역에 사용하지 않는 객체들을 자동으로 제거해주는 역할을 합니다.
필요한 이유는 자바는 개발자가 직접 메모리를 해제해 줄수 없기 때문에 필요합니다.
동작 방식은 객체 생성 후 eden 영역에 위치한 후 minorgc로 사용하지 않는 객체 제거, 살아남으면 점점 뒤로 밀려난후 old 영역까지 밀리면 fullgc를 통해 제거됩니다.
8. java 컴파일 과정
사용자가 작성한 소스코드는 자바 컴파일러에 의해 바이트 코드로 변환됩니다. 이후 클래스 로더에 의해 JVM내로 바이트 코드가 로드됩니다. 실행 엔진에 의해 해석되고, 해석된 바이트 코드는 런타임 데이터 영역에 배치되어 실질적인 수행이 이루어집니다.
9. 제네릭 타입 변수로 기본 타입을 사용할 수 없는 이유에 대해 설명해주세요
제네릭은 참조 타입만 받을 수 있도록 정의되었기 때문입니다.
기본 타입을 참조 타입으로 변환하려면 래퍼 클래스를 사용해서 변환시켜줍니다.
Spring
1. 서블릿(Servlet)에 대해 설명해주세요.
자바를 기반으로 하는 동적인 웹페이지를 만들어줄 수 있는 프로그래밍 기술입니다.
동작 방식
https://dev-coco.tistory.com/163
참고
2. VO와 BO, DAO, DTO에 대해 설명해주세요.
DAO(Data Access Object) DB의 데이터에 접근을 위한 객체를 말합니다. (Repository 또는 Mapper에 해당)
BO(Business Object) 여러 DAO를 활용해 비즈니스 로직을 처리하는 객체를 말합니다. (Service에 해당)
DTO(Data Transfer Object) 각 계층간의 데이터 교환을 위한 객체를 말합니다. (여기서 말하는 계층은 Controller, View, Business Layer, Persistent Layer)
VO (Value Object) 실제 데이터만을 저장하는 객체를 말합니다.
3. 스프링 빈의 라이프 사이클에 대해 설명해주세요
먼저 IOC 컨테이너가 생성되고 @Configuration이 붙은 클래스나 xml 파일을 읽어서 빈을 등록하고, 해당 빈과 엮여 있는 정보들을 의존 관계 주입 시켜줍니다.
후에 초기화 콜백 메소드가 동작하고, 필요한 부분에서 빈을 사용한다음 소멸 콜백 메소드가 호출되어 빈이 소멸됩니다.
4. spring mvc 요청 흐름에 대해 설명해주세요.
먼저 요청 정보가 들어오면 디스패치 서블릿에 들어갑니다. 디스패치 서블릿에서 핸들러 매핑에 정보들을 위임하는데 거기서 요청 url 정보들을 보고 알맞는 컨트롤러로 넘겨줍니다. 컨트롤러에서 서비스 영역 등 비즈니스 로직을 수행하거나 보여줄 페이지의 모델앤뷰에 대한 객체를 디스패치 서블릿에 반환해줍니다. 다음에 뷰리조버 객체로 넘어가서 해당 View를 반환해줍니다
5. DI,IOC 설명해주세요.
DI 란 스프링이 다른 프레임워크와 차별화 되어 제공하는 의존 관계 주입 기능으로 객체를 직접 생성하는게 아니라 외부에서 생성한 후 주입시켜주는 방식입니다. IOC는 제어의 역전이라 하며 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미한다.
6. 빈 스코프에 대해 설명해주세요
빈이 존재할 수 있는 범위를 뜻합니다.
빈 스코프 종류에는 싱글톤, 프로토 타입, 웹 관련 스코프가 있습니다.
싱글톤(Singleton) : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다.
프로토타입(Prototype) : 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다.
웹 관련 스코프
request : 웹 요청이 들어오고 나갈 때까지 유지되는 스코프
session : 웹 세션이 생성되고 종료될 때까지 유지되는 스코프
application : 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프
7. JPA가 무엇인지 설명해주세요.
JPA란 자바 진영의 ORM 기술 표준으로 사용되는 인터페이스의 모음입니다. 스프링과 매핑(DB와 연결)을 해주기 위해 사용되는 프레임워크입니다.
8. DI를 하는 방법에 대해 설명해주세요
생성자 만들어서 주입하는 방법, 필드 주입, 수정자 주입(setter주입)을 사용해야 합니다..
9. AOP에 대해 설명해주세요.
AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다
10. Bean/component 어노테이션에 대해서 설명해주시고, 둘의 차이점에 대해 설명해주세요.
공통점 : 둘 다 IoC 컨테이너에 빈으로 등록하기 위한 방법.
차이점 : @Bean은 개발자가 컨트롤 못하는 외부 라이브러리, @Component는 직접 컨트롤하는 클래스