전체 글 506

[Spring][Object] 1. Data Binding

1. Data BindingMap 형태의 사용자 입력을 자바 객체로 바인딩하는 기술DataBinder 클래스를 통해 구현됨키는 JavaBean 스타일의 프로퍼티 경로를 따라야 함 2. 바인딩 방식항목Constructor BindingProperty Binding바인딩 대상생성자 파라미터setter내부 메커니즘생성자를 통해 객체 생성BeanWrapper로 필드 세팅생성자 조건단일 생성자만 존재해야 함필요 없음파라미터 매핑 방식파라미터 이름 기준 (@ConstructorProperties 사용 가능)프로퍼티 이름과 setter로 자동 매핑중첩 객체 자동 생성✅✅컬렉션 지원✅✅사용 예record, DTO, 불변 객체일반적인 JavaBean, mutable 객체 예제) Constructor Binding더보기p..

Spring/Spring 2025.04.06

[Spring][Field] 2. Formatting

1. Formatter클라이언트 환경에서 문자열 ↔️ 객체 간 변환을 처리하는 인터페이스 특징특징설명강타입 기반Formatter 제네릭 타입으로 타입 안정성 보장Locale 지원Locale 정보를 기반으로 사용자 친화적인 지역화 포맷 처리 가능양방향 변환 지원print(): 객체 → 문자열parse(): 문자열 → 객체예외 처리변환 실패 시 ParseException 또는 IllegalArgumentException 발생 가능Thread-unsafe상태(state)를 가지는 경우 다중 스레드 환경에서 안전하지 않음 (주의 필요)  예시) DateFormatter더보기public final class DateFormatter implements Formatter { private String patt..

Spring/Spring 2025.04.06

[Spring][Field] 1. Type Conversion

1. Spring Type Conversion타입 변환 시스템 (기존 PropertyEditor의 대안) 기능외부 문자열을 자바 타입으로 변화애플리케이션 전반에서 타입 변환 API로 활용함 주요 인터페이스인터페이스설명Converter가장 기본적인 변환기. S → T로 단일 타입 변환ConverterFactory변환 대상이 계층 구조일 때 사용 (ex. String → Enum)GenericConverter다중 타입 지원. 유연하지만 복잡ConditionalGenericConverter특정 조건에 따라 변환 수행 (어노테이션, 메소드 존재 등)ConversionService런타임에서 변환 실행하는 중앙 APIConverterRegistry변환기 등록용 SPI 예제) Converter더보기public cla..

Spring/Spring 2025.04.06

[Spring][Core] 3-5. Container: Additional Capabilities of the ApplicationContext

1. MessageSource국제화를 지원하는 인터페이스다양한 언어로 메시지를 관리하고 사용자에게 언어별로 적절한 메시지를 제공할 수 있게 함public interface MessageSource { @Nullable String getMessage(String code, @Nullable Object[] args, @Nullable String defaultMessage, Locale locale); String getMessage(String code, @Nullable Object[] args, Locale locale) throws NoSuchMessageException; String getMessage(MessageSourceResolvable resolvable, Loc..

Spring/Spring 2025.04.06

[Spring][Core] 3-4. Container: Environment Abstraction

1. Profile특정 환경에서만 등록될 빈(Bean) 정의의 논리적 그룹 @Profile 애너테이션특정 프로파일이 활성화될 때만 해당 빈이 등록되도록 합니다표현식 사용 가능 (&, |, !) 예제) @Profile더보기@Configuration@Profile("development")public class StandaloneDataConfig { @Bean public DataSource dataSource() { return new EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.HSQL) .addScript("classpath:com/bank/config/sql/schema.sql") ..

Spring/Spring 2025.04.06

[Spring][Core] 3-3. Container: Using JSR 330 Standard Annotations

1. JSR-330 표준 어노테이션 사용Spring은 JSR-330 표준 어노테이션(의존성 주입)을 지원합니다.Spring은 이 어노테이션들을 Spring 어노테이션과 동일한 방식으로 스캔하여 사용합니다.이를 사용하려면 관련된 JAR 파일이 클래스패스에 있어야 합니다. 의존성 추가 (Maven) jakarta.inject jakarta.inject-api 2.0.0 2. @Inject와 @Named를 사용한 의존성 주입어노테이션용도설명@Inject의존성 주입- @Autowired와 동일한 기능- required 속성이 없고, Optional 또는 @Nullable과 함께 사용 가능. - Provider와 함께 사용하면 지연 로딩 및 짧은 범위의 빈을 처리할 수 있음.@Named빈의 이름을..

Spring/Spring 2025.04.06

[Spring][Core] 3-2. Container: Classpath Scanning and Managed Components

1. XML 없이 빈 정의클래스패스 스캔Spring은 자동으로 후보 클래스를 탐지하고 이를 빈으로 등록할 수 있음XML 구성이 아닌 어노테이션으로 지원함 2. Bean Annotation메타 어노테이션어노테이션설명용도@ComponentSpring 관리 빈을 정의하는 일반적인 어노테이션모든 컴포넌트 클래스@Repository영속성 계층을 담당하는 클래스에 사용예외 자동 변환 지원데이터 액세스 객체(DAO) 클래스@Service서비스 계층을 담당하는 클래스에 사용서비스 클래스@Controller웹 계층(Spring MVC)을 담당하는 클래스에 사용웹 컨트롤러 클래스 복합 어노테이션어노테이션사용된 메타 어노테이션설명@RestController@Controller, @ResponseBodyREST API 컨트롤..

Spring/Spring 2025.04.06

[Spring][Core] 3-1. Container: Annotation-based Configuration

1. Using @Autowired주입 방식주입 방식설명특징Constructor 생성자를 통해 의존성 주입✅ 추천 방식 (불변성 보장)✅ Spring 4.3+에서는 생성자 1개일 경우 @Autowired 생략 가능Settersetter 메서드를 통해 주입🔸 선택적 의존성이나 테스트에 유용🔸 public/protected 접근 필요Method Argument일반 메서드에 여러 의존성을 한번에 주입🔸 구성 로직과 함께 의존성 주입 가능Field필드에 직접 주입🔸 코드 간결🔸 테스트/DI 프레임워크에서 불편🔸 private이기 때문에 리플렉션 사용Mix (혼용)상황에 따라 적절한 방식 섞어 사용🔸 가능하지만 혼용은 가독성/유지보수성 저하 가능🔸 일관된 스타일 권장 속성속성명기본값설명비고requi..

Spring/Spring 2025.04.06

[오브젝트] 9. 유연한 설계

조영호 님의 "오브젝트" 책을 정리한 글입니다. 1. 개방-폐쇄 원칙컴파일타임 의존성을 고정시키고 런타임 의존성을 변경하라개방-폐쇄 원칙기존의 코드를 수정하지 않고도 애플리케이션의 동작을 확장할 수 있는 설계컴파일타임 의존성은 유지하면서 런타임 의존성의 가능성을 확장하고 수정할 수 있는 구조 추상화가 핵심이다항목내용핵심추상화에 의존하는 것확장 방식상속을 통해 생략된 부분을 구체화확장의 기반추상화는 생략된 부분을 통해 확장의 여지를 남김폐쇄를 가능하게 하는 요소의존성의 방향의존성 방향이 향해야 할 곳구현이 아닌 추상화 계층 public abstract class DiscountPolicy { private List conditions = new ArrayList(); public DefaultD..

Code/OOP 2025.04.05

[오브젝트] 8. 의존성 관리하기

조영호 님의 "오브젝트" 책을 정리한 글입니다. 1. 의존성 이해하기변경과 의존성의존성함께 협력하는 객체들 사이에 발생하는 관계구분설명구현 시점- 의존 대상 객체가 변경되면, 의존하는 객체도 함께 변경될 가능성이 있음실행 시점- 의존 객체가 정상 동작하려면, 의존 대상 객체가 반드시 존재해야 함방향성- 항상 단방향임 (의존 A → B: A는 B에 의존하지만, B는 A에 의존하지 않음)변경 전파- 의존 방향을 따라 변경이 전파됨 (즉, B가 바뀌면 A도 영향 받을 수 있음) 예시더보기public class PeriodCondition implements DiscountCondition { private DayOfWeek dayOfWeek; private LocalTime startTime; ..

Code/OOP 2025.04.04