프로젝트

25일차

사랑박 2023. 3. 16. 01:36

오늘은 Part 2. 게시판 서비스 강의의 `게시글 페이지 기능 테스트 정의`부분을 학습하였다.
 
게시글과 댓글 서비스 로직의 테스트를 작성하면서 필요한 DTO를 함께 작성하였다. 도중에 DTO를 class가 아닌 record로 만드는 이유가 궁금했다.
 

DTO

DTO는 우리말로 하면 데이터 전송 객체로, 프로세스 간에 데이터를 전달하는 객체이다.
 

DTO 필요성

Spring boot와 JPA를 사용하다 보면, Entity 클래스는 데이터베이스와 맞닿는 핵심 클래스이며, Entity 클래스를 기준으로 테이블이 생성되고 스키마가 변경된다는 것을 알 수 있다.
다양한 계층에서 Entity를 직접적으로 사용하게 되면 원치 않게 Entity의 속성이 변경될 수도 있고, Entity의 모든 속성이 불필요하게 외부에 노출될 수도 있다.
따라서 Entity를 직접 사용하는 대신에 DTO를 사용할 수 있다. Entity 클래스에서 필요한 데이터만 선택적으로 DTO에 담아서 생성해 사용함으로써, Entity 클래스를 감추며 보호할 수 있다.
 

record

record란 불변(immutable) 데이터 객체를 쉽게 생성할 수 있도록 하는 새로운 유형의 클래스이다.
JDK14에서 preview로 등장하여 JDK16에서 정식 스펙으로 포함하였다.
 

record의 목표

객체 지향의 사상에 맞게 데이터를 간결하게 표현하기 위한 방법을 제공
개발자가 동작을 확장하는 것보다 불변 데이터를 모델링하는데 집중
데이터 지향 메소드를 자동으로 구현

 

record의 특징

record는 불변 객체로 abstract로 선언할 수 없고 암시적으로 final로 선언된다.
한번 값이 정해지면 setter를 통해 값을 변경할 수 없고 상속할 수도 없다.
record 내 각 필드는 private final로 정의된다.
다른 클래스로 상속 받을 수 없지만, 인터페이스로는 구현할 수 있다.
레코드 내부에 멤버 변수를 선언할 수 없다.
static 변수는 생성 가능하다.
 
 

'프로젝트' 카테고리의 다른 글

27일차  (0) 2023.03.18
26일차  (0) 2023.03.17
24일차  (0) 2023.03.15
23일차  (0) 2023.03.14
22일차  (0) 2023.03.13