❓ 객체 지향이란 무엇인가요?(필수)
✅ 한줄 요약
객체 지향은 데이터와 기능을 객체로 묶어 관리하는 프로그래밍 패러다임입니다.
💬 부가 설명
객체 지향은 프로그램을 여러 개의 객체로 나누고, 각각의 객체가 메시지를 주고받으며 동작합니다. 유지보수와 확장에 유리합니다.
❓ 객체 지향적 설계 원칙 5가지에 대해 얘기해주세요.(필수)
✅ 한줄 요약
객체지향 5대 원칙은 SRP, OCP, LSP, ISP, DIP입니다.
💬 부가 설명
SRP는 하나의 책임만, OCP는 확장에 열려있고 수정에 닫혀있음, LSP는 자식은 부모로 대체 가능, ISP는 인터페이스 분리, DIP는 추상에 의존해야 함을 의미합니다.
❓ 객체지향 프로그래밍의 특징과 장점에 대해 설명하세요.(필수)
✅ 한줄 요약
재사용성과 유지보수성이 뛰어난 코드 작성이 가능합니다.
💬 부가 설명
캡슐화, 상속, 다형성 등의 특징을 통해 코드 중복을 줄이고 모듈화를 높이며 테스트가 쉬워집니다.
❓ 객체와 클래스의 차이는 무엇인가요?(필수)
✅ 한줄 요약
클래스는 설계도, 객체는 그에 따라 생성된 실체입니다.
💬 부가 설명
클래스는 객체 생성을 위한 청사진이고, 객체는 그 클래스로부터 생성된 인스턴스입니다.
❓ jvm의 메모리 구조에 대해 설명하세요(필수)
✅ 한줄 요약
JVM 메모리는 메서드 영역, 힙, 스택, PC 레지스터 등으로 나뉩니다.
💬 부가 설명
메서드 영역은 클래스 정보, 힙은 객체 저장, 스택은 지역 변수, 호출 정보, PC는 현재 실행 위치 저장에 사용됩니다.
❓ 클래스 변수(Static 멤버)와 인스턴스 변수(Non-static 멤버)의 차이에 대해 설명하세요
✅ 한줄 요약
static은 클래스당 1개, 인스턴스는 객체마다 별도로 존재합니다.
💬 부가 설명
static 변수는 클래스 로딩 시 하나만 생성되고 모든 인스턴스가 공유하며, 인스턴스 변수는 객체마다 별도입니다.
❓ 오버로딩과 오버라이딩의 차이점을 설명해주세요(필수)
✅ 한줄 요약
오버로딩은 메서드 이름 같고 파라미터만 다름, 오버라이딩은 부모 메서드 재정의입니다.
💬 부가 설명
오버로딩은 같은 이름의 메서드를 매개변수 다르게 정의, 오버라이딩은 부모의 메서드를 자식이 재정의하는 것이라 다릅니다.
❓ 접근 제어자에 대해 설명해주세요
✅ 한줄 요약
접근 제어자는 private, default, protected, public 네 가지입니다.
💬 부가 설명
접근 제어자는 캡슐화를 위해 사용되며, 접근 범위에 따라 private < default < protected < public 순입니다.
❓ 인터페이스와 추상 클래스의 차이점을 설명해주세요
✅ 한줄 요약
추상 클래스는 일부 구현 가능, 인터페이스는 모든 메서드가 추상입니다(Java 8 이전).
💬 부가 설명
추상 클래스는 공통된 기능을 가지며 일부 구현 가능, 인터페이스는 다형성 목적과 다중 구현에 용이합니다.
❓ static에 대해 설명해주세요(필수)
✅ 한줄 요약
static은 클래스에 소속된 공유 변수/메서드를 정의합니다.
💬 부가 설명
static은 객체 생성 없이도 접근 가능하고, 주로 공통 변수나 유틸 메서드 정의에 사용됩니다.
❓ primitive type & reference type에 대해 설명해주세요
✅ 한줄 요약
기본형은 값 저장, 참조형은 주소를 저장합니다.
💬 부가 설명
primitive는 int, double 등이고 값을 직접 저장, reference는 배열, 객체 등이고 힙 주소를 참조합니다.
❓ 업캐스팅과 다운캐스팅에 대해 설명해주세요
✅ 한줄 요약
업캐스팅은 부모 타입으로, 다운캐스팅은 자식 타입으로 변환입니다.
💬 부가 설명
업캐스팅은 자식 → 부모로 자동 변환되고, 다운캐스팅은 명시적으로 해야 하며, instanceof 체크가 필요할 수 있습니다.
❓ Error와 Exception의 차이에 대해 설명해주세요(필수)
✅ 한줄 요약
Error는 복구 불가, Exception은 예외 처리 가능합니다.
💬 부가 설명
Error는 시스템 레벨 문제로 복구가 어렵고, Exception은 try-catch로 처리 가능한 예외입니다.
❓ checkedException과 uncheckedException의 차이에 대해 설명해주세요
✅ 한줄 요약
checked는 컴파일 시, unchecked는 런타임에 예외가 발생합니다.
💬 부가 설명
IOException 같은 checked는 반드시 예외 처리가 필요하며, NullPointerException 같은 unchecked는 선택적으로 처리합니다.
❓ 얕은 복사와 깊은 복사의 차이에 대해 설명해주세요
✅ 한줄 요약
얕은 복사는 주소만 복사, 깊은 복사는 객체 내용까지 복사합니다.
💬 부가 설명
얕은 복사는 객체 주소만 복사되어 원본 변경이 영향을 주고, 깊은 복사는 내용까지 새롭게 복사해 독립적인 객체가 됩니다.
❓ String, StringBuilder랑 StringBuffer 차이에 대해 설명해주세요
✅ 한줄 요약
String은 불변, StringBuilder/StringBuffer는 가변입니다.
💬 부가 설명
String은 불변이라 변경 시 새로운 객체 생성, StringBuilder는 단일 스레드용, StringBuffer는 동기화된 멀티스레드용입니다.
❓ 제네릭(Generic)에 대해 설명해주세요(필수)
✅ 한줄 요약
제네릭은 타입 안정성과 재사용성을 위한 타입 매개변수입니다.
💬 부가 설명
제네릭은 타입 안정성과 코드 재사용성을 높여주는 문법으로, 컴파일 시 타입 체크가 가능해집니다.
❓ 어노테이션(annotation)에 대해 설명해주세요
✅ 한줄 요약
어노테이션은 메타데이터로 컴파일러나 프레임워크가 해석합니다.
💬 부가 설명
어노테이션은 @Override, @Autowired처럼 정보를 표시하거나 동작을 지정하며 리플렉션 등에 사용됩니다.
❓ 래퍼클래스(Wrapper Class)에 대해 설명해주세요
✅ 한줄 요약
래퍼 클래스는 기본형을 객체로 감싸는 클래스입니다.
💬 부가 설명
예: Integer는 int의 래퍼 클래스이며, 박싱/언박싱을 통해 기본형과 상호 변환이 가능합니다.
❓ Call By Reference VS Call By Value에 대해 설명해주세요
✅ 한줄 요약
자바는 Call By Value 방식이며, 참조형도 주소 값 복사입니다.
💬 부가 설명
자바는 기본형이든 참조형이든 모두 값이 복사되어 전달되며, 참조형은 주소값 자체가 복사되어 같은 객체를 가리킵니다.
❓ 자바의 Thread에서 start와 run의 차이에 대해 설명해주세요
✅ 한줄 요약
start는 새로운 스레드를 시작하고 run은 단순 메서드 호출입니다.
💬 부가 설명
start()는 JVM이 별도의 스레드를 만들어 run()을 호출하며, run()만 호출하면 멀티스레드가 아닌 단순 함수 실행이 됩니다.
❓ 병행과 병렬의 차이를 설명해주세요
✅ 한줄 요약
병행은 논리적 동시, 병렬은 물리적 동시 실행입니다.
💬 부가 설명
병행은 하나의 코어에서 여러 작업을 번갈아 수행하는 것이고, 병렬은 멀티코어에서 실제로 동시에 처리하는 것을 말합니다.
❓ 쓰레드 그룹과 특징에 대해 설명해주세요
✅ 한줄 요약
쓰레드 그룹은 여러 스레드를 하나의 단위로 관리하는 기능입니다.
💬 부가 설명
ThreadGroup을 사용하면 관련 스레드를 묶어 우선순위 조절, 일괄 interrupt 등이 가능하지만 잘 사용되진 않습니다.
❓ 일반 쓰레드와 데몬 쓰레드에 대해 설명해주세요
✅ 한줄 요약
데몬 스레드는 백그라운드에서 동작하며, 메인 스레드 종료 시 함께 종료됩니다.
💬 부가 설명
데몬 스레드는 주로 로그 기록, GC 등 보조 작업에 사용되며, 모든 사용자 스레드가 종료되면 자동으로 종료됩니다.
❓ 쓰레드의 상태에 대해 설명해주세요
✅ 한줄 요약
쓰레드 상태는 NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED가 있습니다.
💬 부가 설명
NEW → start 전, RUNNABLE → 실행 가능, BLOCKED/WAITING → 대기, TERMINATED → 종료된 상태를 의미합니다.
❓ Map, Set, List에 대한 설명해주세요(필수)
✅ 한줄 요약
Map은 키-값 쌍, Set은 중복 없는 집합, List는 순서 있는 데이터 구조입니다.
💬 부가 설명
Map은 키 중복 불가, 값 중복 허용 / Set은 중복 불가 / List는 순서 보장하며 중복 허용됩니다.
❓ String을 사용할 때 같은 크기에서 변경하게 된다면 주소값이 같은가요?
✅ 한줄 요약
String은 불변이라 값이 바뀌면 주소도 달라집니다.
💬 부가 설명
String은 불변이므로 값을 바꾸면 새로운 객체가 생성되어 다른 주소값을 갖게 됩니다.
❓ Array와 LinkedList의 차이가 무엇인가요
✅ 한줄 요약
Array는 인덱스 기반 고정 크기, LinkedList는 동적 연결 구조입니다.
💬 부가 설명
배열은 크기가 고정되고 접근이 빠르며, LinkedList는 삽입/삭제가 빠르지만 접근 속도는 느립니다.
❓ iterator는 무엇인가요?
✅ 한줄 요약
Iterator는 컬렉션을 순차적으로 탐색할 수 있는 인터페이스입니다.
💬 부가 설명
Iterator는 hasNext(), next()를 통해 순차 접근이 가능하며, remove()로 삭제도 가능합니다.
❓ 이진탐색트리(Binary Search Tree)에 대해 설명하세요
✅ 한줄 요약
BST는 왼쪽은 작고, 오른쪽은 큰 값이 위치하는 이진 트리입니다.
💬 부가 설명
BST는 이진 탐색에 유리한 자료구조로, 탐색, 삽입, 삭제 시 평균 O(log n)의 시간복잡도를 가집니다.
❓ Stack 과 Queue에 대해 설명하세요(필수)
✅ 한줄 요약
Stack은 LIFO, Queue는 FIFO 구조의 선형 자료구조입니다.
💬 부가 설명
Stack은 후입선출 구조로 재귀 호출 등에, Queue는 선입선출로 작업 처리 등에 활용됩니다.
❓ 해싱이란 무엇인가요?
✅ 한줄 요약
해싱은 키를 해시 함수로 해시 테이블의 인덱스로 변환하는 기술입니다.
💬 부가 설명
해싱은 데이터를 일정한 규칙으로 변환하여 저장/검색을 빠르게 할 수 있도록 해줍니다.
❓ 2의 보수법에 대해 설명해주세요
✅ 한줄 요약
2의 보수는 음수를 표현하기 위한 이진수 표기 방식입니다.
💬 부가 설명
2의 보수는 음수 표현 시 MSB를 1로 하고, 계산의 일관성을 유지하기 위해 사용됩니다.
❓ 부동소수점과 고정소수점에 대해 설명해주세요
✅ 한줄 요약
부동소수점은 소수 표현, 고정소수점은 고정된 자리수로 표현합니다.
💬 부가 설명
부동소수점은 가변 정밀도에 적합하고, 고정소수점은 일정한 소수점 자릿수만 사용하는 방식입니다.
❓ Garbage Collection이 무엇인지 설명해주세요
✅ 한줄 요약
GC는 사용되지 않는 객체를 자동으로 메모리에서 제거합니다.
💬 부가 설명
GC는 개발자가 직접 메모리 해제를 하지 않아도 되게 하며, 힙 메모리를 관리합니다.
❓ Stop The World에 대해 설명해주세요
✅ 한줄 요약
STW는 GC 중 모든 애플리케이션 스레드를 일시 정지시키는 현상입니다.
💬 부가 설명
STW는 GC나 기타 작업으로 인해 모든 스레드가 멈추는 시간으로, 지연의 원인이 됩니다.
❓ Weak Generational Hypothesis에 대해 설명해주세요
✅ 한줄 요약
약한 세대 가설은 대부분 객체는 젊은 세대에서 빠르게 사라진다는 가정입니다.
💬 부가 설명
대부분의 객체는 생명 주기가 짧아 Young 영역에서 빨리 회수된다는 가설로 GC 최적화에 사용됩니다.
❓ Reachability에 대해 설명해주세요
✅ 한줄 요약
Reachability는 객체의 유효성을 판단하기 위한 참조 가능성 평가입니다.
💬 부가 설명
Reachability는 GC가 객체를 수거할 수 있는지를 판별할 때 사용하는 개념으로, 루트에서의 경로 여부를 봅니다.
❓ Young 영역과 Old 영역에 대해 설명해주세요
✅ 한줄 요약
Young은 새 객체, Old는 오래된 객체가 저장되는 영역입니다.
💬 부가 설명
Young 영역은 Eden + Survivor로 새 객체 저장, Old는 살아남은 객체가 이동되는 곳입니다.
❓ Minor GC와 Major GC에 대해 설명해주세요
✅ 한줄 요약
Minor는 Young 영역 대상, Major는 Old 영역 대상 GC입니다.
💬 부가 설명
Minor GC는 빠르지만 잦고, Major GC는 느리지만 오래된 객체를 정리하는 데 사용됩니다.
❓ G1GC와 ZGC에 대해 설명해주세요
✅ 한줄 요약
G1GC는 병렬적이고 예측 가능한 GC, ZGC는 낮은 지연 시간의 GC입니다.
💬 부가 설명
G1GC는 힙을 여러 영역으로 나누어 GC를 병렬로 수행하며, 수 밀리초 수준의 예측 가능한 지연을 제공합니다. ZGC는 초고용량 힙에서도 수 밀리초 미만의 지연 시간을 유지하는 GC로, Stop-The-World 시간이 매우 짧습니다.