객체지향 프로그래밍의 4가지 원칙과 각각의 의미를 설명해주세요.
캡슐화, 상속, 추상화, 다형성
- 캡슐화: 객체 내부에 값을 감추고 내부 메서드 구현을 통해 객체 안정성 확보
- 상속: 기존 클래스의 속성과 기능을 물려받아 새로운 클래스 정의
- 추상화: 공통된 특성을 추출하여 개념이나 기능을 간추려 표현
- 다형성: 캍은 메서드나 클래스가 다양한 방법으로 동작
JVM의 구조와 동작 방식에 대해 설명해주세요.
JVM 은 자바 버추얼 머신의 약자입니다. 자바 파일을 바이트 코드로 변환하고 이를 해석하고 동작시킵니다. 내부적으로 가비지 컬렉션을 구현하고있어, 사용하지 않는 메모리를 효과적으로 관리할 수 있습니다.
자바소스코드 작성 -> 자바 컴파일러가 자바 소스코드를 클래스파일, 바이트코드로 변경 -> JVM이 실행되면 클래스 로더가 필요한 클래스를 찾아 메모리에 로드 -> 검증, 준비, 해결.. 링킹과정을 거침 -> main 메서드를 호출함 -> 인터프리터가 바이트코드를 한 줄씩 기계어로 번역하며 실행
- 자바 코드 작성 -> 자바 컴파일러가 자바 파일을 클래스파일로 변경
- 클래스로더가 필요한 클래스를 메모리에 로드
- 링킹 과정(검증, 준비, 해결)을 거침
- main 메서드 실행
- 프로그램 실행 중 GC(가비지 컬렉션)와 JIT(Just-In-Time) 컴파일러 작업 진행
- 프로세스 종료
자바의 접근 제어자(public, protected, default, private)에 대해 설명해주세요.
public: 모든 곳에서 접근 가능
protected: 같은 패키지 + 다른 패키지의 하위 클래스
default: 같은 패키지 내에서만
private: 같은 클래스 내에서만
JVM 메모리 구조와 가비지 컬렉션(GC)에 대해 설명해주세요.
힙영역: 객체와 배열이 저장됨, 가비지 컬렉션의 주 대상, 모든 스레드가 공유함
스택영역: 메서드 호출시 생성되는 프레임 저장, 지역 변수, 리턴 값 등 임시데이터만 저장, 메서드가 종료되면 자동 삭제되기 때문에, gc 대상이 아님
스태틱 영역: 클래스 구조, 정적 변수, 상수 풀, 메서드 데이터 저장, 모든 스레드가 공유
가비지 컬렉션
힙 영역에서 발생함. 힙영역에 사용되지 않는 필드와 메서드는 가비지 컬렉터에 의해 수거의 대상이됨. 기본 동작 방식: Mark(표시) → Sweep(제거) → Compact(압축, 선택적)
추상클래스와 인터페이스의 차이에 대해서 설명해주세요.
추상클래스는 상속, 인터페이스는 구현의 영역. 이말은, 추상클래스는 1개까지만 상속이 가능, 인터페이스는 여러가지 구현 가능. 추상클래스는 내부에 변수 선언 가능 인터페이스는 불가능, 추상 클래스는 생성자 정의가능, 인터페이스는 불가능
오버로딩과 오버라이딩의 차이점을 설명해주세요.
오버로딩은 같은 이름의 메서드를 같은클래스 내부에서 매개변수 변경하며 여러번 구현, 가장 많이사용하는 예시는 생성자 오버로딩.
오버라이딩은 추상화된 메서드를 구현하게되는 경우 오버라이딩 오버라이딩의 가장 많이 사용되는 예시는 추상화된 메서드를 구현할때.
Java에서 제네릭(Generic)의 용도와 장점은 무엇인가요?
제네릭은 어떠한 변수가 들어오던 간에 처리가 가능하도록 설계가 가능함. 객체에 어떤 데이터가 들어올 지 모르겠다면 제네릭을 통해 다양하게 대처할 수 있도록 구현 가능
타입 안정성, 코드 재사용성 측면에서 유용하게 사용이 가능함
불변 객체(Immutable Object)란 무엇이며 왜 사용해야 하나요?
불변 객체는 말 그대로 변하지 않는 객체를 의미함. 변하지 않는 객체는 중간에 값이 바뀔 위험이 아예 없음.
그렇기 때문에 불변객체를 사용하는 것이 데이터의 이동 혹은 사용시에 안전하게 객체 내부의 값을 지킬수 있는 캡슐화 와도 연관이 되어있다고 볼 수 있음.
만약 불변 객체의 내부의 값을 변경하고 싶다면, 내부에 메서드를 구현하되 값을 변경하는것이 아니라, 값이 변경된 새로운 객체를 생성하여 사용함
가장 널리 알려진 불변객체는 String, Integer, BigDecimal 정도가 됨.
컬렉션 프레임워크에 대해 설명하고 주요 인터페이스들의 차이점을 말해주세요.
보통 3가지 정도로 분류합니다.
1. List: 내부에 array를 가지는 것이 일반적이나, Linked 를 사용하면 Node로 연결됩니다. 순서가 있는 리스트입니다. 내부의 추상화된 메서드를 통해 데이터를 삽입 삭제 정렬등 다양한 기능을 지원합니다.
2. Set: 리스트와 동일하게 내부에서 값을 보관합니다. 하지만 List와 가장 큰 다른점은 데이터의 중복을 허용하지 않습니다.
3. Map: Key Value형으로 자료를 저장합니다. key로 접근하여 value를 조회하는 것이 일반적이며, 모든 key를 가져오거나 모든 value를 가져오는 등 다양한 작업이 가능합니다. Set처럼 중복을 불허합니다. 하지만 Key에만 적용되며 value는 중복이 가능합니다.
'BackEnd' 카테고리의 다른 글
스프링 부트와 마이크로서비스 아키텍처의 완벽한 조합: 현대적 애플리케이션 개발의 핵심 (0) | 2025.02.28 |
---|---|
[Spring] 백엔드 면접 질문 정리 - 4 (0) | 2025.02.26 |
[CS] 백엔드 면접 질문 정리하기 - 2 (0) | 2025.02.24 |
[CS] 웹 서버(WS)와 웹 어플리케이션 서버(WAS) (0) | 2025.02.17 |
[CS] 모놀리식 아키텍처와 마이크로서비스 아키텍처 (0) | 2025.02.17 |