Kotlin 10

[Kotlin] 비동기 처리 (async, await)

코틀린의 비동기 처리 (async, await) 코틀린에서는 비동기(Asynchronous) 처리를 위해 Coroutine(코루틴)을 활용함.특히, async와 await 을 사용하면 비동기 작업을 실행하고 그 결과를 기다리는 방식으로 코드를 효율적으로 작성할 수 있음. 1️⃣ 비동기 처리의 필요성 코틀린에서 비동기 처리를 사용하는 이유: • CPU 작업과 I/O 작업을 효율적으로 처리하기 위해 • 동기 코드보다 빠른 실행 가능 (여러 작업을 동시에 수행) • 메인 스레드를 블로킹(blocking)하지 않음 (예: UI 애플리케이션에서 중요) 2️⃣ async 와 await 개념 • async {} → 비동기적으로 실행되는 작업을 정의 • await() → 비동기 작업의 결과를 반환받음 (suspend ..

BE/Kotlin 2025.03.29

[Kotlin] as? 와 null 형변환

코틀린의 as? 연산자와 안전한 널(null) 형변환 코틀린에서는 형변환(Type Casting) 을 위해 as 연산자를 사용하지만, 형변환이 실패할 경우 런타임 오류(ClassCastException)가 발생할 수 있음. 이를 방지하기 위해 안전한(null-safe) 형변환 연산자인 as? 를 제공함. 1. as 연산자 (일반적인 형변환) 기본적으로 as 연산자는 한 객체를 특정 타입으로 변환하려고 할 때 사용됨.val obj: Any = "Hello"val str: String = obj as String // 성공println(str) // Hello 하지만, 형변환이 불가능한 경우 런타임 오류가 발생함.val obj: Any = 123val str: String = obj as String ..

BE/Kotlin 2025.03.27

[Kotlin] 코루틴 (Coroutines)

⚡ 1. 코루틴(Coroutines)란?코루틴(Coroutine) 은 Kotlin에서 제공하는 비동기 프로그래밍을 위한 경량 쓰레드 개념입니다.기존의 Thread나 RxJava보다 가볍고 효율적으로 비동기 작업을 관리할 수 있도록 설계되었습니다. ✅ 코루틴의 주요 특징 🔹 경량성 → 수천 개의 코루틴을 실행해도 적은 리소스를 사용🔹 비동기 & 논블로킹 → 메인 쓰레드를 차단하지 않고 동작🔹 구조적 동시성(Structured Concurrency) → CoroutineScope를 활용해 일괄적으로 관리 가능🔹 기존 코드와의 쉬운 통합 → 기존 Thread, RxJava보다 간결한 코드 작성 가능 ⚡ 2. 코루틴의 기본 개념🏗 코루틴의 주요 구성 요소개념설명CoroutineScope코루틴이 실행되는..

BE/Kotlin 2025.03.02

[Kotlin] JPA에서 필드에 final을 붙이지 않는 이유 (val, var)

Spring Boot의 JPA 엔티티에서는 일반적으로 필드를 private으로 선언하고 final을 붙이지 않는 이유는 JPA의 프록시(proxy) 및 리플렉션(reflection) 메커니즘 때문. ✅ 1. JPA는 엔티티 객체를 리플렉션(Reflection)으로 생성해야 한다📌 final을 사용하면 JPA가 필드를 초기화할 수 없음 JPA는 기본 생성자(No-Arg Constructor)를 사용하여 엔티티 객체를 리플렉션으로 생성합니다.즉, JPA가 객체를 만들 때 필드에 값을 할당할 수 있어야 합니다. 🚨 private final을 사용하면 발생하는 문제@Entitypublic class User { @Id @GeneratedValue(strategy = GenerationType.ID..

BE/Kotlin 2025.02.21

[Kotlin] 코틀린 문법 6 (open, 상속, 인터페이스)

Kotlin에서는 객체 지향 프로그래밍(OOP)의 핵심 개념인 상속(Inheritance)과 인터페이스(Interface) 를 지원하지만,Java와는 몇 가지 차이점이 있음. 특히 open 키워드는 Java와 Kotlin의 클래스 설계 철학의 차이를 보여주는 중요한 요소임. 🛠️ 1. open 키워드 (Java의 extends와 비교)✅ Java: 클래스와 메서드는 기본적으로 상속 가능 (final을 붙이면 금지)class Parent { void show() { System.out.println("부모 클래스"); }}class Child extends Parent { @Override void show() { System.out.println("자식 클..

BE/Kotlin 2025.02.20

[Kotlin] 코틀린 문법 5 (lateinit, lazy, companion object)

Kotlin에서는 지연 초기화(Lazy Initialization)와 관련하여 lateinit과 lazy를 제공하며, companion object를 통해 Java의 static 개념을 대체할 수 있음. 이를 Java와 비교하면서 차이점을 정리하고, lateinit vs lazy, companion object vs object 비교도 함께 제공함. 🛠️ 1. lateinit (자바의 일반적인 null 체크와 비교)lateinit 키워드는 var로 선언된 비-Nullable 객체에 대해 나중에 초기화할 수 있도록 허용함. ✅ Java 코드 (일반적인 null 체크)class User { private String name; public void setName(String name) { ..

BE/Kotlin 2025.02.19

[Kotlin] 코틀린 문법 4 (apply, let, also, run, with)

Kotlin에서는 apply, let, also, run, with 같은 스코프 함수(Scope Functions) 를 제공하여 객체를 더 간결하고 읽기 쉽게 다룰 수 있도록 함.이 함수들은 객체의 상태를 변경하거나 임시적인 컨텍스트에서 특정 작업을 수행할 때 유용함. Java에서는 이러한 기능을 Optional, Stream API, 람다 표현식 등을 활용하여 비슷하게 구현할 수 있음.Kotlin과 Java의 차이를 비교하면서 각 함수의 역할을 정리해 보겠음. 🛠️ 1. apply • 객체의 설정(초기화)을 수행한 후, 객체 자신을 반환함. • this를 사용하여 객체 내부의 속성 변경 가능함. • Java에서는 보통 생성자 내부에서 직접 설정하거나 빌더 패턴을 사용함. ✅ Java 코드 (빌더 패턴..

BE/Kotlin 2025.02.18

[Kotlin] 코틀린 문법 3 (filter, forEach, ?:, map, is, as)

📌 1. 컬렉션 필터링 (Filtering Collections)Kotlin과 Java에서는 컬렉션(리스트, 맵 등)에서 특정 조건을 만족하는 요소만 추출할 수 있음. ✅ Java에서 컬렉션 필터링import java.util.*;import java.util.stream.Collectors;public class Main { public static void main(String[] args) { List numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); // 짝수만 필터링 List evenNumbers = numbers.stream() ..

BE/Kotlin 2025.02.17

[Kotlin] 코틀린 문법 2

📌 1. 리스트(List)✅ Java에서 리스트 사용import java.util.*;public class Main { public static void main(String[] args) { List list = new ArrayList(); list.add("Apple"); list.add("Banana"); list.add("Cherry"); System.out.println(list); }} 🔹 Java의 특징 • ArrayList를 명시적으로 선언해야 함. • add() 메서드를 사용해야 함. ✅ Kotlin에서 리스트 사용fun main() { val list = listOf("Apple", "Banana", ..

BE/Kotlin 2025.02.16

[Kotlin] 코틀린 문법

1. 변수 선언 (Variable Declaration)Javaint number = 10;String text = "Hello";boolean isActive = true; Kotlinval number: Int = 10val text: String = "Hello"val isActive: Boolean = true 차이점1. val vs var • val(Immutable, 변경 불가) = Java의 final • var(Mutable, 변경 가능) = 일반적인 변수 선언 2. 타입 추론(Type Inference) • Kotlin에서는 val number = 10 처럼 타입을 생략해도 자동으로 Int로 인식됨. 2. 함수 선언 (Function)Javapublic int add(int a, int ..

BE/Kotlin 2025.02.14