? 궁금증 오늘 JAVA 기초 스터디 발표를 듣던 중, instanceof 연산자가 피연산자가 어떤 클래스의 인스턴스인지, 하위 클래스인지, 또는 인터페이스 구현체인지 여부를 확인한다는 것을 배웠습니다. 이 과정에서 클래스 계층 구조를 확인해야 한다는 점이 '무거운 연산이 아닐까?'라는 궁금증을 갖게 되었습니다. 왜냐하면 특히 깊은 상속 구조를 가진 클래스...
✏️ 주문 상세 조회 API를 개발하면서 N+1 문제를 해결하기 위한 두 가지 접근법, EntityGraph와 QueryDSL 프로젝션을 비교 검토했다. 초기에는 JPA의 EntityGraph를 적용했으나 실제 쿼리 로그를 분석하며 몇 가지 개선이 필요한 부분을 발견했다. > EntityGraph는 코드가 간결...
✏️ 주문 상세 조회 API를 개발하면서 N+1 문제를 해결하기 위한 두 가지 접근법, EntityGraph와 QueryDSL 프로젝션을 비교 검토했다. 초기에는 JPA의 EntityGraph를 적용했으나 실제 쿼리 로그를 분석하며 몇 가지 개선이 필요한 부분을 발견했다. > EntityGraph는 코드가 간결...
✏️ JPA는 데이터베이스와 객체 간 매핑을 처리하는 중요한 프레임워크로, 다양한 필드 제약 조건을 제공한다. 그러나 각각의 속성은 적용되는 계층과 목적이 다르기 때문에 이를 혼동하지 않고 올바르게 사용해야 한다.
객체지향 프로그래밍과 관계형 데이터베이스 간의 패러다임의 불일치 관점에서 JPA와 같은 ORM의 효율성을 학습했습니다.
payload STOMP 메시징에서 payload(페이로드)는 실제로 주고받는 메시지의 내용물이다. > - 서버로부터 실제로 받게 될 메시지 데이터 > - 어떤 형태로 받을지 지정하고(getPayloadType) > - 받은 후 어떻게 처리할지 정의(handleFrame)하는 데 사용된다. 구독 자체에는 payload가 필요 없지만, 구독 후 메시지를 ...
MockMvc를 직접 설정하는 경우와 그 문제점 직접 설정하는 경우, MockMvc 객체를 수동으로 생성하고, 컨트롤러를 수동으로 주입하거나, 의존성들을 수동으로 모킹해야 한다. 이를 통해 테스트 환경을 구성하는 데 많은 코드가 필요하고, 번거로운 설정 작업이 동반된다. 1. MockMvc 수동 설정 예시 문제점: MockMvc 객체를 매번 수동으로 ...
@AutoConfigureMockMvc는 Spring Boot에서 테스트를 쉽게 하기 위해 제공하는 어노테이션이다. 주로 Spring MVC의 컨트롤러 테스트를 할 때 사용되며, MockMvc를 자동으로 설정하고 주입해준다. 이를 통해 컨트롤러 계층을 별도로 실행하지 않고도 요청과 응답을 모킹하여 테스트할 수 있다. > #### MockMvc를 직접 설정...
함수형 인터페이스(Functional Interface)는 자바에서 람다식을 지원하기 위해 도입된 인터페이스의 종류다. 특징 ① 단 하나의 추상 메서드를 가짐 단 하나의 추상 메서드만을 가지는 인터페이스인데 이는 단 하나만 가지고 있어야 람다식과 인터페이스의 메서드가 1:1로 연결될 수 있기 때문이다(default, static, private은 가능,...

Java의 Stream API > Java 8에 도입된 기능으로 데이터의 흐름을 다루기 위한 선언형 API다. > 스트림을 사용하여 필터링, 매핑, 정렬 등 다양한 데이터 처리 작업을 적용할 수 있으며 최종 결과를 배열이나 컬렉션으로 변환할 수 있다. > 스트림은 데이터 처리 작업을 연속적인 파이프라인으로 나타낼 수 있어 가독성이 높고 병렬 처리를 쉽게 ...
연속적인 데이터의 흐름 또는 데이터를 전송하는 소프트웨어 모듈을 가리키며, 연속된 데이터의 단방향 흐름을 추상화한 것이다. > 스트림은 자료의 입출력을 도와주는 중간 매개 역할을 하며 메모리의 원시 데이터를 프로그래머가 사용할 수 있는 데이터로 바꾸어주는 역할도 수행한다. 어느 한 쪽에서 다른 쪽으로 데이터를 전달하려면, 두 대상을 연결하고 데이터를 전송...
Comparator > 함수형 인터페이스로, 두 개의 객체를 인자로 받아 그들의 순서를 비교하는 메서드인 compare을 제공하여 객체의 정렬을 가능하게 한다. .compare() 구현 반환 값이 Comparator인 메서드를 할당한다. Collections.sort() Collections.sort(List list, Comparator c) 람...
이미 정의된 메서드를 직접 참조하여 람다 표현식을 더 간결하게 작성할 수 있다. 유형 ① 정적 메서드 참조 클래스명::메서드명 ② 인스턴스 메서드 참조 객체참조::메서드명 ③ 특정 객체의 인스턴스 메서드 참조 클래스명::메서드명 ④ 생성자 참조 클래스명::new
프로그래밍 언어에서 함수(메서드)를 간단한 식(expression)으로 표현하는 방식. > > Java에서 람다식은 익명함수(anonymous function)의 한 형태로, 메서드에 대한 구현을 간결하게 표현하는 방법이다. 함수와 메서드 함수와 메서드는 근본적으로 동일하지만, 함수는 일반적인 용어이고, 메서드는 객체지향 개념에서 사용되는 용어다. 함수는...
반환값이 있는 메서드의 경우, return문 대신 식(expression)으로 대신할 수 있다. 식의 연산 결과가 자동으로 반환값이 되기 때문이다. 이때 문장이 아닌 '식'이므로 끝에 ;을 붙이지 않는다. 람다식에 선언된 매개변수의 타입은 추론이 가능한 경우 생략할 수 있다. 선언된 매개변수가 하나일 경우 괄호 ()를 생략할 수 있다. 단,...
제약 요약 ① 제네릭 클래스의 static 멤버에 타입변수를 활용할 수 없다(∵정적 바인딩). ② 제네릭 타입을 선언한 메서드는 static 멤버가 될 수 있다. 클래스가 로드될 때 정적 제네릭 메서드도 메모리에 로드되지만, 타입 매개변수는 구체적 타입으로 결정되지 않다가, 호출될 때 전달된 인수를 기반으로 타입이 결정되기 때문이다. ③ 객체 / 배열 ...
제네릭스 > 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시 타입을 체크해주는 기능 도입 배경 기존의 컬렉션 프레임워크는 Object 타입을 사용하여 모든 종류의 객체를 하나의 자료구조에 저장할 수 있었다. 이로 인해 컬렉션의 요소를 활용하기 위해 다운캐스팅을 수행하는 경우가 많았는데, 이는 런타임 시에 타입 불일치 오류(ClassCas...
키를 값에 매핑하는 객체로, Map에는 중복 키가 포함될 수 없고 각 키는 최대 하나의 값에 매핑될 수 있다. 따라서 키를 이용하여 값을 검색하거나 저장할 수 있는 구조의 인터페이스다. > 키의 순서나 값의 순서를 보장하지 않고 키와 값 모두 null이 될 수 있다. 구현 클래스 HashMap 해시 테이블을 사용하여 요소를 저장하며 순서를 보장하지 않...