Java 22

[Java] @NoArgsConstructor, @AllArgsConstructor

Lombok 생성자 어노테이션 @NoArgsConstructor 과 @AllArgsConstructor@NoArgsConstructor@NoArgsConstructor 는 매개변수가 없는 기본 생성자(default constructor)를 생성한다. 필드를 초기화하지 않고 객체를 생성할 때 유용하다. 예를 들어, Spring과 같은 프레임워크에서 빈(Bean)으로 객체를 등록할 때 자주 사용된다.import lombok.NoArgsConstructor;@NoArgsConstructorpublic class Example { private String name; private int age;} 위 코드는 Example 클래스에 매개변수가 없는 기본 생성자를 추가한다. new Example() ..

Java/기본 2024.11.12

[Java] 트랜잭션

Java에서 트랜잭션(Transaction)은 데이터베이스 상태를 관리하기 위한 중요한 개념이다. 트랜잭션은 여러 작업을 하나의 논리적인 작업 단위로 묶어주며, 모든 작업이 성공해야지만 전체 작업이 커밋(commit)되고, 중간에 하나라도 실패하면 롤백하여 데이터의 일관성을 유지한다. 1. 트랜잭션의 ACID 속성원자성(Atomicity) : 트랜잭션 내 모든 작업이 하나의 단위로 실행되어야 하며, 일부만 성공하거나 실패해서는 안된다. 즉, 증간에 오류가 발생하면 트랜잭션 전체가 롤백된다.일관성(Consistency) : 트랜잭션이 완료되면 데이터베이스가 일관된 상태를 유지해야 한다.고립성(Isolation) : 트랜잭션 간 서로 독립적으로 실행되며, 트랜잭션이 완료되기 전까지 다른 트랜잭션이 중간 상태..

Java/기본 2024.11.11

[Java] CompletableFuture

CompletableFuture 는 Java 8 에서 도입된 클래스로, Future 의 한계를 보완하여 비동기 작업을 더 유연하게 관리할 수 있는 도구다.Future 는 비동기 작업 결과를 기다릴 수 있지만, 작업 완료 시 알림을 받거나 작업을 체인으로 연결하는 기능이 제한적이다.CompletableFuture 는 이러한 기능을 지원하며, 복잡한 비동기 로직을 간결하게 구현할 수 있다. CompletableFuture 의 주요 기능비동기 작업 체인:thenApply(), thenAccept(), thenRun() 등을 통해 비동기 작업이 완료되면 후속 작업을 수행할 수 있다. 이 덕분에 여러 작업을 체인으로 연결하는 비동기 흐름을 구현할 수 있다.예외 처리:exceptionally() 메서드를 사용해 비..

Java/기본 2024.11.08

[Java] Future

Future란 무엇인가?비동기 작업의 결과를 나중에 받을 수 있는 객체인 Future 는 Java의 java.util.concurrent 패키지에서 제공된다.작업이 완료될 때까지 기다리지 않고 다른 작업을 할 수 있으며, 완료되면 결과를 받을 수 있는 유연성을 제공한다. 사용 예시데이터베이스 조회, 원격 API 호출과 같은 시간이 오래 걸리는 작업을 비동기 처리할 때 유용하다 특징비동기 실행 : 작업이 백그라운드에서 실행된다결과 대기 : 완료될 때까지 기다리지 않고, 작업이 끝난 후 결과를 가져온다작업 상태 확인 : 작업이 완료되었는지, 취소되었는지 확인이 가능하다Future의 주요 메서드Future 는 여러 메서드를 통해 비동기 작업을 관리한다get() : 작업이 완료딜 때까지 기다렸다가 결과를 반환한..

Java/기본 2024.11.08

[Java] Java에서 final로 진짜_최종_최종_최종 불변 객체 만들기

이전 글에서 final을 앞에 달아주기만 하면 무적의 불변 객체가 되 .... .는줄 알았으나 ....불변 객체가 기본적으로 안전성을 높여주지만, 외부에서 참조하는 가변 객체를 포함하거나, 불변 객체의 일부 상태가 방어적 복사 없이 외부로 노출되는 경우 안전하지 않을 수 있다는 것. !! 그렇다면 불변 객체의 안전을 위협하는 상황에 대해서 알아보자1. 가변 객체를 포함할 때- 불변 객체 내부에 가변 객체가 포함되면, 해당 가변 객체의 상태가 외부에서 변경될 가능성이 생긴다. 예를 들어 Date 객체는 가변이므로, final 필드에 포함되더라도 객체 내부 상태가 바뀔 수 있다.public final class Period { private final Date startDate; private f..

Java/기본 2024.10.31

[Java] Java에서 final로 불변 객체 만들기

먼저 final을 이용해서 불변 객체를 만들기 전에 final의 개념과 Java에서 불변 객체가 어떤 의미인지 알아보자final은 자바에서 특정 값이나 상태를 변경하지 않도록 보장하는 키워드인데, 사용 위치에 따라 3가지로 분류할 수 있다. 1. 변수에 사용변수에 final을 붙이면 변수의 값을 한 번만 할당하도록 보장하는 역할을 한다.1-1. 기본 데이터 타입에 final 사용기본 데이터 타입(int, double, char 등)에 final을 붙이면, 값이 한 번 할당된 후에는 변경할 수 없다.public class Example { public static void main(String[] args) { final int number = 10; number = 20; ..

Java/기본 2024.10.30

[Effective Java] Chapter 8. 메서드

Item 49. 매개변수가 유효한지 검사하라"오류는 가능한 한 빨리 (발생한 곳에서) 잡아야 한다"메서드 몸체가 실행되기 전에 매개변수를 확인한다면 잘못된 값이 넘어왔을 때 즉각적이고 깔끔한 방식으로 예외를 던질 수 있다. public과 protected 메서드는 매개변수 유효성 검사를 통해 던질 수 있는 예외를 반드시 문서화하여 API 사용자가 메서드의 동작을 명확히 이해하고 예외 처리를 설계할 수 있도록 한다Javadoc 의 @throws 태그를 사용해 예외 유형과 발생 조건을 설명하면, API의 신뢰성과 사용 편의성을 높일 수 있다. public이 아닌 메서드에서는 단언문(assert)을 사용해 매개변수의 유효성을 검증할 수 있다.그렇다면 왜 단언문을 사용할까?주로 개발 중에만 활성화되어 디버깅과 ..

Java/Effective Java 2024.10.27

[Effective Java] Chapter 7. 람다와 스트림

Item 42. 익명 클래스보다는 람다를 사용하라왜 람다 표현식을 권장할까?import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;public class AnonymousClassExample { public static void main(String[] args) { List words = new ArrayList(); words.add("Banana"); words.add("Apple"); words.add("Cherry"); // 익명 클래스 사용 Collections.sort(wor..

Java/Effective Java 2024.10.27

[Java] 스트림(Stream)

Java에서 스트림(stream)은 데이터 처리 작업을 보다 간결하고 효율적으로 수행하기 위한 API로, Java8에 추가되었다.컬렉션(리스트, 집합 등)이나 배열 등의 데이터를 다룰 때, 필터링, 변환, 집계 등 다양한 작업을 선언형으로 할 수 있도록 돕는다.스트림은 데이터를 반복적으로 처리하는 대신 파이프라인 방식으로 처리하는 것이 특징이다.스트림을 간단히 말하면 데이터를 한 줄로 처리하는 작업 방식이라고 보면 된다.특징1. 선언형: for-loop와 같은 명령형 코드보다 간결하게 "무엇을 할지"에 집중2. 파이프라인 처리: 여러 연산을 체인 형식으로 연결해 순차적으로 처리3. 데이터 원본 불변성: 스트림 연산은 데이터 원본을 변경하지 않으며 새 스트림을 반환4. 지연 연산(Lazy Evaluatio..

Java/기본 2024.10.27

[Java] 표준 함수형 인터페이스

표준 함수형 인터페이스는 Java에서 자주 사용하는 기본적인 함수 형태를 미리 정의해 둔 인터페이스들로, java.util.function 패키지에 포함되어 있다. 얘네들은 람다와 메서드 참조를 더 간편하게 사용할 수 있도록 도와주는 착한 친구들이라고 보면 된다. 이런 인터페이스들은 주로 메서드가 하나만 있는 함수형 인터페이스고, 입력과 출력의 형태에 따라 적절한 이름과 구조를 가지고 있다. 종류1. Function: 입력값 T를 받아 출력값 R을 반환하는 함수메서드: R apply(T t)예시: 문자열을 받아 길이를 반환Function lengthFunction = s -> s.length();lengthFunction.apply("Java"); // 4 2. Consumer: 입력값 T를 받아 처리만..

Java/기본 2024.10.27