BE 108

[Spring Boot, JPA] 리플렉션

✅ JPA는 객체를 데이터베이스와 매핑할 때 “리플렉션(Reflection)“이라는 기능을 사용합니다.✅ 리플렉션을 사용하면 클래스 내부의 정보(필드, 메서드, 생성자 등)를 실행 중(runtime)에 확인하고 변경할 수 있습니다.✅ JPA는 리플렉션을 통해 엔티티 객체를 생성하고 필드 값을 직접 주입합니다. 1. 리플렉션(Reflection) 기본 개념🔹 (1) 일반적인 객체 생성 방식 자바에서 객체를 생성할 때 new 연산자를 사용합니다.public class Member { private String name; public Member(String name) { this.name = name; }}public class Main { public static voi..

[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

[Spring Boot] Service를 Interface + ServiceImpl 구조로 사용하는 이유

Spring Boot에서 Service 계층을 인터페이스(Service)와 구현 클래스(ServiceImpl)로 분리하여 사용하는 패턴을 많이 볼 수 있음.예를 들어, 다음과 같은 구조를 가짐:📂 service ├── UserService.java (인터페이스) ├── UserServiceImpl.java (구현 클래스) 이렇게 분리하는 이유는 크게 확장성, 테스트 용이성, 유지보수성, 결합도 감소 때문임. 📌 1. Service를 Interface + ServiceImpl로 분리하는 이유✅ (1) 느슨한 결합 (Low Coupling) • 인터페이스를 사용하면 구현체를 쉽게 교체할 수 있음. • 클라이언트 코드(Controller, 다른 Service)가 UserServiceImpl을 직접 ..

[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

[Spring Boot] REST Docs + Asciidoctor

Spring Boot에서 REST Docs와 Asciidoctor를 사용하면 API 명세서를 자동으로 생성할 수 있음.이는 테스트 코드 기반으로 문서를 생성하기 때문에, 코드와 문서가 항상 일치하도록 유지할 수 있음.📌 1. REST Docs + Asciidoctor란?🔹 Spring REST Docs • API 문서를 자동으로 생성할 수 있도록 지원하는 라이브러리 • API 응답을 테스트하며, 이를 기반으로 문서를 생성함 • 문서와 실제 동작하는 코드의 일관성 유지 가능 🔹 Asciidoctor • AsciiDoc 문법을 사용하여 문서를 작성하는 도구 • 마크다운(Markdown)과 비슷하지만 기능이 더 강력함 • HTML, PDF, ePub 등의 다양한 형식으로 변환 가능 ✅ 왜 REST Doc..

[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