본문 바로가기

Programming/Java

(25)
면접에서 진짜 자주 나오는 자바 질문 - 섹션 2. 자바 고급 개념 1. 자바의 컬렉션 프레임워크 (Collection Framework)자바의 컬렉션 프레임워크는 데이터를 저장하고 처리하는데 필요한 클래스들과 인터페이스들을 제공하는 라이브러리이다. 컬렉션 프레임워크는 크게 List, Set, Map으로 구분되며, 각 컬렉션 타입은 데이터를 관리하는 방식과 특징에 따라 다르게 설계된다.List: 순서가 있는 데이터 집합으로, 중복된 값을 허용한다. 인덱스를 사용하여 데이터에 접근할 수 있다. 대표적인 구현체는 ArrayList, LinkedList, Vector가 있다.Set: 순서가 없고 중복을 허용하지 않는 데이터 집합이다. 예를 들어, HashSet, TreeSet, LinkedHashSet 등이 있다. 중복을 제거하는데 유용하다.Map: 키-값 쌍으로 데이터를 저..
면접에서 진짜 자주 나오는 자바 질문 - 섹션 1. 자바 기본 개념 1. 자바에서 객체 지향 프로그래밍(OOP)의 주요 특징자바는 객체 지향 프로그래밍(OOP, Object-Oriented Programming)을 지원하는 언어이다. 객체 지향 프로그래밍의 주요 특징은 다음과 같다:캡슐화(Encapsulation): 데이터와 그 데이터를 처리하는 메서드를 하나로 묶는 개념이다. 객체 내부의 상태는 직접 접근할 수 없고, 외부에서 접근할 때는 메서드를 통해서만 이루어진다. 이를 통해 객체의 상태를 보호하고, 불필요한 외부 간섭을 차단할 수 있다.상속(Inheritance): 부모 클래스의 속성과 메서드를 자식 클래스가 상속받아 사용할 수 있게 해주는 개념이다. 이를 통해 코드 재사용성과 유지보수성이 향상된다. 상속을 사용하면 계층적인 구조를 만들 수 있으며, 다형성과 결합..
쓰레드 풀(Thread Pool)의 개념과 최적화 방법 멀티스레드 프로그래밍에서 성능과 안정성을 확보하기 위해서는 쓰레드 풀(Thread Pool)을 적절하게 구성하고 운영하는 것이 중요하다. 이 글에서는 쓰레드 풀의 기본 개념부터, 구성 요소, 그리고 실무에서 고려해야 할 최적화 방법까지 단계적으로 알아보자.1. 쓰레드 풀(Thread Pool)이란?쓰레드 풀은 작업을 처리할 수 있는 일정 수의 쓰레드를 미리 만들어 두고, 들어오는 작업들을 이 풀에 있는 쓰레드로 처리하는 구조이다. 새로운 작업이 들어오면 쓰레드 풀에서 유휴 상태의 쓰레드를 할당해 실행하고, 작업이 끝난 후에는 해당 쓰레드를 다시 풀에 반환하여 재사용한다.주요 목적자원 낭비 방지: 매번 스레드를 생성하고 소멸시키는 비용을 줄인다.성능 향상: 이미 생성된 쓰레드를 재사용함으로써 응답 속도를 ..
JAVA 데드락(Deadlock)과 이를 방지하는 방법 (교착상태) 데드락(교착 상태)란?데드락(Deadlock)은 둘 이상의 스레드가 서로가 점유한 자원을 기다리며 무한히 대기하게 되는 상태를 말한다. 한국어로는 일반적으로 "교착 상태"라고 하며, 다중 스레드 환경에서 자주 발생할 수 있는 대표적인 병목 현상 중 하나이다.1. 데드락 발생 조건 (Coffman Conditions)데드락은 다음 네 가지 조건이 모두 충족될 때 발생한다:상호 배제 (Mutual Exclusion): 자원은 한 번에 하나의 스레드만 사용할 수 있다.점유 및 대기 (Hold and Wait): 자원을 점유한 상태에서 다른 자원을 기다린다.비선점 (No Preemption): 자원을 강제로 회수할 수 없다.순환 대기 (Circular Wait): 스레드들이 자원을 서로 기다리며 원형 대기를 형..
JAVA synchronized 키워드와 ReentrantLock의 차이점 (멀티스레딩) Java에서 멀티스레딩을 구현할 때 동기화(synchronization)는 필수적인 요소다. 대표적으로 사용하는 두 가지 방법이 있는데, 바로 synchronized 키워드와 ReentrantLock 클래스다. 이 두 방식은 동시성 제어를 위한 도구라는 공통점이 있지만, 사용 방법과 특징에서 많은 차이를 가진다. 이 문서에서는 두 방식의 차이점을 명확하게 비교하고 실전에서의 활용 방식을 알아보자.* 동기화(Synchronization)란?멀티스레드 환경에서는 여러 스레드가 동시에 공유 자원에 접근할 수 있기 때문에, 데이터 일관성과 안정성을 확보하기 위해 동기화가 필요하다. 동기화를 통해 한 번에 하나의 스레드만 특정 코드 블록을 실행할 수 있도록 제어할 수 있다.1. synchronized 키워드syn..
JAVA final, finally, finalize의 차이점 정리 자바를 공부하거나 개발하다 보면 final, finally, finalize라는 비슷한 이름의 키워드나 메서드를 자주 접하게 된다. 이름은 비슷하지만 쓰임새나 의미는 전혀 다르기 때문에 혼동하기 쉽다. 이 문서에서는 세 가지의 개념을 명확히 구분하고 각각의 역할을 알아보자.1. finalfinal은 자바에서 수정 불가능성을 의미하는 키워드다. 다양한 위치에 사용할 수 있으며 의미는 맥락에 따라 조금씩 달라진다.1.1 변수에 사용변수에 final을 선언하면 초기화 이후 값 변경이 불가능하다.주로 상수 선언 시 사용된다.final int MAX_COUNT = 100;1.2 메서드에 사용메서드에 final을 선언하면 서브 클래스에서 오버라이딩할 수 없다.public final void printHello() ..
JAVA 불변 객체(Immutable Object)란 무엇이며, 어떻게 만들 수 있을까 프로그래밍을 하다 보면 불변 객체(Immutable Object)라는 용어를 자주 접하게 된다. 특히 함수형 프로그래밍이나 멀티스레드 환경에서 자주 등장하는 개념이다. 이 문서에서는 불변 객체가 무엇인지, 왜 중요한지, 그리고 어떻게 만들 수 있는지를 알아보자.1. 불변 객체란?불변 객체(Immutable Object)는 한번 생성되면 그 상태를 변경할 수 없는 객체를 의미한다. 즉, 객체가 생성된 이후에는 그 내부 상태(필드 값 등)를 절대 바꿀 수 없다.예를 들어, 자바의 String 클래스는 대표적인 불변 객체이다.String a = "hello";String b = a.toUpperCase(); // b는 "HELLO", a는 여전히 "hello"위 코드에서 a.toUpperCase()를 호출했을..
JAVA equals()와 hashCode() 오버라이딩할 때 주의할 점 자바에서 객체의 동등성을 비교할 때 equals()와 hashCode() 메서드를 올바르게 구현하는 것은 매우 중요하다. 특히, 컬렉션 프레임워크에서 HashMap, HashSet 등을 사용할 때 올바른 동작을 보장하려면 반드시 이 두 메서드를 함께 오버라이딩해야 한다. 이번 포스팅에서는 equals()와 hashCode()를 오버라이딩할 때 주의해야 할 점을 정리해보겠다.1. equals()와 hashCode()의 기본 개념equals()란?equals()는 두 객체가 논리적으로 동등한지를 비교하는 메서드이다.기본적으로 Object 클래스에서 제공하는 equals()는 == 연산자와 동일하게 동작하여 객체의 참조(주소) 비교를 수행한다.필요에 따라 오버라이딩하여 객체의 특정 필드 값을 기준으로 동등성을..

반응형