로깅 출력 어느 것으로?(feat.Interpolation vs Concatenation)
·
프레임워크/자바 스프링
로깅 사용 시, interpolation 혹은 concatenation 방법 중 하나를 사용 할 수 있습니다. 이에 대해 알아 봅니다. 인터폴레이션 방법 log.warn("게시글 업데이트 실패. 게시글을 찾을 수 없습니다 - dto: {}", articleDto); 이 코드는 인터폴레이션 방법의 예입니다. {}는 articleDto 객체를 문자열로 변환하여 로그 메시지에 삽입하는 자리표시자입니다. 연결 방법 log.warn("게시글 업데이트 실패. 게시글을 찾을 수 없습니다 - dto: " + articleDto); 이 코드는 연결 방법의 예입니다. + 연산자는 두 문자열을 연결하여 새로운 문자열을 생성합니다. 성능 차이 인터폴레이션 방법은 일반적으로 연결 방법보다 더 효율적입니다. 특히 복잡한 객체인 ..
findById vs getReferenceById 차이
·
프레임워크/자바 스프링
JPA findById vs getReferenceById JPA(Java Persistence API)를 사용하여 데이터베이스에서 엔티티를 조회할 때 일반적으로 사용되는 두 가지 메서드가 있습니다. findById와 getReferenceById는 일부 유사점이 있지만, 중요한 차이점이 있습니다. findById 지정된 ID의 엔티티를 조회하고, 해당 엔티티가 없으면 null을 반환합니다. 데이터베이스에서 엔티티를 직접 조회합니다. 엔티티 객체 또는 null을 반환합니다. 데이터베이스에서 엔티티를 로드하는 데 필요한 쿼리를 생성하고 실행합니다. 데이터베이스 조회를 즉시 수행하고 엔티티를 직접 반환합니다. getReferenceById 지정된 ID의 엔티티에 대한 프록시 참조를 반환합니다. 데이터베이스에..
ArrayList, LinkedList, Vector 차이
·
프로그래밍 언어/자바
ArrayList, Vector, LinkedList는 모두 자바에서 제공하는 컬렉션 프레임워크의 일부인 동적 리스트 구현입니다. 각 컬렉션은 고유한 특징과 장단점이 있습니다. ArrayList: ArrayList는 동적 배열을 구현합니다. 즉, 요소를 추가하거나 제거함에 따라 크기가 동적으로 변화합니다. ArrayList는 고정 크기 배열을 사용하여 요소를 저장합니다. 요소를 추가하거나 제거할 때 필요한 경우 새로운 배열로 복사하는 "복사-기존-수정" 전략을 사용합니다. ArrayList는 임의 접근(random access)을 지원합니다. 즉, 인덱스를 사용하여 특정 요소에 빠르게 접근할 수 있습니다. O(1)의 시간 복잡도를 가집니다. ArrayList는 요소를 삽입하거나 제거하는 작업이 비용이 많..
[OOP] 음식 주문하기
·
여러가지/이것저것
음식점에서 음식을 주문하는 프로세스를 구현하기 위한 도메인 모델링 과정을 요약하면 다음과 같습니다: 1. 도메인 구성 객체 식별 도메인 내 객체: 음식점의 주문 프로세스에서 중요한 역할을 하는 객체를 식별합니다. 이에는 손님, 메뉴판, 다양한 음식(예: 돈까스, 냉면, 만두), 요리사, 요리가 포함됩니다. 2. 객체 간 관계 분석 손님과 메뉴판: 손님은 메뉴판을 통해 음식을 선택합니다. 손님과 요리사: 손님은 요리사에게 음식을 요청(주문)합니다. 요리사와 요리: 요리사는 손님의 주문에 따라 요리를 준비합니다. 3. 도메인 모델링과 추상화 객체 추상화: 식별된 객체들을 정적인 타입으로 추상화하여, 각 객체의 역할과 책임을 명확히 합니다. 손님 타입: 주문하는 역할을 담당합니다. 요리 타입: 돈까스, 냉면,..
일급 컬렉션
·
프로그래밍 언어/자바
개요 자바에서 "일급 컬렉션(First-Class Collection)"이라는 용어는 컬렉션을 래핑하고, 그 외의 다른 멤버 변수가 없는 단일 클래스를 의미합니다. 이 개념은 객체지향 프로그래밍에서 컬렉션을 좀 더 안전하고, 유지보수성이 높으며, 응집도가 높은 방식으로 관리하기 위해 사용됩니다. 1. 목적 일급 컬렉션의 주된 목적은 비즈니스 로직에서 사용되는 컬렉션에 대해 더 풍부한 행동을 제공하고, 컬렉션의 불변성을 유지하며, 보다 명시적인 이름을 통해 컬렉션의 의도를 분명히 하는 것입니다. 이는 컬렉션의 사용을 보다 안전하고 의미 있게 만들어, 코드의 가독성과 유지보수성을 향상시킵니다. 2. 필요한 이유 1. 컬렉션에 대한 연산 로직이 여러 곳에 분산되는 것을 방지 상세 설명: 일반적으로 컬렉션과 관..
[OOP]학점 계산기
·
카테고리 없음
학점계산기 구현에 앞서 필요한 과정들을 서술하면 다음과 같습니다: 구현 하기 전 생각하기 1. 요구사항 분석 평균 학점 계산 방식을 이해합니다. 평균학점 = [(학점 * 점수),..]의 합계 / [(학점),] 공식을 사용합니다. 학점 계산에 필요한 정보를 파악합니다. 예를 들어, 과목명, 학점, 점수 등이 필요합니다. 추가 요구사항을 확인합니다. 예를 들어, 과목이 전공인지 일반 과목인지 구분해야 할 수도 있습니다. 2. 도메인 모델 설계 Course 클래스: 과목을 나타내며, 과목명, 학점(전공/일반 구분 포함), 점수(A+, A, B+ 등)를 속성으로 가집니다. Courses 클래스(일급 컬렉션): 여러 Course 인스턴스를 하나의 컬렉션으로 관리하며, 전체 과목의 학점과 점수를 계산하는 메서드를 ..
[OOP]사칙연산 계산기
·
여러가지/이것저것
요구사항 간단한 사칙연산을 할 수 있다. 양수로만 계산 할 수 있다. 나눗셈에서 0을 나누는 경우 적절한 예외(IllegalArgument, ZeroDivisionError)를 발생 시킬 수 있다. 절차적 코드 Enum 기반: ArithmeticOperator Enum 클래스를 사용하여 구현합니다. 각 연산을 열거형 값으로 나타내며, 각 값은 연산을 수행하는 calculate 메소드를 구현합니다. 자바 package org.example; import java.util.stream.Stream; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.Parameter..