java 95

[Java] @Builder, @ToString, @EqualsAndHashCode, @Singular

롬복에서 제공하는 어노테이션으로, 객체 생성시 복잡한 생성자 호출 대신 가독성 높은 방식으로 객체를 생성할 수 있게 해준다 빌더 패턴의 기본 개념1. 객체 생성의 유연성 제공필수 필드와 선택적 필드를 구분하여 객체 생성 가능2. 가독성 향상매개변수가 많은 생성자보다 각 필드를 명확하게 지정 가능3. 불변 객체 생성객체를 생성한 후 내부 상태를 변경하지 않도록 설계 가능빌더의 사용법기본 사용법import lombok.Builder;import lombok.ToString;@Builder@ToStringpublic class User { private String name; private int age; private String email;}public class Main { publ..

BE/Java 2024.12.23

[Java] 프록시

대리인이나 중개자를 뜻하며, 소프트웨어에서는 다른 객체에 대한 접근을 제어하거나 대체 역할을 하는 객체를 말한다쉽게말해, 원래 객체에 접근하기 전에 중간에 끼어드는 객체프록시의 필요성1. 추가 작업 수행원래 객체를 호출하기 전후에 부가 작업을 수행해야 할때예: 로깅, 인증, 캐싱, 지연 로딩 등2. 원래 객체 보호원래 객체에 대한 접근을 제한하거나 제어예: 보안 관련 작업3. 성능 최적화실제 객체의 생성이나 초기화를 나중으로 미루는 경우 (지연 로딩)4. 구조적 유연성객체 교체나 확장성을 높이기 위해 중간 계층을 추가프록시의 종류1. 정적 프록시 (Static Proxy)컴파일 시점에 프록시 객체를 작성원래 객체와 동일한 인터페이스를 구현코드가 고정적이고, 클래스별로 프록시를 별도로 작성해야함interf..

BE/Java 2024.12.22

[Java] 쓰레드

자바에서 쓰레드 사용하는 법 1. Thread 클래스를 상속받는 방법java.lang.Thread 클래스를 상속받아 생성하고 실행class MyThread extends Thread { @Override public void run() { // 스레드의 작업 내용 System.out.println("Thread is running!"); }}public class Main { public static void main(String[] args) { MyThread thread = new MyThread(); thread.start(); // 스레드 시작 }}start() 메서드 : 쓰레드를 시작하고, 내부적으로 run() 메세드..

BE/Java 2024.12.22

[Spring Boot] @ManyToOne, @OneToMany

JPA 에서 사용하는 관계 매핑 어노테이션.데이터베이스 테이블간의 연관 관계를 자바 객체로 표현할때 사용.@ManyToOne (다대일 관계)의미여러개의 엔티티가 하나의 엔티티에 연결된 관계ex) 여러명의 학생이 하나의 학급에 소속되는 경우예제@Entitypublic class Student { @Id @GeneratedValue private Long id; private String name; @ManyToOne @JoinColumn(name = "class_id") // 외래 키를 매핑 private ClassRoom classRoom; // 한 명의 학생은 하나의 학급에 소속}다대일 관계를 나타냄JoinColumn은 외래키를 매핑하는데 사용, 위 예제에서는 cl..

[Spring Boot] Eager, Lazy

데이터베이스와 상호작용할때 연관된 데이터를 언제 가져올지를 결정하는 방식.주로 ORM(Object-Relational Mapping) 프레임워크(예: JPA, Hibernate)에서 사용된다.Eager (즉시 로딩)데이터를 즉시 가져오는 방식연관된 데이터까지 한번에 로드한다필요한 것 뿐만 아니라, 나중에 쓸지도 모르는 것 까지 미리 다 가져온다특징1. 즉시 로드객체를 조회할때 연관된 데이터도 함께 조회하여 메모리에 로드2. SQL 쿼리 증가 가능성연관된 모든 데이터를 가져오기 때문에 SQL 쿼리가 복잡하거나 많아질 수 있음3. 성능 저하 가능필요하지 않은 데이터를 가져오면 메모리를 낭비하거나 성능에 영향을 줄 수 있음 예시@Entitypublic class User { @Id @Generate..

[Spring Boot] IoC 컨테이너

IoC 컨테이너객체의 생성, 라이프사이클 관리, 의존성 주입을 책임지는 Spring프레임워크의 핵심 구성 요소이다제어의 역전(Inversion of Control, IoC) 원칙을 구현하여 애플리케이션의 객체와 객체 간의 의존성을 관리한다IoC객체 생성 및 의존성 관리를 개발자가 아닌 컨테이너가 담당하는 디자인 원칙이다즉, 객체는 자신이 사용할 의존성을 직접 생성하거나 관리하지 않고, 외부에서 주입받는다 IoC 의 핵심 개념객체 간의 결합도를 낮추어 코드 재사용성과 유지보수성을 높임애플리케이션의 구성 요소를 유연하고 확장 가능하게 설계IoC 컨테이너의 주요 역할1. 빈 등록 및 관리개발자가 정의한 빈을 생성하고 컨테이너에 등록빈의 라이프사이클(생성, 초기화, 소멸)을 관리2. 의존성 주입(DI)빈 간의 ..

[Java] StringBuffer, StringBuilder

문자열을 조작하는데 사용하되는 클래스1. StringBuilder 와 StringBuffer 의 공통점1.1. 가변 문자열`String`클래스는 불변이다. 즉, 문자열을 수정하면 새로운 문자열 객체를 생성한다반면, `StringBuilder`, `StringBuffer`는 가변적으로 설계되어 한 객체에서 문자열을 직접 수정할 수 있다메모리 효율성을 높이고, 문자열을 자주 수정하는 작업에서 더 빠른 성능을 제공한다2. 차이점특성`StringBuilder``StringBuffer`쓰레드 안정성비동기적으로 동작 (쓰레드 안전 아님)동기화 처리속도더 빠름동기화로 인해 약간 느림사용 상황단일 스레드 환경에서 사용멀티 스레드 환경에서 사용쓰레드 안전(Thread-Safe) : 여러 스레드가 동시에 같은 객체를 조작..

BE/Java 2024.12.19

[Java] 영속성

애플리케이션에서 생성한 데이터를 데이터베이스와 같은 영구 저장소에 저장하고, 필요할 때 다시 불러오는 과정을 의미영속성은 데이터를 객체화하고, 이를 영구적으로 저장하거나 관리하는 것을 중심으로 작동1. 영속성(Persistence)이란?데이터가 애플리케이션의 실행 주기와 독립적으로 존재할 수 있도록 저장하는 메커니즘을 의미비영속 데이터: 메모리에만 존재하며 애플리케이션 종료 시 사라지는 데이터영속 데이터: 데이터베이스에 저장되어 애플리케이션이 종료되어도 유지되는 데이터자바에서 영속성을 관리하기 위해 ORM(Object Relational Mapping)기술과 JPA를 주로 사용한다2. 영속성을 이해하기 위한 주요 개념2.1. JPAJPA는 자바 애플리케이션에서 데이터를 영속적으로 관리하기 위한 표준 AP..

BE/Java 2024.12.16

[Spring Boot] 빈이란

빈(Bean)이란Spring IoC컨테이너에 의해 관리되는 객체를 의미한다Spring 애플리케이션에는 주요 구성 요소, 서비스, 리포지토리 등의 객체를 빈으로 등록하고 관리한다 특징1. 생성 및 관리Spring 컨테이너가 Bean의 생성, 초기화, 소멸을 책임진다개발자가 직접 객체를 생성하고 관리할 필요가 없다2. 의존성 주입(DI)빈 간의 의존성을 Spring이 관리하며 애플리케이션이 실행될 때 필요한 객체를 주입한다3. 싱글톤 기본 설정Spring 컨테이너는 기본적으로 각 빈을 싱글톤으로 생성하여 동일한 인스턴스를 애플리케이션 전반에서 공유한다 (필요시 다른 스코프를 지정 가능)4. 구성 파일 또는 어노테이션으로 정의XML 파일, 자바클래스, 또는 어노테이션을 통해 빈을 정의할 수 있다Spring B..