📝 자바 면접 질문 리스트
1 .== 와 equals() 차이점은?
== 는 기본형에서 값을 , 참조형에서는 주소(레퍼런스)를 비교합니다.
equals()는 기본적으로 == 와 같지만, String 같은 클래스에서 내용 비교를 하도록 오버라이딩되어 있습니다.
2 .hashCode()와 equals()의 관계는?
equals()가 같다면 hsahCode()같아야 한다.
하지만 hashCode()같다고 equals 가 반드시 같은것은 아니다.
-> 이유
"equals()가 true인데 hashCode가 다르면, 해시 기반 컬렉션에서 같은 객체가 서로 다른 버킷에 저장돼 버려 검색이 불가능해 집니다.
반대로 hashCode가 같다고 equals가 반드시 true일 필요는 없는 이유는, 해시 함수가 유한한 값만 리턴하기 때문에 서로 다른 객체라도
같은 hashCode를 가질 수 있기 때문입니다.
3 .Java에서 String이 불변(Immutable)인 이유는?
핵심 답변 : "Java에서 String 은 보안, 캐싱(재사용), 스레드 안전성을 위해 불변(Immutable)하게 설계되었습니다.
이유 1: 보안 Security
- String은 URL, 파일 경로, DB 커넥션 ,네트워크 주소 등 중요한 값을 담는 데 자주 쓰입니다.
- 만약 가변(Mutable)하다며느 누군가 중간에 값을 바꿔버릴 수 있어 보안 문제가 발생합니다.
이유 2: 캐싱(Caching) & 문자열 풀(String Pool)
- java는 String Pool을 운영해서, 같은 문자열 리터럴은 메모리를 공유합니다.
- hello 같은 리터럴이 여러 개 있더라도 , 한번 만든 객체를 재사용합니다.
- 만약 가변이라면 , 한 곳에서 바꿔버리면 모든 참조가 영향을 받아 캐싱이 불가능해 집니다.
이유 3: 스레드 안정성(Thread-safety)
- 여러 스레드가 동시에 같은 문자열을 참조해도, 값이 절대 바뀌지 않으니 동기화 처리 없이 안전합니다.
- 즉 멀티스레드 환경에서 공용 데이터로 쓰기 적합합니다.
이유 4: 해시 값 불변(Hash 안정성)
- String은 해시 기반 자료구조의 Key로 자주 쓰입니다.(예: HashMap<String, Object>)
- 만약 문자열 값이 변경된다면, hashCode 값도 바뀌어버려서 올바르게 검색할 수 없게 됩니다.
불변성이 보장되니까 한 번 저장된 Key는 절대 변하지 않고 안전하게 조회 가능합니다.
++++자바에서 String의 "불변"이란?
String 객체 내부의 값(char 배열)은 한 번 생성되면 절대 변경되지 않는다는 뜻이에요
즉 , 우리가 변수를 다시 할당하는 건 객체를 새로 만들어서 변수 참조를 바꾸는 것이지, 기존 String 객체의 내부 값이
바뀌는 게 아닙니다.
4 .String, StringBuilder, StringBuffer의 차이점은?
면접 답변용 요약
- String은 불변(Immutable)이라는 문자열 수정 시마다 새 객체를 만들어 성능에 불리합니다
- StringBuilder는 가변(Mutable)이라는 같은 객체에서 문자열을 수정할 수 있고, 단일 스레드 환경에서 빠릅니다.(비동기)
- StringBuffer는 StringBuilder와 동일하지만, synchronized로 동기화를 지원해 멀티스레드 환경에서 안전합니다.(동기)
5 .final, finally, finalize의 차이는?
-final(키워드 ,제어자)
변수 -> 값을 한 번 할당하면 변경 불가(상수)
메서드 -> 오버라이딩 불가
클래스 -> 상속 불가
즉, 수정 불가능하게 만든다는 의미
- finally(예외 처리 구문)
try-catch-finally 구문에서 사용
예외 발생 여부와 상관없이 항상 실행되는 블록
보톤 리소스 해제(close, disconnerct) 에 사용
- finalize() (Object 메서드)
- GC(가비지 컬렉터)가 객체를 회수할 때 호출되는 메서드
- Object 클래스에 정의되어 있고, 필요하면 오버라이드 가능
- 하지만 지금은 Deprecated(사용 비권장) - > 대신 try-with-resources나 AutoCloseable사용
면접 답변"
- final 은 변수, 메서드, 클래스에 붙어서 변경/상속/오버라이딩을 막습니다.
- finally는 예외 처리 구문에서 항상 실행되는 블록입니다.
- finalize() GC가 객체를 회수하기 직전에 호출되는 메서드지만 지금은 Deprected라 잘 쓰지 않습니다.
6 .Wrapper 클래스와 Primitive 타입의 차이? (AutoBoxing / UnBoxing)
Primitve 타입(기본형)
- java에서 가장 기본적인 자료형(메모리에 값 자체를 저장)
예: int, double, char, boolean 등(총 8개)
가볍고 빠르지만 객체가 아니므로 컬랙선(List, Map) 등을 담을 수 없습니다.
Wrapper 클래스(래퍼 클래스)
- 기본형을 객체(Reference Type)로 감싼 클래스
- 예: Integer ,Double, Character, Boolean 등
- 컬렉션 , 제네릭 같은 곳에서 사용 가능
- 메서드 기능( 예: Integer.parseInt("123"))제공
AutoBoxing/ UnBoxing
- AutoBoxing: 기본형 -> Wrapper 객체로 자동 변환
- UnBoxing: Wrapper 객체 -> 기본형으로 자동 변환
면접 답변용 요약
- Primitive 타입은 값 자체를 저장하는 기본형이고, Wrapper 클래스는 이를 객체로 감싼
참조형입니다.
7 .static 키워드의 의미와 활용 예시?
static 키워드의 의미
- static 클래스에 속한다(객체가 아닌 클래스 차원에서 관리)
- 객체 생성 없이도 접근 가능(클래스명.멤버)
- 메모리에 딱 1 개로만 로드되고 모든 인스턴트가 곻유
면접 답변용 요약
- static은 객체가 아닌 클래스에 속하는 멤버를 정의할 때 사용합니다.
- 객체 생성 없이 사용할 수 있고, 모든 인스턴스가 공유합니다.
- 주로 상수, 유틸리티 메서드, 공용 데이터 관리, 클래스 초기화 블록등에 활용됩니다.
8. interface와 abstract class 차이?
1. 공통점
- 직접 객체 생성 불가(new 불가)
- 설계도 역활(추상화 제공)
- 하위 클래스가 반드시 구현해야 하는 메서드 정의 가능
면접 답변용 요약
- 인터페이스는 규약(Contract)을 정의해서 반드시 구현하도록 강제하는 용도이고, 다중 상속이 가능합니다.
- 추상 클래스는 공통 기능 + 확장을 위해 쓰이고 , 일반 메서드/ 변수도 가질 수 있습니다.
- 즉, 인터페이스는 무엇을 할 수 있는가, 추상 클래스는 어떻게 동작하는가의 기본 구현을 줄대 사용합니다.
9. 오버로딩(Overloading) vs 오버라이딩(Overriding) 차이?
오버로딩이란
- 같은 클래스 안에서 메서드 이름은 같고, 매개변수(파라미터)만 다르게 정의
- 반환 타입은 달라도 되지만 , 매개변수 시그니처가 반드시 달라야 함
- 컴파일 시점에 결정(Compile-time Polymorphism)
오버라이딩이란
- 상속 관계에서 부모 클래스의 메서드 자식 클래스가 재정의
- 메서드 이름, 매개변수, 반환 타입 모두 같아야 함
- 접근 제한자는 부모보다 좁게 쓸 수 없음
- 런타임 시점에 결정 (Runtime Polymorphism)
면접 답변용 요약
- 오버로딩은 같은 클래스 안에서 매개변수를 다르게 해서 같은 이름의 메서드를 여러 개 정의하는 것이고,
컴파일 시점에 결정됩니다.
- 오버라이딩은 상속 관계에서 부모 메서드를 자식이 재정의하는 것이고, 런타임시점에 호출 메서드가 결정됩니다.
Checked Exception과 Unchecked Exception의 차이?
10. 객체지향 (OOP) -> Object Oriented Programming
핵심 정의
프로그램을 객체(Object)들의 상호작용으로 구성하는 프로그래밍 패러다임.
-현실 세계의 개념(사람, 자동차, 주문 등)을 추상화해서 속성(필드) 과 행동(메서드)으로 표현
장점 : 재사용성, 유지보수성, 확장성이 뛰어남
11. OOP 4대 특징
1. 캡슐화(Encapsulation)
- 데이터(필드)와 메서드를 하나의 객체로 묶고, 외부에서 직접 접근하지 못하게 보호하는 것
- 접근 제어자(Private, public, protected)를 통해 정보 은닉
예 ;; 은행 계좌 클래스에서 balnce를 private으로 두고, deposit()/ withdraw() 메서드로만 접근
2. 상속(inheritance)
- 부모 클래스의 속성과 메서드를 자식 클래스가 물려받아 재사용
- 코드 중복 제거, 확장 요이
3. 다형성(Polymorphism)
- 같은 메서드 호출이더라도 객체 타입에 따라 다른 동작을 하는 것
- 오버로딩(Overloading: 정적 다형성), 오버라딩(Overriding: 동적 다형성)
4. 추상화(Abstraction)
- 공통된 속성과 동작만 뽑아내서 필수적인 부분만 정의하는 것.
- 추상 클래스(abstract class), 인터페이스(interface)로 표현
면접 답변용 요약
"객체지향은 프로그램을 객체들의 협력으로 구성하는 방식입니다.
4대 특징으로는 캡슐화(정보 은닉), 상속화(재사용), 다형성(같은요청 다른 동작) ,추상화(공통특징만 정의)가 있습니다.
12. 객체지향 프로그래밍의 4대 특징(캡슐화, 상속, 다형성, 추상화)을 설명해보세요.
캡 슐화는 데이터와 메서드를 하나의 객체로 묶고 , 외부에서 직접 접근하지 못하게 보호하는 것
같은 메서드 호출이더락도 객체 타입에 따라 다른 동작을 하는 것
부모 클래스의 속성과 메서드를 자식 클래스가 물려받아 재사용
코드 중복 제거
13. 다형성(Polymorphism)이란 무엇인가요?
같은 메서드 호출이더라도 객체 타입에 따라 다른 동작을 하는것
- 오버로딩, 오버라이딩()
14. this와 super 키워드 차이점은?
this는 현재 객체 자기 자신을 가리킴
- 주로 세 가지 상황에서 사용
1. 멤버 변수와 지역 변수를 구분할 때
2. 현재 객체를 메서드의 매개변수롤 전달할 때
3, 같은 클래스의 다른 생성자를 호출할대 (this)
super 키워드
현재 객체의 부모 클래스(상위 클래스)를 가리킴
- 두가지 주요 용도
1. 부모 클래스의 멤버(변수, 메서드)에 접근할 때
2. 부모 클래스 생성자를 호출할때 (super())
면접 답변용 요약
this는 현재 객체 자신을 가리키고, super는 부모 클래스를 가리킵니다.
this()는 값은 클래스의 다른 생성자를 , super()는 부모 생성자를 호출할때만 사용합니다.
15.상속(Inheritance)과 컴포지션(Composition)의 차이점은?
- 상속(Inheritance) -> 기존 클래스를 확장해서 새로운 클래스를 만드는 것(is - a 관계 )
- 컴포지션(Composition) -> 다른 객체를 포함해서 기능을 재사용하는 것(has-a 관계)
비유
상속(Inheritanco) -> 붕어빵 틀을 확자애서 새로운 붕어빵틀을 만드는 것
컴포지션(Comporison) -> 붕어빵에 팥 대신 슈크림을 넣는 식으로 다른 재료를 조합하는 것
면접 대답
"상속은 is-a 관계로, 부모의 기능을 자식이 그대로 물려받아 코드 재사용이 쉽지만 결합도가 높아져 부모 변경이 자식에세 영향을 미치는 단점이 있습니다.
반면, 컴포지션은 hsa-a 관계로, 다른 객체를 포함해 기능을 사용하는 방식입니다. 결합도가 낮아 유지보수와 확장이 용이하며, 최근 객체지향 설게 원칙에서는 상속보다는 컴포지션을 더 권장하는 추세입니다.
16.인터페이스 다중 구현과 다중 상속 금지의 이유는?
한줄 저의
자바는 클래스 다중 상속을 금지 -> "다이아몬드 문제(Diamond Problem)" 때문에
자바는 인터페이스 다중 구현을 허용 -> 메서드 시그니처만 정의되어 있어서 충돌 위험이 적기 때문.
면접 답변 예
"자바에서 클래스 다중 상속은 다이아몬드 문제와 같은 모호성을 일으킬 수 있기 때문에 금지되어 있습니다. 대신 인터페이스 다중 구현은 메서드 선언만 포함하므로 충돌 위험이 적고, 필요한 경우 구현 클래스에서 명식적으로 해결할 수 있어 허용됩니다. 따라서 자바는 단일 상속 + 다중 구현 방식을 통해 코드 재사용성과 유연성을 동시에 보장합니다.
17. SOLID 원칙 중 하나만 설명해보세요.
SOLID 원칙은 객체지향 설계의 5가지 핵심 원칙입니다.
예시 답변: 단일 책임 원칙(SRP, Single Responsibility Principle)
정의
"클래스는 단 하나의 책임만 가져한다.(SRP, Single Responsibility Principle)
즉 한 클래스가 바뀌는 이유는 하나여야한다.
3️⃣ 컬렉션 (Collections & Generics)
18. List, Set, Map의 차이점은?
List -> 순서 0 , 중복 0 저장방식(순서대로 index 기반)저장
Set -> 순서 x, 중복x 집합처럼 저장()
Map -> key-value 구조 , key는 중복 x, Value는 중복 0 Map(Key- Value)
면접 답변 예시
"List는 순서가 있고 중복을 허용하는 자료구조입니다.
Set은 순서를 보장하지 않거, 중복을 허용하지 않는 자료구조입니다
Map은 Key-Value 쌍으로 데이터를 저장하며 Key는 중복이 불가능하고 Value는 중복이 가능합니다.
19. HashMap과 Hashtable 차이?
HashMap -> 최신 비동기(스레드 안전 X), 빠른 성능
Hashtable -> 구식, 동기화(스레드 안전 0), 성능 느림
"HashMap과 Hashtable은 둘 다 Key-Value 자료구조지만 , Hashtable은 오래된 클래스라 모든 메서드가 동기화되어
있어 스레드 안전하지만 성능이 떨어집니다. 반면 HashMap은 스레드 안전하지 않지만 성능이 더 좋아 실무에서 주로 사용합니다. 멀티 스레드 환경에서는 ConcurrentHashMap을 사용하는 것이 권장됩니다.
20 .HashMap vs ConcurrentHashMap 차이?
HashMap -> 단일 스레드 환경에서 빠른 성능, 스레드 안전x
ConcurrentHashMap -> 멀티스레드 환경에서도 안전하게 동작하는 HashMap 대체제
면접 답변 예시
"HashMap은 단일 스레드 환경에서 빠르지만, 멀티스레드 환경에서는 동기화가 없어 안전하지 않습니다.
ConcurrentHashMap은 내부적으로 락을 세분화해 병렬성을 높여, 멀티스레드 환경에서 안전하면서도 성능을
보장합니다. Hashtable이 전체 맵에 락을 거는 방식라 성능이 떨이즌 반면, ConcurrentHashMap은 분할 락을 사용해 성능이 훨씬 우수합니다."
21.ArrayList와 LinkedList 차이점은?
ArrayList -> 배열 기반, 인덱스로 빠르게 접근 가능 삽입/삭제는 느림
- 내부적으로 동적 배열 사용
- 데이터가 연속된 메모리에 저장됨
- 인덱스로 접근 -> 0(1)
- 중간에 삽입/삭제 시 데이터 밀기 -> 0(n)
LinkedList -> 노드 기반(이중 연결 리스트), 삽입/삭제 빠름 ,접근은 느림
- 내부적으로 이중 연결 리스트 (Doubly Linked List) 사용
- 각 노드가 앞/뒤 노드의 참조를 가짐
순차 탐색 -> O(n)
삽입/삭제는 참조만 바꾸면 됨 -> 0(1)(노드 위치 찾는 데는 0(n))
면접 답변 예시
"ArrayList는 배열 기반이라 인덱스로 빠른 접근이 가능하지만, 중간 삽입/삭제가 느립니다. 반면 LiskedList는 이중 연결 리스트 기반이라 삽입/삭제는 빠르지만, 특정 위치 접근은 느립니다. 따라서 조회 위주라면 ArrayList 삽입/삭제가 많다면 LinkedList를 사용하는 것이 적합합니다."
22. Vector와 ArrayList 차이?
한줄 정의
ArrayList -> 동기화 x (멀티스레드에서 안전하지 않음), 최신 & 빠른 성능
Vector -> 동기화 0 (스레드 안전) 하지만 성능은 ArrayList보다 느림
공통점
- 내부적으로 배열 기반
- 순서 유지 ,중복 허용
- 인덱스로 접근 가능
- 삽입/ 삭제 시 배열을 이동해야 해서 0(n)
면접 답변 예시
"Vector와 ArrayList 둘 다 배열 기반 리스트지만, Vector는 모든 메서드가 동기화 되어 있어 멀티스레드 환경에서 안전한 대신 성능이 느립니다. 반면 ArrayList는 동기화가 없어서 단일 스레드 환경에서 빠르게 동작합니다. 현대 자바에서는 Vector 대신 Arraylist를 사용하고, 멀티스레드 환경에서는 Concurrent 컬렉션을 사용하는것이 일반적입니다.
fail-fast vs fail-safe 이터레이터 차이?
java 컬렉션 & 동시성 면접에서 자주 나옴 핵심 ---> 컬렉션 순회(iteration)할 때, 구조가 바뀌면 어떻게 동작하느냐 이다
한줄 정의
Fail-Fast lterator -> 컬렉션 순회 중 구조(추가/삭제) 변경 시, 바로 ConcurrentModificationException발생
Fail-Sage iterator -> 구조 변경 시에도 예외 없이 동작( 병도의 복사본이나 동시성 메커니즘 사용)
면접 답변 예시
"java 컬렉션의 기본 이터레이터는 Fail-Fast로 동작하여, 순회 도중 구조가 변경되면, ConcurrentModificationException을 발생시켜 동기화 문제를 조기에 알립니다. 반면 ,ConcurrentHashMap이나 CopyOnWriteArrayList 같은 컬렉션은 Fail-Safe 이터레이터를 제공하여 순회 도중 수정이 가능하지만 , 내부적으로 복사본을 사용하므로 실시간 변경은 반영되지 않고
성능이 다소 떨어질 수 있습니다.
Generics의 장점과 제한 사항은?
장점
1. 타입 안정성(Type Safety)보장
- 잘못된 타입 삽입을 컴파일 시점에 차단
2. 형변환(Casting)불필요
- 제네릭 덕분에 object -> 원하는 타입 캐스팅 안 해도 됨
3. 재사용(Reusability)
- 같은 코드로 여러 타입을 처리 가능
Generics 제한 사항 (Limitations)
1. 기본 자료형(Primitive) 사용 불가
- int, double, 같은 primitive 타입은 직접 사용 불가
- 대신 integer, Double 같은 Wrapper 클래스 사용해야 함
2. 런타임 타입 소거(Type Erasure)
-제네릭은 컴파일 시점에만 타입 체크 -> 런타임엔 타입 정보가 지워짐
- 즉 List<String>과 List<Integer>는 런타임에 동일하게 List
3.instanceof 사용불가
4. static 변수/메서드에 제네릭 타입 파라미터 사용 불가
5. 배열 생성 불가
면접 답변 에시
"Generics는 컴파일 시 타입 안정성을 보장하고 , 불필요한 형변환을 줄이며 코드 재상용성을 높이는 장점이 있습니다.
하지만 런타임 시 타입 정보가 지워지는 Type Erasure방식 때문에 primitive 타입 사용이 불가능하고, 제네릭 배열 생성이나
instanceof검사 같은 제약이 존재합니다.
4
4️⃣ 멀티스레드 ( 프로세스(Process)와 스레드(Thread)의 차이?
synchronized 키워드의 역할?
volatile 키워드의 의미?
wait(), notify(), notifyAll()의 차이?
데드락(Deadlock)은 무엇이며, 방지 방법은?
ExecutorService와 Thread의 차이?
Java Memory Model(JMM)에 대해 아는 대로 설명해주세요.
5
5️⃣ JVM & 메모리 관리
JVM(Java Virtual Machine)의 구조 (ClassLoader, Runtime Data Area, Execution Engine)?
Java의 메모리 영역(Heap, Stack, Method Area 등)을 설명하세요.
GC(Garbage Collection)의 원리와 종류(Stop-the-world, Minor GC, Major GC)?
GC 튜닝을 위해 어떤 옵션을 사용할 수 있나요?
JIT(Just In Time) 컴파일러의 역할은?
ClassLoader의 종류와 동작 방식은?
6
6️⃣ 자바와 DB / 네트워크
JDBC와 Connection Pool의 개념은?
트랜잭션(Transaction)의 4대 특성(ACID)?
Statement vs PreparedStatement 차이?
ORM(Object Relational Mapping)이란?
직렬화(Serialization)와 역직렬화(Deserialization)?
REST API와 SOAP의 차이?
7
7️⃣ 실무 / Spring 관련 (면접에서 자주 나옴)
DI(Dependency Injection)와 IoC(Inversion of Control)란?
Spring Bean의 생명주기(Lifecycle)?
@Component, @Service, @Repository, @Controller 차이?
AOP(Aspect Oriented Programming)의 개념?
JPA와 MyBatis의 차이?
N+1 문제란 무엇이며, 해결 방법은?
DTO, VO, Entity의 차이점은?
'낙서장' 카테고리의 다른 글
| 基本的なEXCEL (0) | 2026.02.15 |
|---|---|
| 신입 개발자 기술면접 질문 모음 (자바/개념) (3) | 2025.08.22 |
| 클래스를 설계할때 어떤 순서로 작성해가야 하는가에 대한 나의 생각 (4) | 2025.08.08 |
| 업무를 편하게 하자!!!!!!!!!! (0) | 2025.07.18 |
| (네트워크의 이해)철학으로 네트워크를 이해하기 私のネットワーク世界の整理 (5) | 2025.07.11 |