분류 전체보기 76

[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

[자료구조] (3) 해시테이블(Hash Table)이란?

해시테이블(Hash Table)해시 테이블은 (Key, Value)로 데이터를 저장하는 자료구조 중 하나로 빠르게 데이터를 검색할 수 있는 자료구조이다. 해시테이블은 내부적으로 키를 해시 함수(Hash Function)에 통과시켜 인덱스로 변환하고, 이 인덱스에 데이터를 저장한다.Key('apple') → [Hash Function] → Index(5) → 배열에 저장예를 들어 "apple"라는 문자열을 해시 함수에 넣으면 5라는 인덱스가 나오고, 배열의 5번째 칸에 저장하는 방식이다.왜 해시테이블인가?배열이나 리스트는 인덱스를 통해 값을 찾을 수는 있지만, 특정 값을 찾으려면 결국 선형 탐색을 해야 한다.그에 반해, 해시테이블은 키(Key)를 이용해서 거의 O(1) 시간에 값을 찾아낼 수 있다. 해시함..

자료구조 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

[Spring] Custom AutoConfiguration 만들어보기

AutoConfiguration이란?Spring Legacy와 Spring Boot의 가장 큰 차이점 중 하나는 설정 방식입니다.  기존의 Spring에서는 XML이나 Java Config를 통해 직접 모든 Bean을 등록해야 했지만,  Spring Boot는 AutoConfiguration을 통해 필요한 Bean을 상황에 맞게 자동으로 등록해줍니다.  Auto-configuration을 사용하고 싶다면 @EnableAutoConfiguration 또는 @SpringBootApplication 어노테이션을 @Configuration 클래스 중 하나에 추가하면 됩니다. 간단한 AutoConfiguration 만들기실제로 나만의 AutoConfiguration 클래스를 만들어보겠습니다. 한국말로 "안녕하세요..

SPRING 2025.04.10

[Spring] MSA(MicroService Architecture) 구현

왜 마이크로서비스를 구현하게 되었는가?기존에는 하나의 Spring Boot 프로젝트 안에 결제, 주문, 인증.인가 등의 기능을 모두 넣는 방식으로 개발을 해왔지만, 실제 서비스에서는 각 도메인을 독립적으로 분리해서 관리하는 방식이 더 일반적이다. 왜 단일 프로젝트가 아닌 마이크로서비스로 구성했는가?단일 모놀리식(Monolithic) 아키텍처는 개발 초기에는 구조가 간단하고 빠르게 구축할 수 있다는 장점이 있다. 하지만 기능이 많아질수록 다음과 같은 문제들이 생긴다:코드베이스가 커져 유지보수가 어려움빌드/배포 시 전체 시스템이 영향을 받음도메인마다 다른 팀이 협업하기 힘듦특정 기능 하나가 문제가 생기면 전체 서비스에 영향을 줄 수 있음반면 마이크로서비스 아키텍처는 각 기능(예: 결제, 주문, 인증.인가 등..

SPRING 2025.04.09