본문 바로가기

728x90
반응형

공부 정리

(141)
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..
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..
서브쿼리 의존증 서브쿼리의 문제점 서브쿼리의 성능적 문제는 결과적으로 서브쿼리가 실체적인 데이터를 저장하고 있지 않다는 점에서 기인합니다. 이에 따라서 다음과 같은 문제가 발생합니다. 연산 비용 추가 실제적인 데이터를 저장하고 있지 않다는 것은 서브쿼리에 접근할 때마다 SELECT 구문을 실행해서 데이터를 만들어야 한다는 뜻입니다. 따라서 SELECT 구문 실행에 발생하는 비용이 추가됩니다. 서브쿼리의 내용이 복잡하면 복잡할수록 이러한 실행 비용은 더 높아집니다. 데이터 I/O 비용 발생 연산 결과는 어딘가에 저장하기 위해 쌓아두어야 합니다. 메모리 용량이 충분하다면 이러한 오버헤드가 적지만, 데이터양이 큰 경우에는 DBMS가 저장소에 있는 파일에 결과를 쓸 때도 있습니다. TEMP 탈락 현상의 일종인데 저장소 성능에 ..
UNION을 사용한 쓸데없이 긴 표현 UNION을 사용한 조건 분기는 SQL 초보자가 좋아하는 기술 중 하나입니다. 일반적으로 WHERE 구만 조금씩 다른 여러 개의 SELECT 구문을 합쳐서 복수의 조건에 일치하는 하나의 결과 집합을 얻고 싶을 때 사용하니다. 하지만 이런 방법은 성능적인 측면에서 굉장히 큰 단점을 가지고 있습니다. 외부적으로는 하나의 SQL 실행처럼 보이지만, 내부적으로 여러개의 SELECT 구문을 실행하는 실행 계획으로 해석됩니다. 따라서 테이블에 접근하는 횟수가 많아져서 I/O 비용이 크게 늘어납니다. 따라서 SQL에서 조건 분기는 UNION을 사용해도 좋을지 신중히 검토해야 합니다. UNION의 문제점 WHERE 구에서 조건분기하기 2001년도 이하인 경우 price_tax_ex가 price이고 2001년도 이상인 ..
스프링 AOP (1) - 동적 프록시 개요 스프링에서 제공하는 AOP의 기능과 원리를 알아보겠습니다. 리플렉션, JDK 동적 프록시와 CGLIB 소개를 시작으로 스프링이 지원하는 프록시와 빈 후기처리를 알아보겠습니다. 리플렉션 리플렉션은 런타임에 클래스와 메서드의 메타정보를 사용해 애플리케이션을 동적으로 유연하게 만드는 기술입니다. 리플렉션은 스프링 프록시의 기본이 되는 기술이므로 개념을 알아야 합니다. 리플렉션은 런타임에 원하는 동작을 할 수 있다는 장점이 있지만 컴파일 시점의 오류를 잡을 수 없으므로 특별한 경우를 제외하고는 사용하면 안 됩니다. JDK 동적 프록시와 CGLIB 스프링에서 리플렉션 기반으로 동적 프록시를 사용하면 런타임 시 개발자를 대신하여 프록시를 생성해주고 다양한 동작을 할 수 있습니다. JDK 동적 프록시와 CGLI..
객체지향과 4대 특성 객체란? 현실세계의 구체적인 사물(Object)과 더불어 정신적인 영역까지 포함한 하나의 "개념"으로 정의할 수 있는 모든 것입니다. 객체지향이란? 객체지향이란 시스템을 하나의 공동체로 바라보고 자율적인 객체들이 서로 상호작용하도록 객체를 이용해 시스템을 분할하는 것입니다. 객체지향의 시작은 객체에 적절한 책임을 부여는 것. 객체 간의 요청과 응답하는 협력으로 시스템이 구성됩니다. 자율적인 객체란, 상태(varaible), 행위(method)를 가지며 스스로 자신을 책임지는 객체를 의미합니다. 상태, 속성(Variable) 객체는 상태 정보를 저장하고 유지해야 하는데 이러한 속성은 변수로 정의됩니다. 속성 값이 바뀜으로써 객체의 상태가 변경될 수 있습니다. 기능(method) 외부로부터 직접 속성에 접근..
mutable vs immutable 개요 자바의 클래스는 mutable과 immutable 2가지가 존재합니다. 2개의 차이점을 알아보겠습니다. mutable과 immutable mutable 객체는 초기화 된 이후 변경이 가능합니다. 하지만, immutable 객체는 초기화된 이후 변경이 불가능합니다. 자바는 String을 제외하고 기본적으로 mutable합니다. immutable int, long, float, double과 같은 원시 객체들 legacy 클래스(HasTable, Stack, Dictionary, Properties, Vector) Wrapper 클래스(BooleanCharactor, Byte...) String 클래스 getter 메서드만 사용이 가능하고 setter는 제공되지 않습니다. mutable Java.uti..
StringBuffer vs StringBuilder 개요 자바는 연속되는 문자열을 표현하기 위한 3가지 클래스가 있은데, String, StringBuffer, StringBuilder입니다. 3가지의 차이점을 비교해보겠습니다. String과의 차이점 String은 immutable 클래스 StringBuffer와 StringBuilder는 mutable 클래스 StringBuffer vs StringBuilder No StringBuffer StringBuilder 1) 동기화되어 쓰레드 안전 (여러개의 쓰레드가 StringBuffer 메서드를 동시에 접근할 수 없다) 동기화되지 않아 쓰레드에 안전하지 않음(여러개의 쓰레드가 StringBuilder 메서드를 동시에 접근할 수 있다) 2) Java 1.0에서 등장 Java 1.5에서 등장 3) 동기화 때..

728x90
반응형