Java (18) 썸네일형 리스트형 GoF 디자인 패턴 - 데코레이터 패턴 (Decorator Pattern) 1. 데코레이터 패턴이란?데코레이터 패턴은 객체에 추가적인 책임(기능)을 동적으로 부여할 수 있게 해주는 구조 패턴이다. 서브클래싱 없이도 기능을 확장할 수 있으며, 개방-폐쇄 원칙(OCP)을 잘 지킨 설계 방식이다.특징동적 기능 확장: 런타임에 객체의 기능을 유연하게 추가 가능OCP 준수: 기존 코드를 수정하지 않고도 기능을 확장조합성 증가: 다양한 데코레이터를 조합해 기능을 유연하게 구성 가능 2. 데코레이터 패턴의 구조Component (컴포넌트): 기본 인터페이스 또는 추상 클래스ConcreteComponent (구현체): 실제 기능을 수행하는 클래스Decorator (데코레이터): Component를 구현하고 자신 안에 Component 참조ConcreteDecorator (구체 데코레이터): .. JAVA 자주 나오는 자바 면접 질문 30개 예시 1. 자바란 무엇인가요?답변: 자바는 객체지향 프로그래밍 언어로, 플랫폼 독립적이며 JVM을 통해 다양한 운영체제에서 실행됩니다. "Write Once, Run Anywhere" 원칙을 따릅니다.2. 자바의 특징은 무엇인가요?답변: 자바는 객체지향, 플랫폼 독립성, 자동 메모리 관리, 멀티스레딩 지원, 강력한 보안, 네트워크 프로그래밍이 용이한 특징이 있습니다.3. 자바에서 오버라이딩과 오버로딩의 차이점은 무엇인가요?답변: 오버라이딩은 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것이며, 오버로딩은 메서드 이름은 같지만 매개변수의 수나 타입을 다르게 하여 여러 메서드를 정의하는 것입니다.4. 자바에서 예외 처리란 무엇인가요?답변: 예외 처리는 프로그램 실행 중 발생할 수 있는 오류를 처리하여 프로그.. 면접에서 진짜 자주 나오는 자바 질문 - 섹션 4. 자바 8 핵심 기능 1. 람다 표현식 (Lambda Expressions)람다(Lambda)는 익명 함수(Anonymous Function)를 표현하는 방식으로, 간결한 코드 작성과 컬렉션 처리 간소화에 큰 기여를 했다.// 기존 방식Comparator comp = new Comparator() { public int compare(String a, String b) { return a.compareTo(b); }};// 람다 표현식Comparator comp = (a, b) -> a.compareTo(b);장점: 익명 객체 작성의 번거로움 제거, 가독성 향상실무 활용: 정렬, 이벤트 처리, Stream 내부 처리 등람다는 함수형 인터페이스를 구현하는 데 사용되며, 코드의 명확성과 유연성을 높여준다... 쓰레드 풀(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()를 호출했을.. 이전 1 2 3 다음