본문 바로가기

백엔드 면접준비/Java

(9)
객체지향 Q. 객체지향과 절차지향의 특징과 장담점을 설명하시오 객체지향절차지향구성객체 단위(데이터 + 메서드)함수 및 프로시저특징캡슐화, 상속, 다형성 등 OOP 원칙 적용데이터와 기능이 분리, 순차적 흐름장점코드 재사용성, 확장성, 유지보수 용이단순한 문제 해결에 적합단점초기 설계 및 개념 이해에 시간이 필요규모 확장 시 코드 관리 및 유지보수가 어려워질 수 있음 Q. OOP의 대표적인 4원칙은? 개념장점캡슐화(Encapsulation)외부에서는 클래스가 제공하는 공개 인터페이스만을 통해 접근하도록 하는 원칙- 데이터 은닉을 통해 객체의 내부 상태를 보호- 내부 구현이 변경되어도 외부에 영향을 미치지 않는다.상속(Inheritance)부모 클래스의 특성과 기능을 자식 클래스가 물려받아 재사용하고 확장하는 원칙-..
JAVA 기본 Q. String, StringBuilder, StringBufferString은 불변성으로 잦은 문자열 변경 시 성능 저하가 있고,StringBuilder는 단일 스레드에서 성능이 뛰어나며,StringBuffer는 멀티 스레드 환경에서 동기화로 인해 안전하지만 성능은 조금 떨어진다.구분StringStringBuilderStringBuffer속도느림 (잦은 변경 시)빠름보통 (Builder보다는 느림)스레드 안전성불변 → Thread-safeThread-safe 하지 않음Thread-safe동기화 여부동기화 불필요동기화하지 않음동기화(synchronized) 되어있음불변성불변(Immutable)가변(Mutable)가변(Mutable)
8.JAR JAR 파일 실행 명령어java -jar ossapp.jar JAR 실행과정1. JVM(Java Vitual Machine) 실행java -jar ossapp.jar 명령어를 입력하면, JVM이 실행됨2. JAR 파일 해석 & 압축 해제(Mainfest 파일 확인)JVM은 JAR 내부의 META-INF/MANIFEST.MF에서 Main-Class를 확인하고, 애플리케이션의 시작업을 찾는다.일반 JAR : Main-Class에 지정된 main() 메서드를 실행Spring Boot JAR : JarLauncher가 먼저 실행되고, Start-Class로 지정된 클래스를 찾아 실행3. 클래스 로드 & 클래스 로더 동작 JVM은 Main-Class의 main() 메서드를 실행하기 위해 ClassLoader를 사..
7. 동기,비동기, 블로킹, 논블록킹 1. 기본 개념개념정의예시동기(Synchronous)작업 요청 후 결과를 받을 때까지 기다림전화 통화비동기(Asynchronous)요청 후 결과를 기다리지 않고, 완료되면 알림(콜백, Future,...)문자 메세지블로킹(Blocking)요청한 작업이 끝날 때까지 현재 실행중인 작업이 멈춤엘레베이터에서 기다리는 것논블로킹(Non-blocking)요청한 작업이 끝나지 않아도 다른 작업을 계속 수행 가능식당에서 주문 후 다른 일을 하는 것2. 동기(Synchronous) vs 비동기(Asynchronous)동기(Synchronous)작업을 요청한 후 응답을 받을 때까지 기다려야함요청한 작업이 끝나야 다음 작업을 수행 가능 1) 예제(동기 방식) - Javapublic class SyncExample { ..
6. Garbage Collection(GC) Heap 메모리에서 더 이상 사용되지 않는 객체를 자동으로 제거하는 프로세스.어플리케이션의 메모리 관리를 자동화하여 메모리 누수를 방지하고 메모리 사용을 최적화 하는 중요한 역할.Java 힙 메모리 구조(Heap Memory)Java에서는 Heap 메모리를 관리하며, 이 메모리는 객체를 생성하는 데 사용되는 런타임 메모리 공간이다. Heap 메모리는 크게 Young Generation과 Old Generation으로 나뉜다. 각 영역은 객체 생성, 소멸 및 승격을 관리하는 방식이 다르다.Young Generaion(젊은 세대)객체가 처음 생성될 때 대부분 Yound Generation에 할당됨Eden 영역에 객체가 할당되고, Eden이 꽉 차면 Minor GC가 발생하여 살아남은 객체는 Survivor ..
4. Java Annotation 1. Java Annotation이란? 자바에서 어노테이션(Annotation)은 코드에 메타데이터를 추가하는 방법입니다. 어노테이션은 코드 자체를 변경하지 않지만, 코드에 대한 추가적인 정보를 제공하거나 특정 처리를 할 수 있게 도와줍니다. 주로 컴파일러나 런타임에서 이 정보를 활용하여 특정 작업을 자동으로 처리하거나, 개발자가 의도한 동작을 명확히 할 수 있도록 합니다. 어노테이션의 예를 들면:@Override메서드가 부모 클래스의 메서드를 오버라이드하고 있다는 것을 컴파일러에 알려주는 역할을 합니다. 오타나 실수로 메서드 시그니처가 일치하지 않는 경우 컴파일러가 경고를 줍니다.@EntityJPA에서 데이터베이스 테이블과 매핑되는 클래스를 표시할 때 사용합니다.해당 클래스가 엔티티로서 데이터베이스의 ..
3. Java Collection Framework(JCF) Java에서 Collection이란 데이터의 집합, 그룹을 의미하며 데이터 자료구조인 컬랙션과 이를 구현하는 클래스를 정의하는 인터페이스를 제공한다. 왜 Collection을 사용하는 것일까?- 다수의 Data를 다루는데 표준화된 클래스를 제공해준다. 그래서 DataStructure(자료구조)를 직접 구현하지 않고 편하게 사용할 수 있다.- 배열과 다르게 객체를 보관하기 위한 공간을 미리 정하지 않아도 되므로, 객체의 수를 동적으로 정할 수 있다. 1.  ListList 인터페이스를 직접 @Override(오버라이드)를 통해 재정의할 수도 있다.대표적인 구현체는 ArrayList, LinkedList가 있다.※ 순서가 있는 데이터 집합으로 데이터의 중복을 허용 ArrayList각 데이터에 대한 인덱스(..
2. Java 멀티쓰레드 환경(volatile, synchronized, atomic) 멀티쓰레드 환경에서 자주 언급되는 가시성, 원자성, 동기화에 대해서 먼저 이해하고 넘어가야합니다.개념원자성(Atomicity)가시성(Visibility)동기화(Synchronization)목적중간에 끊기지 않고 완전한 실행 보장변수 값이 다른 쓰레드에서 즉시 보이게 보장여러 쓰레드에서 동시 접근 제어보장연산이 중간에 끊어지지 않음다른 쓰레드가 즉시 값을 반영원자성, 가시성 보장예시AtomicInteger.incrementAndGet()volatile 변수synchronized 키워드 사용성능매우 효율적(CAS방식)성능 저하 없음성능 저하, 잠금 획득 대기 가능 CAS(Compare And Swap)방식CPU나 메모리에 저장된 현재 값과 기존 값을 비교한 후, 만약 값이 일치하면 새로운 값을 메모리에 반영..