본문 바로가기

전체 글

(99)
B tree 개념과 데이터 삽입 📌 1. B트리란?균형 잡힌 다진 탐색 트리(Balanced Multi-way Search Tree)한 노드에 여러 개의 키와 자식 노드를 가질 수 있음모든 리프 노드는 같은 레벨에 존재 → 균형 잡힌 트리데이터 삽입, 삭제, 검색 시간 복잡도: O(log N)📌 2. BST(이진 탐색 트리)와의 비교BST B트리자식 노드 최대 2개자식 노드 최대 M개 (M차 B트리)노드에 1개 키만 저장노드에 최대 M-1개의 키 저장깊이 편향 발생 가능 → 불균형항상 균형 유지📌 3. B트리의 구조M차 B트리 (예: 3차 B트리):자식 노드 최대 M개노드당 키 최대 M-1개노드당 최소 자식 수: ⌈M/2⌉최소 키 수: ⌈M/2⌉ - 1리프/루트 노드는 예외적으로 조건 미적용 가능📌 4. 삽입 동작 (Insert..
대표적 자료구조들 정리 ✅ 1. 일반 트리 (Tree)📌 개요계층적인 구조를 표현하는 자료구조루트(Root) 노드에서 시작해서 자식으로 내려감부모-자식 관계로 연결됨💡 특징n-ary Tree (자식 개수 제한 없음)그래프의 일종 (순환 없음)조직도, 폴더 구조, DOM 구조 등✅ 2. 이진 트리 (Binary Tree)📌 개요노드당 자식이 최대 2개까지 (left, right)종류포화 이진 트리: 모든 레벨이 꽉 참완전 이진 트리: 마지막 레벨만 채워지지 않음✅ 3. 이진 탐색 트리 (BST: Binary Search Tree)📌 개요왼쪽 서브트리는 "작은 값"오른쪽 서브트리는 "큰 값"💡 시간 복잡도연산 평균 최악 (한쪽으로 치우친 경우)탐색 / 삽입 / 삭제O(log n)O(n)언제 쓰면 좋을까?정렬된 데이터를 빠..
불변 객체(immutable object)의 개념과 사용 🔒 불변 객체(Immutable Object)란?정의: 객체가 생성된 이후 내부 상태가 변경되지 않는 객체예: Person(name="홍길동")을 생성하면, 이후 이름을 변경할 수 없음✅ 불변 객체의 장점1. 💡 코드의 안정성과 예측 가능성 증가여러 코드에서 객체를 공유하더라도 상태가 바뀌지 않음 → 신뢰성 향상예) DB에서 읽은 Employee 객체를 다른 서비스에서 사용하더라도 상태가 변하지 않음2. 🧵 스레드 세이프(Thread-safe)여러 스레드가 동시에 접근해도 상태가 바뀌지 않음 → 동기화 불필요3. 🔄 해시 기반 컬렉션(Map, Set 등)에서 안정적인 동작가변 객체는 해시 값이 바뀔 수 있어 문제가 발생하지만, 불변 객체는 그런 문제가 없음4. 🛡 방어적 복사(defensive ..
set과 hash set 🧩 Set vs HashSet 완전 정리! 리스트와의 차이까지 한눈에프로그래밍을 하다 보면 중복 없는 데이터를 다뤄야 할 일이 많습니다. 이럴 때 가장 적절한 자료구조가 바로 **Set(셋)**입니다. 이번 글에서는 Set의 개념부터 구현체인 HashSet, 그리고 리스트(List)와의 차이점까지 빠짐없이 정리해보겠습니다.✅ Set이란?Set은 순서가 없고 중복을 허용하지 않는 데이터 집합입니다.순서를 보장하지 않음중복을 저장하지 않음존재 여부 확인이 빠름 → 리스트보다 조회 속도 우수✍️ Set을 사용하는 대표적인 상황1. 중복 제거응답 = ["도전", "성장", "도전", "미래", "성장"]고유_값 = set(응답)# 결과: {"도전", "성장", "미래"}2. 존재 여부 확인 (빠른 필터링)예:..
Array List vs Linked List 📘 리스트의 모든 것: ArrayList vs LinkedList 완전 정복리스트는 프로그래밍을 처음 접하는 사람부터 실무 개발자까지, 누구나 자주 사용하는 기본 중의 기본 자료구조입니다. 이 글에서는 리스트의 개념, 그리고 실무에서도 자주 비교되는 ArrayList와 LinkedList의 차이점을 깔끔하게 정리해보겠습니다.✅ 리스트란 무엇인가?**리스트(List)**는 값을 순서대로 저장하는 **추상 자료형(Abstract Data Type, ADT)**입니다.주요 특징은 다음과 같습니다:순서를 가진 데이터 구조중복을 허용삽입, 삭제, 탐색, 접근이 주요 연산✔ 리스트를 사용하는 대표적인 예객관식 문제의 정답 저장4지선다형 문제 200개 정답 → 순서 중요, 중복 가능프로그래밍 언어 인기 순위 저장1..
디자인 패턴 여러가지 예시(spring 기반) ✅ 1. Singleton Pattern – Spring Bean 관리의 기본📌 목적객체를 하나만 생성해서 재사용한다Spring의 모든 @Component, @Service, @Repository, @Controller는 기본적으로 싱글턴으로 관리됨💡 Spring 방식@Servicepublic class UserService { public String getUserName() { return "홍찬"; }}@RestController@RequiredArgsConstructorpublic class UserController { private final UserService userService; @GetMapping("/user") public String g..
디자인패턴 종류 디자인 패턴을 **생성(Creational), 구조(Structural), 행위(Behavioral)**로 나누는 이유는 개발 과정에서 마주치는 문제의 성격과 목적이 다르기 때문입니다. 이 분류는 디자인 패턴을 사용할 때 적절한 해결책을 빠르게 찾을 수 있도록 도와주며, 유지보수성과 재사용성을 높이는 데 목적이 있습니다.✅ 1. 생성(Creational) 패턴🔍 목적객체 생성 방식에 관련된 패턴으로, 객체 생성을 캡슐화하거나, 유연하게 관리할 수 있도록 돕습니다.객체를 생성할 때 직접 new로 만들지 않고, 생성 로직을 별도로 관리하여 유지보수성과 확장성을 높이는 것이 핵심입니다.💡 대표 패턴패턴명 설명 예시Singleton하나의 인스턴스만 생성DB 커넥션 풀, 설정값 로딩Factory Method하..
프록시와 더티체킹 🔍 프록시와 더티체킹(Dirty Checking) 완전 정리✅ 프록시(Proxy)란?프록시는 진짜 객체를 감싸고, 메서드 호출을 가로채어 부가 기능을 삽입하는 객체다.프록시에 등록되어 사용될 객체는 앞/뒤로 자동으로 코드가 붙게 된다.(AOP든 트랜잭션이든..)스프링에서는 프록시를 이용해 트랜잭션, AOP, 로깅, 지연 로딩(Lazy Loading) 등의 기능을 구현한다.✅ 프록시는 언제, 왜 만들어질까?📌 언제 만들어지나?앱 실행 시점, 스프링이 빈을 생성할 때@Transactional, @Async, @Cacheable 같은 어노테이션이 붙어 있으면스프링이 원본 객체를 감싸는 프록시 객체를 만들어 컨테이너에 등록함📌 왜 프록시가 필요한가?공통 관심사(트랜잭션, 로깅 등)를 핵심 로직과 분리할 수..