전체 글 57

LinkedList - Java

지난 포스트인 ArrayList를 이어서 이번에는 LinkedList에 대해서 정리해보겠습니다.LinkedListJava 컬렉션 프레임워크(Collection Framework) 중 하나로, 노드 기반으로 구현된 자료구조입니다.각 요소(Node)가 **데이터(data)**와 **다음 노드(next)**에 대한 참조를 가지고 있어, 삽입과 삭제가 효율적입니다.주요 특징자료구조내부적으로 **노드(Node)**를 연결하여 구성크기 조정삽입/삭제할 때 별도 크기 확장이 필요 없음 (공간은 노드 단위로 동적으로 사용)접근 속도인덱스 접근 시 느림 (O(N)) (앞에서부터 순차 탐색)삽입/삭제 속도처음/끝 삽입·삭제는 빠름 (O(1)), 중간은 느림 (O(N))중복 허용O (같은 값을 여러 번 저장 가능)null ..

자료구조 2025.04.27

ArrayList - Java

이 글을 시작으로 알고리즘에서 자주 사용되는 자료구조의 주요 메소드를 정리하는 포스트를 작성해보겠습니다. 이번 포스트에서는 ArrayList 자료구조에 대해 정리해보겠습니다. ArrayListArrayList는 Java 컬렉션 프레임워크(Collection Framework) 중 하나로, 배열 기반으로 구현된 동적 크기 배열(Dynamic Array) 입니다.배열과 비슷하지만, 크기를 자동으로 조정해주기 때문에 요소를 추가하거나 삭제할 때 편리합니다.주요 특징자료구조내부적으로 배열(Array) 사용크기 조정배열이 꽉 차면, 자동으로 1.5배 또는 2배 크기로 확장접근 속도인덱스로 접근 시 빠름 (O(1))삽입/삭제 속도중간 삽입/삭제는 느림 (O(N)) (이동 필요)중복 허용O (같은 값을 여러 번 저장..

자료구조 2025.04.27

자료구조 정의

자료구조란사전적인 의미는 자료(Data)의 집합의 의미하며, 각 원소들이 논리적으로 정의된 규칙에 의해 나열되며 자료에 대한 처리를 효율적으로 수행할 수 있도록 자료를 구분하여 표현한 것입니다.자료구조는 다음 그림과 같이 단순 자료구조(Primitive Data Structure)와 복합 자료구조(Non-Primitive Data Structure)로 나누어 집니다.복합 자료구조는 다시 선형 자료구조(Linear Data Structure)와 비선형 자료구조(Non-Linear Data Structure)로 구분됩니다.선형 자료구조선형 자료구조는 다음 그림처럼 데이터 요소를 순차적으로 연결하는 자료구조로, 구현하기 쉽고 사용하기도 쉽습니다. 배열(Array)과 링크드 리스트(Linked List), 스택..

자료구조 2025.04.27

Build

BuildBuild는 소스 코드와 리소스를 컴파일하고, 테스트 및 패키징하여 실행 가능한 형태로 만드는 과정입니다. 개발자가 작성한 코드를 컴퓨터가 이해하고 실행할 수 있는 형태로 변환하는 필수적인 작업입니다.Kotlin BuildKotlin Build Process를 그림으로 나타내면 다음과 같습니다. Kotlin 또한 JVM위에서 동작하기 때문에 Java의 빌드 과정과 매우 유사합니다. Java는 .java 파일을 Java Compiler를 통해 .class 파일로 변환을 하고 Kotlin은 .kt 파일을 Kotlin Compiler를 통해 .class 파일로 변환을 합니다. 해당 파일은 .class 파일은 Kotlin Runtime Library에 의존되어 실행합니다. (Kotlin Runtime..

Companion Object

Companion Objectcompanion object에 대한 정리에 앞서 먼저 Java의 어떤 기능과 유사한지부터 알아보겠습니다. Java에는 static 키워드가 존재합니다. 해당 키워드가 붙은 변수가 메소드는 클래스 로드 시에 메모리에 할당되며, 프로그램 종료 시까지 유지가 됩니다. 또한 모든 인스턴스에 공유되는 특징을 가지고 있습니다. Kotlin에서는 static이라는 키워드가 존재하지 않습니다. 대신 companion object 키워드를 가지고 static 키워드를 대신해 처리를 하고 있습니다. 먼저 Java의 코드를 살펴보겠습니다.public class Test { public static int count = 0; public static void print(){ ..

Nested Class, Inner Class

Nested Class, Inner ClassNested Class, Inner Class에 대한 예시를 간단하게 Java에서 어떻게 사용되는지 확인해보겠습니다.//외부 클래스public class Outer{ private int number; //정적 중첩 클래스 public static class NestedClass{ } //내부 클래스 public class InnerClass{ }} 먼저 클래스 내부에 클래스를 선언하는 것을 중첩 클래스라고 합니다. Java에서는 static 키워드 유무에 따라 중첩 클래스를 분류할 수 있습니다. static이 붙은 경우에는 정적 중첩 클래스(Static Nested Class)라고 칭하며 특징은 다음과 같습니다.Outer 클래스의 인스턴스가 없어도 생성이 가..

Null 처리

NullKotlin에서 Null 처리는 주요한 특징 중 하나로, 안전한 Null 처리를 통해 NPE 문제를 효과적으로 예방할 수 있습니다. 해당 특징에 대해 깊이 있게 설명해보겠습니다.Nullable, Non-NullableKotlin은 모든 변수와 타입을 Nullable, Non-Nullable으로 명확히 구분하는 특성이 있습니다.Nullable는 null 값을 가질 수 있는 반면에 Non-Nullable은 null 값을 가질 수 없습니다.//null 불가, null을 넣을 시 컴파일 에러val name1: String = "name1"//null 가능val name2: String? = null 안전 호출 연산자 - ?.?. 연산자는 Nullable 타입에서 안전하게 접근할 수 있도록 돕는 안전 호출..

만들면서 배우는 클린 아키텍처

계층형 아키텍처의 문제는 무엇일까?그림 1. 전통적인 웹 애플리케이션 구조 웹 계층 : 요청을 받아 도메인 혹은 비즈니스 계층에 있는 서비스로 요청을 보낸다.도메인 계층 : 필요한 비즈니스 로직을 수행하고, 도메인 엔티티의 현재 상태를 조회하거나 변경하기 위해 영속성 계층의 컴포넌트를 호출한다.영속성 계층 : 엔티티를 조회 또는 변경한다.계층형 아키텍처는 견고한 아키텍처 패턴이다. 계층을 잘 이해하고 구성한다면 웹 계층이나 영속성 계층에 독립적으로 도메인 로직을 작성할 수 있다. 원한다면 도메인 로직에 영향을 주지 않고 웹 계층과 영속성 계층에 사용된 기술을 변경할 수 있다. 기존 기능에 영향을 주지 않고 새로운 기능을 추가할 수도 있다. 잘 만들어진 계층형 아키텍처는 선택의 폭을 넓히고, 변화하는 요구..

ETC 2025.04.22

맞춤 추천 게시글 시스템 구축 - 구현 2편

이 전에 작성했던 맞춤 추천 게시글 시스템 구축 - 구현 1편에 이어서 구현 2편을 진행해보겠습니다. 해당 시스템에는 레디스를 적용할 계획입니다. 레디스의 목적은 추천 게시글 목록이 이미 존재한다면 해당 데이터를 리턴하고, 추천 게시글 목록이 존재하지 않으면 레디스에 저장해서 관리하기 위함입니다. 레디스 설정파일은 다음과 같습니다. 유저 ID를 Key로 게시글 ID 리스트를 Value로 가진 자료구조로 저장해보겠습니다.@Configuration@EnableCachingclass RedisConfig( @Value("\${redis.host}") private val host: String, @Value("\${redis.port}") private val port: Int) { ..

기술 회고 2025.04.19

맞춤 추천 게시글 시스템 구축 - 구현 1편

이 전에 작성했던 맞춤 추천 게시글 구축 - 이론편을 기반으로 구현편을 이어서 진행하도록 해보겠습니다.기술 스택 버전Spring Boot : 3.4.4Kotlin : 1.9JDK : 21MySQL : 9.2.0Spring Data JPA : 3.4.4Kotlin JDSL : 3.5.5Coroutine : 1.8.1테이블 설계가장 먼저 테이블이 필요하므로 최대한 간단하게 설계를 진행해보겠습니다. 필요한 테이블로는 '사용자', '게시글', '사용자 게시글 활동 이력' 테이블이 있습니다.User(사용자) 테이블@Entityclass User( @Id @GeneratedValue(strategy = jakarta.persistence.GenerationType.IDENTITY) var id: L..

기술 회고 2025.04.17