Java 34

[JAVA] 옵저버 패턴(Observer Pattern)이란?

옵저버 패턴이란?옵저버 패턴은 주체가 어떤 객체의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 메소드 등을 통해 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 디자인 패턴이다. 주체(객체)와 옵저버public interface ISubject { public void registerObserver(IObserver observer); public void removeObserver(IObserver observer); public void notifyObservers(); public Object getUpdate(IObserver observer);}public interface IObserver { void update();}public class ConcreteSub..

JAVA 2025.05.23

[JAVA] 전략 패턴(Strategy Pattern)이란?

전략 패턴이란?전략 패턴(Strategy Pattern)은 객체의 행위를 바꾸고 싶은 경우 직접 수정하지 않고 전략이라고 부르는 '캡슐화된 알고리즘'을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴이다. 예를 들면 유저가 결제방식을 결정할 때 '신용카드', '카카오페이', '현금' 등 여러가지 방법으로 결제를 하게된다.public interface Payment { void pay(int amount);}일단 amount만큼의 금액을 지불한다는 pay() 추상 메소드를 Payment 인터페이스에 구현한다. public class KakaoPayment implements Payment { @Override public void pay(int amount) { S..

JAVA 2025.05.23

[JAVA] 팩토리 패턴(Factory Pattern)이란?

팩토리 패턴이란?객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴이자 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴이다. 팩토리 패턴 구현enum PhoneType { APPLE, SAMSUNG}abstract class Phone { String name; public String Phone() { return name; }}class ApplePhone extends Phone { public ApplePhone() { name = "apple"; }}class SamsungPhone extends Phone { public SamsungP..

JAVA 2025.05.22

[JAVA] 싱글톤 패턴(Singleton Pattern)이란?

싱글톤 패턴이란?싱글톤 패턴(Singleton Pattern)은 디자인 패턴 중 생성 패턴으로 하나의 클래스에 오직 하나의 인스턴스만 가지도록 하는 패턴이다. 하나의 클래스를 기반으로 여러가지 인스턴스를 만들 수 있지만, 그렇게 하지 않고 단 하나의 인스턴스를 만들어 이를 기반으로 로직을 만든다. 싱글톤 패턴 구현public class Singleton { private static Singleton singletonInstance; // 생성자를 외부에서 접근하지 못하도록 private 접근제어 private Singleton() {} public static Singleton getInstance() { if (singletonInstance == nul..

JAVA 2025.05.20

[자료구조] (5) Deque(덱)이란 무엇인가?

Deque(덱) 정의Deque(Double-Ended Queue)는 양쪽 끝에서 삽입과 삭제가 모두 가능한 자료구조다.스택(한쪽 입출력), 큐(한쪽 입력/한쪽 출력)과 다르게 덱은 양쪽 모두 입출력이 가능하다.덱의 주요 연산addFirst(item)앞쪽에 데이터 삽입addLast(item)뒤쪽에 데이터 삽입removeFirst()앞쪽 데이터 삭제removeLast()뒤쪽 데이터 삭제peekFirst()앞쪽 데이터 조회peekLast()뒤쪽 데이터 조회덱의 구현 방법배열 기반(ArrayDeque)빠른 인덱스 접근 가능공간이 꽉 차면 크기 확장(리사이즈) 필요연결 리스트 기반(LinkedListDeque)삽입/삭제가 O(1)로 빠름메모리 사용량이 많음 (노드 구조)덱의 사용 사례회문(팰린드롬) 검사앞과 뒤를..

자료구조 2025.04.27

[자료구조] (4) Stack 두 개로 Queue 구현하기

2개의 Stack으로 Queue 구현해보기큐는 FIFO(First In, First Out) 방식으로 작동하는 대표적인 자료구조다. 반면 스택은 LIFO(Last In, First Out) 구조다. 얼핏 보면 정반대의 구조처럼 보이지만, 두 개의 스택을 적절히 조합하면 큐와 같은 동작을 흉내 낼 수 있다. Stack이란?스택은 데이터를 "쌓는" 방식으로 관리하는 자료구조다. 가장 마지막에 들어온 데이터가 가장 먼저 나가는 LIFO(Last In, First Out) 구조로 작동한다. 마치 책을 한 권씩 쌓아 올리고, 맨 위에 있는 책부터 꺼내는 방식과 같다. → 연산스택에서 지원하는 기본 연산은 다음과 같다.push(item) : 스택의 맨 위에 데이터를 추가한다.pop() : 스택의 맨 위 데이터를 제..

자료구조 2025.04.25

[자료구조] (2) 레드블랙 트리(Red-Black Tree)와 이진 트리(Binary Tree)의 차이점

데이터를 효율적으로 저장하고 검색하기 위해 다양한 트리 자료구조(Tree Structure)가 사용된다. 그중에서도 이진 트리와 레드블랙 트리는 많은 프로그래밍 환경에서 자주 등장한다. Java Collection에서 트리 맵(Tree Map), 트리 셋(Tree Set)의 경우 레드블랙 트리를 사용한다. 그럼 이진트리와 레드블랙 트리는 어떤점이 다를까? 이진 트리(Binary Tree)란?이진 트리는 모든 노드가 최대 두 개의 자식 노드(left, right)를 가지는 트리 구조이다. 10 / \ 5 15노드 : 트리 구조의 기본 단위로, 값(data)을 저장하고 다른 노드와의 연결을 가짐루트(Root) 노드 : 트리의 제일 위에 있는 시작 노드자식 노드 : 어떤 노드의 아래에 연결된..

자료구조 2025.04.24

[자료구조] (1) ArrayList와 LinkedList의 차이

Java CollectionJava는 개발자들이 다양한 자료구조를 사용하게 할 수 있도록 Collection 프레임워크를 지원한다. 이 프레임워크는 데이터를 저장하고 다루는 방식을 추상화하여, 상황에 맞는 자료구조를 손쉽게 선택할 수 있도록 도와준다. 그 중에서도 List는 순서가 있는 데이터 저장에 적합하며, 실무에서 가장 자주 사용되는 컬렉션 중 하나다.Java에서는 대표적으로 ArrayList와 LinkedList가 List 인터페이스를 구현하고 있으며, 기능은 유사하지만 내부 구조와 성능 특성은 크게 다르다. ArrayList란?ArrayList는 List 인터페이스를 상속받은 클래스이다. int[], string[] 같이 정적 배열과는 다르게 크기가 변할 수 있다. 내부적으로 Object[] 배..

자료구조 2025.04.22

[백엔드 면접 질문 준비] (7) RDB에서 페이징 쿼리의 필요성

페이징 쿼리(Paging Query)란?페이징 쿼리(Paging Query) 는 전체 데이터를 부분적으로 나누어 데이터를 조회하거나 처리할 때 사용됩니다. 데이터를 상대적으로 작은 단위로 나누어 처리하기 때문에 데이터베이스나 애플리케이션의 리소스 사용 효율이 증가하며, 로직 처리 시간을 단축 시킬 수 있습니다. MySQL에서 페이징 쿼리는 일반적으로 LIMIT, OFFSET 구문을 사용하여 작성합니다. 페이징 쿼리를 왜 사용할까?1. 데이터의 물리적 양실제 서비스에서는 수천, 수만, 수십만 개의 데이터가 존재할 수 있습니다.한 번에 모든 데이터 조회시 발생하는 이슈DB에 과부하 발생네트워크 전송량 증가사용자 브라우저에서도 렌더링 부담2. 사용자 경험 측면사용자는 한 번에 모든 상품을 보기 힘듬일반적으로 ..

Interview Question 2025.04.15

[백엔드 면접 질문 준비] (6) JVM이란 무엇인가?

JVM이란?JVM(Java Virtual Machine)은 자바 프로그램을 실행하기 위한 가상 머신(Virtual Machine)입니다. 이름 그대로 물리적인 컴퓨터가 아니라, 프로그램 위에서 동작하는 소프트웨어 기반의 컴퓨터라고 이해할 수 있습니다. 자바로 작성된 코드는 .java 파일로 저장된 뒤, 자바 컴파일러(javac)를 통해 바이트코드(.class)로 변환됩니다. 이 바이트코드는 OS나 하드웨어와 무관한 중간 형태의 코드이며, JVM이 이 바이트코드를 해석하거나 실행합니다. 즉, JVM은 자바 바이트코드를 받아서 실제로 프로그램이 동작하도록 만들어주는 역할을 합니다. 왜 JVM이 필요한가?JVM의 가장 큰 특징은 운영체제(OS)에 독립적이라는 점입니다. 자바는 "한 번 작성하면, 어디서나 실행..

Interview Question 2025.04.05