본문 바로가기
반응형

학습/Java43

싱글톤(Singleton) singleton 싱글톤은 유일한 1개의 공유 인스턴스만 관리하며, 해당 빈 정의와 일치하는 ID를 가진 모든 요청은 스프링 컨테이너에 의해 유일하게 "하나의 빈"만 반환합니다. 만약 싱글톤으로 1개의 빈을 정의했다면, 스프링 IoC 컨테이너는 해당 빈 정의로 유일한 1개의 객체 인스턴스를 생성합니다. 유일한 객체 인스턴스들은 캐시에 저장되고 해당 빈이 필요하면 저장된 캐시 객체를 반환합니다. 스프링의 싱글톤 개념과 디자인 패턴의 싱글톤 개념 다릅니다. 디자인패턴 싱글톤은 '클래스 로더'마다 특정 클래스의 유일한 1개의 인스턴스만 생성합니다. 하지만 스프링 싱글톤은 '스프링 컨테이너'마다 1개의 빈을 생성합니다. 즉, 하나의 스프링 컨테이너에 특정 클래스를 빈으로 정의했다면, 스프링 컨테이너는 해당 클래.. 2024. 3. 18.
OOD, OOP(객체 지향 개발)의 원칙 - SOLID 개요 책에서 6장에 'OOD(객체 지향 개발)의 원칙'에서 5가지의 객체 지향 개발의 원칙을 설명하고 있습니다. 이 내용을 정리해보겠습니다. 또한 인프런 김영한님의 강의를 참고했습니다. 단 하나의 책임 원칙(The Single Responsibility Principle, SRP) 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다. 클래스는 오직 하나의 주제만 알아야 합니다. 즉, 오직 하나의 책임만 져야 합니다. 다시 말해, 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 합니다. 그림 6.1을 보겠습니다. 이 클래스는 너무 많은 정보를 가지고 있습니다. 임금과 세금을 계산하는 방법, 자신을 디스크에 저장하거나 읽어 오는 방법, 그리고 자신을 XML 입출력하는 방법, 다양한 보고서 형식으.. 2024. 3. 15.
Generics의 Type Erasure(타입 소거) *개요 지네릭의 타입소거를 알아봅니다. 타입 소거란? 타입 소거는 지네릭을 사용할 때 '컴파일 타임'에 엄격한 타입 체크를 위해 자바에서 제공하는 전략입니다. 왜 '컴파일 타임'일까요? 지네릭 타입은 컴파일 타임에만 존재하고 런타임에서는 사라지도록 설계되었기 때문입니다. JDK 1.5 이전 버전에서는 지네릭이 존재하지 않았기 때문에 과거 레거시 코드와의 호환성을 위해 컴파일에서만 엄격하게 타입 체크를 하고 런타임은 동일하게 유지합니다. class 파일로 변환된 코드를 확인해보면 지네릭 코드는 하나도 없고 모두 적절하게 형 변환되어 레거시 코드와 호환을 보장할 수 있습니다. 개발자는 지네릭을 통해 컴파일 타임에 미리 문제를 파악할 수 있어 안전한 코딩을 할 수 있습니다. "지네릭 타입은 컴파일 타임에만 존.. 2024. 3. 8.
Generics의 Wildcards(와일드카드) *개요 자바 문법 Generics의 Wildcards 내용을 정리합니다. Wildcards란? 지네릭 코드에서 물음표 (?) 이며, 다른 말로 알려지지 않은 타입(unknown type) 입니다. 매개변수, 필드, 로컬 변수, 리턴타입 등에 사용할 수 있습니다. (리턴타입은 구체적인 타입 선언이 바람직합니다.) 단, 와일드 카드는 지네릭 메서드 호출, 지네릭 클래스 생성, 슈퍼타입 생성에서 타입 인자(type argument)로 사용하지 않습니다. 와일드카드의 장점은 하나의 참조변수에 다양한 매개변수화된 타입을 가지는 지네릭 객체를 담는 다형성 구현입니다. 와일드카드 매개변수화된 타입은 new 인스턴스 초기화에 사용할 수 없습니다. (cannot be instantiated directly 에러 발생) .. 2024. 3. 7.
Value Object 패턴 개요 value object를 왜 사용하는지, spring boot에서 어떻게 사용할 수 있는지 코드를 중점으로 알아보겠습니다. 문제 상황 buy() 메서드를 사용해 물건을 판매하는 어플리케이션이 있다고 가정합니다. 물건 가격과 나의 잔고 금액 2가지를 매개변수로 가집니다. public class Customer { private void buy(Money wallet, Money cost) { // nothing to do } } 현재 Money와 Currency 클래스를 추가해야 합니다. Money 클래스는 현재 가지고 있는 금액을 가집니다 Currency는 USD, JPN, EURO와 같이 국가에서 사용되는 화폐단위를 가집니다. public class Money implements Comparabl.. 2023. 7. 7.
Entity vs Value Object 차이점 *개요 Entity와 Value Object는 DDD(Domain-Driven Design)에서 주로 사용하는 용어입니다. 데이터 모델링을 할 때 어떤 것을 Entity로 할지, Value Object로 할지 고민이 필요한데 차이점을 알아보겠습니다. 1. 동등성(equality) 관점 Reference equality(참조 동등성) 만약 2개의 객체가 메모리에 같은 주소를 참조하면 동등하다는 의미입니다 object object1 = new object(); object object2 = object1; bool areEqual = object.ReferenceEquals(object1, object2); // returns true Identifier equality(식별자 동등성) 식별자 동등성은 id.. 2023. 6. 30.
스프링 AOP (1) - 동적 프록시 개요 스프링에서 제공하는 AOP의 기능과 원리를 알아보겠습니다. 리플렉션, JDK 동적 프록시와 CGLIB 소개를 시작으로 스프링이 지원하는 프록시와 빈 후기처리를 알아보겠습니다. 리플렉션 리플렉션은 런타임에 클래스와 메서드의 메타정보를 사용해 애플리케이션을 동적으로 유연하게 만드는 기술입니다. 리플렉션은 스프링 프록시의 기본이 되는 기술이므로 개념을 알아야 합니다. 리플렉션은 런타임에 원하는 동작을 할 수 있다는 장점이 있지만 컴파일 시점의 오류를 잡을 수 없으므로 특별한 경우를 제외하고는 사용하면 안 됩니다. JDK 동적 프록시와 CGLIB 스프링에서 리플렉션 기반으로 동적 프록시를 사용하면 런타임 시 개발자를 대신하여 프록시를 생성해주고 다양한 동작을 할 수 있습니다. JDK 동적 프록시와 CGLI.. 2023. 1. 11.
mutable vs immutable 개요자바의 클래스는 mutable과 immutable 2가지가 존재합니다. 2개의 차이점을 알아보겠습니다.  mutable과 immutable 사전의 의미를 먼저 확인해보겠습니다. mutable은 '변할 수 있는', immutable은 '변경할 수 없는, 불변의'의 뜻을 가지고 있습니다. 이를 Java 관점에서 본다면 mutable 객체는 초기화 된 이후 '변할 수 있는' 객체이고, immutable 객체는 초기화된 이후 '변경할 수 없는' 객체입니다.   mutable  mutable 객체는 초기화 된 이후에 필드, 상태 등 값을 변경할 수 있습니다. 새로운 객체가 생성되는 것이 아니고 현재 객체의 값을 변경합니다. mutable 객체들은 getter와 setter 사용이 가능합니다. Java.util.. 2022. 11. 1.
StringBuffer vs StringBuilder 개요자바는 연속되는 문자열을 표현하기 위한 3가지 클래스가 있은데, String, StringBuffer, StringBuilder입니다. 3가지의 차이점을 비교해보겠습니다.  String과의 차이점String은 immutable 클래스StringBuffer와 StringBuilder는 mutable 클래스 StringBuffer vs StringBuilderNoStringBufferStringBuilder1)동기화되어 thread-safe(여러개의 쓰레드가 StringBuffer 메서드를 동시에 접근할 수 없다)동기화되지 않아 쓰레드에 안전하지 않음(여러개의 쓰레드가 StringBuilder 메서드를 동시에 접근할 수 있다)2)Java 1.0에서 등장Java 1.5에서 등장3)동기화 때문에 상대적으로 .. 2022. 11. 1.
반응형