BE 129

[Spring Boot] DAO와 Repository의 차이?

1️⃣ DAO (Data Access Object)란? DAO는 데이터베이스와의 직접적인 상호작용을 담당하는 객체로, SQL을 사용하여 CRUD(Create, Read, Update, Delete) 작업을 수행하는 계층을 의미함. 📌 특징 • 데이터베이스와 직접 연결하여 데이터를 조회, 저장, 수정, 삭제하는 역할. • JDBC, MyBatis, Hibernate, JPA 등 다양한 방법으로 구현 가능. • 비즈니스 로직(Service)과 데이터 접근을 분리하여 코드의 유지보수성을 높임. 📌 DAO 예제 (JDBC 사용)import java.sql.*;public class UserDao { private static final String URL = "jdbc:mysql://localhost:..

[Spring Boot] DAO

DAO (Data Access Object)란? 1️⃣ DAO 개념 DAO(Data Access Object)는 데이터베이스(DB)와 애플리케이션 간의 데이터 접근을 담당하는 객체임. 즉, DAO는 데이터베이스와 직접 상호작용하는 계층으로, 데이터를 조회, 저장, 수정, 삭제(CRUD)하는 역할을 함. DAO를 사용하는 이유: • 비즈니스 로직과 데이터 접근 코드의 분리 (유지보수성 증가) • 데이터베이스 변경 시 애플리케이션 코드에 최소한의 영향 • 코드의 재사용성을 높이고 가독성을 향상 2️⃣ DAO 패턴 구조 DAO는 MVC 패턴에서 Model 계층의 일부로 사용됨. DAO 패턴의 주요 구성요소: 1. Entity (DTO, VO) • DB 테이블과 1:1 매핑되는 데이터 객체 2. DAO (Dat..

[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

[Java] 비동기 처리 (try-catch)

자바에서 비동기 처리 시 예외 처리 (try-catch) 자바에서 비동기 처리(Asynchronous Processing) 를 할 때 예외(Exception)를 적절하게 처리하는 것은 매우 중요함.비동기 코드에서는 기존의 try-catch 문이 제대로 동작하지 않을 수 있기 때문에 별도의 예외 처리 방식을 적용해야 함. 1️⃣ 기본적인 try-catch 블록 (동기 코드에서 예외 처리) 동기(Synchronous) 코드에서는 try-catch 블록을 사용하여 예외를 쉽게 처리할 수 있음.public class SyncTryCatchExample { public static void main(String[] args) { try { int result = 10 / 0;..

BE/Java 2025.03.28

[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

[Java] 체인호출

자바에서 체인 호출(Method Chaining)이란? 자바에서 체인 호출(Method Chaining)이란 객체의 메서드를 호출한 후, 그 결과로 받은 객체를 이용하여 바로 다른 메서드를 연속해서 호출하는 방식을 말함.간단히 표현하면, 메서드가 연속적으로 연결되어 호출되는 형태임. 일반적으로 다음과 같은 형태를 말함.객체.method1().method2().method3();  체인 호출의 원리와 구조 체인 호출은 다음 두 가지 핵심 원리로 동작함. • 메서드가 반드시 객체(주로 자기 자신, 즉 this)를 반환해야 함. • 반환받은 객체를 통해 다음 메서드를 계속 호출하는 방식임. 즉, 이런 구조임.object.method1().method2().method3(); • 위 코드가 실행되는 과정: 1...

BE/Java 2025.03.24

[Spring Boot] ApplicationContext

ApplicationContext란? ApplicationContext는 스프링(Spring)의 핵심 인터페이스로, 스프링이 관리하는 Bean들의 생성, 관리, 설정 등을 담당하는 IoC 컨테이너임. IoC(Inversion of Control, 제어의 역전)란 객체의 생성과 관리를 프로그래머가 아니라 외부 컨테이너(스프링 컨테이너)에 맡기는 것을 의미하는데, 스프링에서 이 역할을 하는 컨테이너가 바로 ApplicationContext임. 즉, 스프링에서 사용되는 거의 모든 객체(Bean)는 ApplicationContext에 의해 관리된다고 보면 됨. ApplicationContext의 핵심 역할 ApplicationContext의 핵심적인 기능들은 다음과 같음. • Bean 생성 및 관리 • 의존성 ..

[Spring Boot] 스프링의 생성자 주입

스프링(Spring)의 생성자(Constructor) 주입이란? 스프링(Spring)에서 생성자 주입(Constructor Injection)이란, 객체를 생성할 때 스프링이 필요한 의존성(변수)을 생성자의 매개변수(parameter)를 통해 주입해주는 것을 의미함. 즉, 클래스가 의존하는 객체를 클래스 스스로 생성하는 것이 아니라, 스프링 컨테이너가 대신 생성하여 클래스의 생성자를 통해 전달하는 방식임. 💡 의존성 주입(DI, Dependency Injection)이란? 생성자 주입을 제대로 이해하려면 우선 의존성 주입(DI)의 개념을 알아야 함. 의존성 주입이란 객체가 직접 의존하는 다른 객체를 생성하지 않고, 외부(스프링 컨테이너)로부터 제공받는 방법임. 스프링에서는 의존성을 다음과 같은 방법으로..

[Java] File I/O

1. File I/O란? File I/O는 파일 입출력(File Input/Output) 의 줄임말임. 쉽게 말해 프로그램이 파일에서 데이터를 읽거나, 처리된 데이터를 파일로 저장하는 작업을 의미함. • Input(입력)파일 → 프로그램 방향으로 데이터를 읽음. • Output(출력)프로그램 → 파일 방향으로 데이터를 저장함. 즉, 파일에 데이터를 영구적으로 저장하거나 외부 데이터를 읽어오는 용도로 사용됨. 예를 들어, 메모장에 일기를 쓰는 행위는 Output이고, 작성된 일기를 나중에 읽어보는 행위는 Input임. 2. Java에서의 File I/O 처리 방법 Java에서는 파일 데이터를 처리할 때 크게 두 가지 스트림(Stream)을 제공함. ① 바이트 기반 스트림(Byte Stream) • 데이터를..

BE/Java 2025.03.18

[Java] BufferedReader

✅ BufferedReader의 모든 요소 (메서드 및 기능) BufferedReader는 입력을 효율적으로 처리하는 Java 클래스로, 버퍼를 사용하여 빠르게 문자열을 읽을 수 있는 기능을 제공합니다. ✅ 1. BufferedReader 생성자BufferedReader는 다음과 같은 생성자를 제공합니다.public BufferedReader(Reader in) // 기본 생성자 (Reader 객체 필요)public BufferedReader(Reader in, int bufferSize) // 버퍼 크기 지정 가능📌 Reader 객체 (InputStreamReader, FileReader 등)를 전달해야 함📌 기본 버퍼 크기는 8192 bytes (8KB) 📌 예제im..

BE/Java 2025.03.17