대학생부터 회사원까지 모두의 성공적인 취업과 이직을 위해 기술 면접 자료를 천천히 정리하고자 합니다.
수정해야할 정보가 있다면 댓글로 정보를 나눠주시면 감사하겠습니다. 모두 취뽀하세요!!
Q. Java의 객체지향 프로그래밍(OOP)의 4대 특징은 무엇인가요?
4대 특징으로는 추상화, 캡슐화, 상속, 다형성입니다.
추상화 : 객체들이 가지는 공통적인 특성을 뽑아내어 정의하는 것
캡슐화 : 객체의 속성과 메서드를 하나로 묶고, 외부에서 직접 접근하지 못하고 함수를 통해서만 접근하게 함
상속 : 상위클래스가 가지는 속성과 메서드를 하위클래스가 물려받는 것
다형성 : 같은 메서드가 상황에 따라 다른 방식으로 작동하는 것
Q. 자바에서 final 키워드는 어떻게 사용되나요?
final 키워드는 변수, 메서드, 클래스에 사용될 수 있습니다.
변수에 final을 사용하면 초기화 이후 값을 변경할 수 없고, 메서드에 final을 붙이면 하위클래스에서 해당 메서드를 오버라이딩 할 수 없습니다. 클래스에 사용하면 해당 클래스는 상속될 수 없습니다.
Q. JVM의 역할과 주요 구성 요소를 설명해주세요.
자바 버추얼 머신의 약자로 자바 프로그램을 실행하는 가상 머신입니다.
주요 구성 요소로는 클래스로더, 메모리영역(Runtime Data Area), 실행엔진입니다. 클래스로더는 컴파일 된 바이트코드 파일을 로딩하고 링크합니다. 메모리영역은 객체 및 메서드의 데이터를 저장하고, 실행엔진은 로딩된 바이트코드를 실행하는 역할을 합니다.
Q. 자바의 컬렉션 프레임워크와 주요 인터페이스에 대해 설명해주세요.
컬렉션 프레임워크는 데이터를 효율적으로 저장하고 관리하기 귀한 구조입니다. 주요 인터페이스로는 List, Set, Map이 있습니다.
List : 순서가 있는 데이터 집합이고 중복을 허용합니다. (ArrayList, LinkedList, Vector)
Set : 중복을 허용하지 않으며 순서를 보장하지 않습니다. (HashSet, LinkedHashSet, TreeSet)
Map : 키, 값을 쌍으로 저장하며 키는 중복되지 않습니다. (HashMap, LinkedHashMap, TreeMap)
Q. 자바의 equals() 와 ==의 차이점은 무엇인가요?
equals() : object 클래스의 메서드이며 값을 비교합니다.
== : 객체의 주소 값을 비교합니다. 하지만 Primitive Type(기본형)에 대해서는 값을 비교하고, Reference Type(참조형)에 대해서는 주소 값을 비교합니다.
Q. 자바에서 String은 불변(Immutable)객체인 이유는 무엇인가요?
String이 불변객체인 이유는 보안성, 성능최적화, 동기화를 위해서입니다.
불변이기 때문에 문자열을 변경하려면 새로운 객체를 생성해야 합니다. 이런 특성 덕분에 해시 기반 컬렉션의 키로 안전하게 사용될 수 있습니다. 또한, 불변객체는 멀티스레드 환경에서 동기화 문제를 최소화합니다.
Q. 자바의 예외 처리에서 try-with-resources를 설명해주세요.
try-with-resources는 Autocloseable 인터페이스를 구현한 리소스를 자동으로 닫아주는 문법입니다.
try 블록 안에 리소스를 선언하면 블록이 끝난 후 자동으로 close() 메서드가 호출됩니다. 이는 코드의 가독성을 높이고 리소스 누수를 방지합니다. 주로 파일이나 데이터베이스 연결과 같은 리소스를 처리할 때 사용됩니다.
Q. 자바의 가비지 컬렉션 과정과 주요 알고리즘을 설명해주세요.
가비지 컬렉션은 사용되지 않는 객체를 메모리에서 제거하는 자동 메모리 관리 기법입니다.
주요 알고리즘에는 Mark&Sweep, Generation GC 등이 있습니다. Mark&Sweep은 사용 중인 객체를 마킹하고, 마킹되지 않은 객체를 제거하는데, 이 과정동안 STW(Stop The World) 현상으로 인해 스레드가 중지되어 성능 저하 이슈가 있습니다.
Generation GC는 객체를 Young(minor GC), Old(major GC) 영역으로 나누어 영역별로 GC를 최적화합니다.
Q. 자바에서 동기화(Synchronization)는 어떻게 처리하나요?
동기화는 멀티스레드 환경에서 데이터 일관성을 유지하기 위해 사용됩니다.
자바에서는 Synchronized 키워드를 사용해 메서드나 블록 단위로 동기화를 처리합니다. 동기화는 성능 저하를 유발할 수 있으므로 최소화하는 것이 중요합니다.