목차 자바 프로그래밍을 하다 보면 객체를 복사해야 하는 상황이 자주 생긴다. 그런데 복사를 하는 방식에는 크게 두 가지가 있다. 바로 얕은 복사와 깊은 복사다. 이 두 가지는 겉보기엔 비슷해 보이지만, 동작 방식과 결과에서 큰 차이를 보인다. 천천히 그리고 가볍게 정리해 보자. 얕은 복사(Shallow Copy) 얕은 복사는 객체의 주소값만 복사하는 방식이다. 즉, 새로운 객체를 만들긴 하지만 내부에서 참조하는 필드들은 원본 객체와 동일한 주소를 공유한다. 따라서 원본 객체의 내부 값이 변경되면, 복사한 객체에서도 그 변경사항이 반영된다.public Book shallowCopy() { return new Book(this.name, this.author);}이 메서드는 새로운 Book 객체..
목차 Spring Data JPA는 데이터를 다루는 데 있어 강력한 도구다. 그중에서도 새로운 Entity인지 여부를 판단하는 기능은 데이터 처리 효율성과 무결성을 보장하는 데 중요한 역할을 한다. 이번 글에서는 Spring Data JPA가 새로운 Entity를 어떻게 식별하는지, 그리고 이를 구현하기 위해 필요한 핵심 원리를 간단히 정리해 보자. 선 요약 새로운 Entity 식별 기준기본적으로 JpaEntityInformation 인터페이스의 isNew() 메서드로 판단.@Version 필드와 @Id 필드의 값으로 새 객체 여부를 결정.@Version 필드의 역할필드 없음: 기본 로직으로 판단.Wrapper 타입: null 여부 확인.Primitive 타입: 기본값 여부 확인.@Id 필드와 키 ..
목차 스프링 부트(Spring Boot)로 개발을 진행할 때, 설정 파일에 정의된 값을 쉽게 주입하기 위해 @Value 어노테이션을 자주 사용한다. 이 어노테이션은 특정 클래스에 값을 주입하여 환경별로 달라질 수 있는 값을 유연하게 관리할 수 있는 유용한 방법을 제공한다. 이 글에선 @Value 어노테이션의 사용법과 함께 주의해야 할 몇 가지 사항에 대해 간단히 살펴보자. 선 요약 기본 사용법: @Value("${property.key}") 형식으로 설정 파일의 값을 주입한다.프로파일 적용 가능: 스프링 프로파일을 사용해 환경별 다른 값을 주입할 수 있다.주입 방식: 필드 주입, 생성자 주입, 세터 주입 중 상황에 맞게 선택하여 사용한다. -> 생성자 주입이 안전하고 테스트에 유리함.@Configurat..
자바에서 의존성 주입이란 객체 지향 프로그래밍에서 객체 간의 의존성을 외부에서 주입하는 것을 가리킨다. 이를 통해 객체 간의 결합도를 낮추고 코드의 유지보수성을 높일 수 있다. 이 글에서는 의존성 주입을 구현하는 몇 가지 방법과 특징에 대해 간단히 알아본다. 늘 그렇듯이 선요약부터: 생성자 주입: 강한 의존성을 보장하며 불변성을 유지할 수 있다.세터 주입: 유연하고 지연 주입이 가능하지만 의존성이 강제되지 않는다.필드 주입: 코드가 간결해지지만 가독성이 떨어지고 테스트가 어렵다.인터페이스 주입: 유연하지만 복잡도가 증가한다. Constructor Injection 생성자 주입은 객체가 생성될 때 필요한 의존성을 생성자를 통해 주입하는 방법이다.public class Service { private..
목차 자바에서 기본 자료형(primitive type)은 null을 가질 수 없으며, 이는 자바의 설계 철학, 그리고 메모리 관리 방식에 기인한다. 구체적으로 이해하기 위해서는 기본 자료형과 객체 참조형(reference type)의 차이점을 포함해 자바의 설계 철학과 메모리 관리 방식까지 살펴볼 필요가 있다. 간결하게 요약해 보자. 기본 자료형 vs. 참조 자료형 기본 자료형 기본 자료형은 자바에서 가장 기본적인 데이터 타입이며, 값 자체를 저장한다. 아래와 같은 8개의 기본 자료형이 있다. 정수형: byte, short, int, long실수형: float, double문자형: char논리형: boolean기본 자료형은 메모리에서 고정된 크기의 공간을 차지하며, 실제 데이터 값을 직접 저장한다. ..
목차 자바 제네릭(Generic)은 자바 5에서 도입된 기능으로, 클래스, 인터페이스, 메서드의 데이터 타입을 지정하지 않고 사용할 수 있게 해 준다. 제네릭을 사용하면 코드의 재사용성이 높아지고, 타입 안전성이 보장되며, 코드의 가독성도 향상되는 장점이 있다. 이 글에서는 제네릭의 기본 개념에서 시작해 사용법, 예시 등을 간결히 정리한다. Basic Concepts 앞서 설명했듯이 제네릭은 클래스, 메서드 등에서 사용할 데이터 타입을 미리 지정하지 않고, 나중에 실제 사용할 때 구체적인 타입을 지정하도록 해준다. 이는 코드 재사용성을 크게 높일 수 있다. 제네릭 타입을 사용하는 클래스나 메서드는 다음과 같은 형태를 가진다. class 클래스이름 { private T 변수; public T 메..
[WebFlux]자주 사용하는 연산자 정리(1) [WebFlux]자주 사용하는 연산자 정리(2) - buffer [WebFlux]자주 사용하는 연산자 정리(3), 그리고 [WebFlux]자주 사용하는 연산자 정리(4) + 목차 마지막으로 연산자를 정리한 게 벌써 거의 세 달 전이다. 회사에 들어와 웹플럭스로 개발을 하며 정리하고 싶은 건 산더미 같았지만 다른 공부할 것이 너무 많고 바쁜 데다가 프로젝트까지 겹쳐 전혀 정리를 하지 못했다. 그래서 오랜만에 돌아온 연산자 정리 시간. 웹플럭스 연산자 사전이라도 있으면 좋겠다. defer() defer 연산자는 Mono와 Flux 둘 모두에서 사용가능한 연산자이다. 이 연산자는 리액티브 프로그래밍에서 지연 평가(Lazy Evaluation)를 수행하기 위한 연..
목차 언젠가 언급했지만, 뜻하지 않게 자바 17과 웹플럭스를 이용한 웹 개발을 하게 되었다. 리액티브 프로그래밍 자체에 흥미가 있어 웹플럭스는 공부도 하고 써보기도 했지만, 갑작스러운 자바 17 사용은 당황이 될 수밖에 없었다. 물론 자바 자체가 강력한 하위호환을 지원해서 당장 힘든 일은 없었지만, 레거시 코드를 구성하신 개발자 분들께 물어봐도 왜 자바 17을 선택했는지 아는 분이 계시지 않아 아쉬웠다. 그렇다고 한참 전에 틀을 잡은 개발자분의 연락처를 물어보기도 그렇고... 해서 처음부터 정리하고 싶었지만 미루고 미뤘던 자바 17의 특징에 대해 가볍게 정리하려고 한다. 추가로 에러메시지를 출력하는 System.err.println()까지. Java 17 기존에 사용하던 자바 11과의 비교보다는 17의 ..
[WebFlux]자주 사용하는 연산자 정리(1) [WebFlux]자주 사용하는 연산자 정리(2) - buffer [WebFlux]자주 사용하는 연산자 정리(3), 그리고 목차 WebFlux Operators [WebFlux]자주 사용하는 연산자 정리(1) [WebFlux]자주 사용하는 연산자 정리(2) - buffer [WebFlux]자주 사용하는 연산자 정리(3), 그리고 글의 순서는 연산자의 중요도나 로직의 흐름과는 아무 관련이 없다. 그저 내가 코드를 읽다가 마주친 순서를 마구잡이로 적어놓은 메모장에 근거할 뿐. 글 제목에 '+'가 붙어있는 이유는 연산자가 아니더라도 처음 봤거나 알아야 할 것 같은 경우라 판단이 들면 이 글에 같이 추가해 버렸기 때문이다. 굳이 연산자와 그 외 클래스를 나누어야 할..
[WebFlux]자주 사용하는 연산자 정리(1) [WebFlux]자주 사용하는 연산자 정리(2) - buffer [WebFlux]자주 사용하는 연산자 정리(4) + 목차 flatMapMany() Mono를 받아 Flux를 반환하는 연산자이다. 하나의 값에서 시작해 여러 개의 값을 리턴한다는 점에서 reduce()와 반대되는 기능을 하는 것처럼 보이기도 한다. 사용 예시는 아래와 같다. public class Example { public static void main(String[] args) { Mono numbers = Mono.just(3); Flux result = numbers.flatMapMany(num -> Flux.just( num, num + 2, num * 2, num * num ) )..
- Total
- Today
- Yesterday
- 야경
- 여행
- 스프링
- 세모
- spring
- Python
- 스트림
- java
- 파이썬
- 유럽
- 동적계획법
- BOJ
- RX100M5
- 백준
- 지지
- 남미
- 면접 준비
- Algorithm
- 칼이사
- Backjoon
- 자바
- 리스트
- 세계여행
- a6000
- 유럽여행
- 알고리즘
- 기술면접
- 중남미
- 세계일주
- 맛집
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |