java 96

[Java] 제네릭 vs 와일드카드

제네릭과 와일드카드의 차이1. 제네릭 (Generics)클래스나 메서드가 다룰 데이터 타입을 파라미터화해서, 컴파일 시점에 타입 안전성을 보장하는 문법임.선언 시점에 타입을 확정지음 → 컴파일러가 타입 체크 가능.예시List names = new ArrayList(); names.add("철수"); // OKnames.add(123); // 컴파일 에러List 제네릭을 통해 "이 리스트는 문자열만 담는다" 라는 타입 정보를 컴파일러에 알려줌.잘못된 타입(Integer)을 넣으면 컴파일 단계에서 막힘.2. 와일드카드 (Wildcard)제네릭 타입을 다룰 때, 정확한 타입을 지정하지 않고 유연하게 범위를 한정하고 싶을 때 사용함.? 로 표현됨.제네릭의 소비/생산(Producer/Consumer) 관점..

BE/Java 2025.09.04

변수 정리

자바(Java)의 변수 종류 정리자바의 변수는 크게 다음 4가지로 분류됨:지역 변수 (Local Variable)멤버 변수 (Member Variable)인스턴스 변수 (Instance Variable)클래스 변수 (Class Variable / static 변수)매개변수 (Parameter Variable)상수 (final 변수)각 변수는 선언 위치, 생명 주기, 메모리 저장 위치에 따라 다르게 동작함.1. 지역 변수 (Local Variable)메서드 내부, 생성자 내부, 블록 내부에서 선언된 변수임해당 블록이 실행될 때 생성되고, 블록이 종료되면 소멸됨반드시 초기화 후 사용해야 함메서드 호출 시마다 새롭게 생성됨메모리: 스택(stack) 영역에 저장됨public void printSum() { ..

BE/Java 2025.07.22

중첩, 내부클래스

Java의 중첩 클래스(Nested Class), 내부 클래스(Inner Class), 지역 클래스(Local Class) 정리Java에서는 클래스 안에 또 다른 클래스를 선언할 수 있음. 이를 중첩 클래스(Nested Class) 라고 부름.중첩 클래스는 코드의 구조를 더 논리적으로 구성할 수 있도록 도와줌.1. 중첩 클래스란?중첩 클래스(Nested Class) 는 다른 클래스 내부에 선언된 클래스를 의미함.일반 클래스 외에, 클래스의 일부 기능을 내부 클래스로 구조화할 때 사용함.중첩 클래스는 다음과 같이 크게 두 가지로 나뉨:정적 중첩 클래스 (Static Nested Class)비정적 중첩 클래스 → 내부 클래스(Inner Class)내부 클래스는 다시 세분화됨:분류static 여부선언 위치정적..

BE/Java 2025.07.21

LocalDate.parse(입력문자,포맷);

LocalDate.parse(입력문자열, 포맷터) 는 문자열을 LocalDate 객체로 변환할 때 사용하는 정적 메서드임.LocalDate.parse(입력문자, 포맷) – 문자열을 날짜로 파싱하는 메서드LocalDate.parse(String text, DateTimeFormatter formatter) 는문자열 형식의 날짜를 LocalDate 객체로 변환(parse) 하는 메서드임.입력 문자열의 형식을 DateTimeFormatter.ofPattern() 을 통해 지정할 수 있음.1. 기본 구조LocalDate.parse("2025-05-21", DateTimeFormatter.ofPattern("yyyy-MM-dd"));첫 번째 인자: 문자열(String)두 번째 인자: 포맷터(DateTimeForm..

BE/Java 2025.05.29

date.format()

Java에서 date.format() 은 날짜/시간 객체를 지정한 포맷 문자열로 변환하는 메서드임.Java 8 이후의 java.time API에서는 LocalDate, LocalDateTime, ZonedDateTime 등에서 format() 메서드를 지원함.date.format() – 날짜 객체를 문자열로 변환하는 메서드format() 은 Java 8 이상의 java.time 패키지에서 제공되며,날짜/시간 객체를 사람이 읽을 수 있는 문자열 형태로 포맷할 때 사용함.DateTimeFormatter 와 함께 사용되며, 스레드 세이프하고 직관적인 날짜 출력 방식을 제공함.1. 기본 사용법LocalDate date = LocalDate.of(2025, 5, 21);DateTimeFormatter format..

BE/Java 2025.05.28

DateTimeFormatter.ofPattern

DateTimeFormatter.ofPattern() 은 Java 8 이상에서 날짜와 시간 객체(LocalDate, LocalDateTime 등)를 포맷 문자열로 변환하거나, 반대로 문자열을 파싱할 때 사용하는 포맷 정의 메서드임.DateTimeFormatter.ofPattern – 날짜 포맷 지정 메서드DateTimeFormatter.ofPattern(String pattern) 은 Java 8 이상에서날짜와 시간의 출력 형식을 지정하거나, 문자열을 날짜로 변환할 때 사용할 포맷 형식을 정의하는 메서드임.SimpleDateFormat 의 최신 대체제로, 스레드 세이프하며 불변(immutable)한 객체임.1. 기본 사용법날짜를 문자열로 포맷하기 (format)LocalDate date = LocalDa..

BE/Java 2025.05.27

temporalAdjusters

TemporalAdjusters 는 Java 8 이상에서 제공하는 날짜 조정 유틸리티로, LocalDate 등 날짜 객체를 쉽게 변환하거나 맞춤 조정할 수 있도록 도와주는 기능임.TemporalAdjusters – 날짜를 손쉽게 조정하는 자바 유틸리티TemporalAdjusters 는 Java 8+ java.time.temporal 패키지에 포함된 클래스이며,날짜를 특정 기준(예: 다음 달 첫째 날, 이번 달 마지막 날, 특정 요일 등)으로 조정하는 기능을 제공함.1. 언제 사용하는가?복잡한 날짜 계산 로직을 간결하게 구현하고 싶을 때매달 첫날, 마지막 날 계산특정 요일(예: 이번 달 둘째 화요일 등) 구하기다음 영업일, 특정 조건의 날짜 구하기→ if문, Calendar 복잡한 코드 없이 선언적으로 날..

BE/Java 2025.05.26

chronofield

ChronoField 는 Java 8 이상에서 날짜와 시간의 각 필드를 직접 지정하고 조작할 수 있게 해주는 열거형(Enum) 임.ChronoField – 날짜/시간의 필드 조작용 EnumChronoField 는 java.time.temporal 패키지에 포함된 Enum으로,날짜 및 시간의 세부 항목(예: 연도, 월, 일, 시, 분 등)을 직접 다루기 위한 필드 정의 집합임.각 필드는 TemporalField 인터페이스를 구현하며, LocalDate, LocalTime, ZonedDateTime 등에서 직접 접근 및 수정 가능함.1. 왜 ChronoField를 사용하는가?Java의 LocalDate, LocalTime, ZonedDateTime 등은 내부적으로 다양한 필드 단위 정보를 포함함.이 정보를 ..

BE/Java 2025.05.25

chronounit

ChronoUnit 은 Java 8부터 도입된 날짜/시간 계산을 위한 열거형(enum) 클래스로, java.time 패키지에서 TemporalUnit 인터페이스를 구현함.ChronoUnit – 자바 날짜/시간 연산 단위 EnumChronoUnit 은 Java 8의 java.time 패키지에 포함된 Enum으로,기간(Duration) 또는 날짜 간 차이(Period) 를 연산할 때 사용하는 시간 단위(HOURS, DAYS, MONTHS 등)를 명확하게 표현하는 도구임.1. ChronoUnit 주요 목적LocalDate, LocalDateTime, ZonedDateTime 등과 함께 사용하여날짜 간 차이 계산 또는 특정 단위만큼 덧셈/뺄셈 연산에 활용됨코드의 가독성과 명확성 향상2. 사용 가능한 시간 단위C..

BE/Java 2025.05.24

@ConfigurationProperties, @ConstructorBinding

@Value 는 간편하지만, 설정이 많아질수록 복잡하고 유지보수에 불리해짐.이럴 땐 @ConstructorBinding 과 @ConfigurationProperties 를 사용하여 설정값을 객체 단위로 구조화하여 관리하는 것이 바람직함.@ConfigurationProperties + @ConstructorBinding을 활용한 설정 관리@ConfigurationProperties 는 Spring Boot에서 외부 설정 파일(application.yml 등)의 값을 Java 객체로 바인딩하는 어노테이션임.여기에 @ConstructorBinding 을 함께 사용하면 불변성(immutability) 과 IDE 자동완성, 타입 안전성, 테스트 용이성 등을 모두 만족할 수 있음.1. 기존 방식: @Value 방식..