Long vs long, 도메인, DTO, 엔티티

minjun kim·2024년 12월 16일

Long vs long

long : 프리미티브 타입 primitive Type
Long : 래퍼 타입 Wrapper Class

프리미티브 타입은 언어 차원에서 지원하는 기본 타입으로, 특정 클래스가 아닌 순수한 타입이다. -> 원시타입

반면 래퍼 클래스는 말 그대로 클래스이다 Long은 프리미티브 타입은 long과 같은 범위의 자료형이지만, 기본 타입이 아니라 클래스로서 존재한다.

래퍼 타입의 장점은

  1. 해당 래퍼런스 변수가 null값을 가질수 있음
  2. ArrayList같은 컬렉션의 요소가 될 수 있음.

프리미티브 타입은 null이 될 수 없기 때문에 받은 요청 JSON에 특정 필드가 '없다' 라는 상태를 나타낼수 없고, 컬렉션에 값을 넣고 싶은 상황이 발생했을 때 발목을 잡는다.

또한 프리미티브 타입과 래퍼 클래스간의 변환 과정은 박싱과 언박싱이라고 표현한다.
프리미티브 타입을 래퍼 클래스로 넣는 것이 박싱 그반대가 언박싱이다 박싱과 언박싱 과정아 불팔요하게 반복되면 애플리케이션의 성능을 떨어뜨리기도 하므로 성능 개선 시에는 반복문에서 박싱과 언박싱 과정의 반복 여부도 확인해 볼 필요가 있다 .

따라서 가격과 재고 수량 같은 정의되지 않는 상태를 null로 표현하려면 Integer와같은 래퍼클래스를 사용하며, 정의되지 않은 상태를 허용하지 않고 그냥 0으로 초기화 하려면 int를 사용하면 된다.

이는 개발자가 상황에 맞게 선택할 수 있어야 한다.


도메인 객체란

도메인 객체는 애플리케이션에서 사용되는 데이터와 그 데이터를 다루는 로직을 하나로 묶은 것을 의미한다.
이때는 단순히 데이터와 로직이 한 곳에 모이는 것 뿐만아니라 애플리케이션의 핵심 지식이 포함되어야 한다.
애플리케이션의 핵심 지식은 비즈니스 로직이나 도메인 규칙이라고 표현하며, 정책이라고 이야기할 수있다.
예를들어 상품은 재고 수량 이상으로 주문할 수 없다와 같은 비즈니스 로직이 될 수 있다. 최대한 이러한 로직이 모이도록 코드를 작성하면 도메인 코드가 된다.

반대로 도메인 객체에 비즈니스 로직이 모이지 않아 비즈니스 로직이 서비스 코드에 구현되면 도메인 객체의 응집력이 낮아지고, 서비스 코드와의 결합도가 증가하여 곳곳에 중복된 코드가 생기고 점점 유지보수하기 어려운 코드가 된다.


DTO와 엔티티

엔티티(Entity) : 도메인 객체이면서 id를 가지는 존재
값 객체(Value Object), VO : 도메인 객체이면서 id를 가지지 않는 존재

DTO를 어떤 패키지에 두어야 하는가 외에 DTO와 엔티티에 대한 변환을 어디에서 수행해야 하는가에 대한 이슈도 있다. 컨트롤러와 애플리케이션 서비스, 각각의 방식이 가지고 있는 장단점이 확실하기 떄문에 상황마다 달라지기 떄문이다.

profile
배움의 흔적을 남기고 싶습니다.

0개의 댓글