Web/Spring

DTO란? DTO 정적 이너 클래스로 만드는 이유(캡슐화, 속도)

TLdkt 2022. 10. 12. 14:08
728x90
반응형

🚩들어가며

DTO를 프로젝트에서 사용해보면서, 쉴새없이 늘어나는 파일 개수에 당황했다. 하나의 요청을 처리하기 위해 2개씩 만들어야 하니 당연한 일이었다. 어떻게 해야 객체지향적으로, 코드 가독성을 높이며 처리할 수 있을지 찾아보니 정적 이너 클래스로 관리한다고 하기에 DTO 내용부터 차근차근 정리해보려 한다.

 

DTO란?

DTO=data transfer object

DTO가 필요한 이유

  • http요청 축소

기존에는 요청을 다 받고, 이후에 컨트롤러에서 필터링하는 방식이었다

  • 데이터 유효성 검증 단순화

데이터 유효성 처리를 api마다 다 다르게 설정해야 할 때가 많으므로 애초에 DTO로 처리해버린다

  • 요청 데이터 객체 단순화

request parameter 수를 줄일 수 있게 된다

  • 도메인 객체와 분리
  • 객체 정보 캡슐화

 

 

How to add Dto class

  • Dto class

 

HTTP 요청 응답 데이터에 DTO 적용하기

  • JSON이 아닐 때 : RequestBody 애너테이션 안붙음
  • JSON일 때

 

Static Inner Class로 묶어버리자!

정적 이너클래스로 만들게 되면…

  • 클래스 내부 공유공간에 생성됨
  • 어차피 바깥 클래스의 인스턴스를 참조하지 않음
  • [인스턴스.내부클래스]처럼 불필요한 인스턴스 생성 없이도 그냥 쓸 수 있으니 불필요한 메모리 안써도 됨

즉,

1. 메모리 누수 예방

2. 적은 메모리 사용

3. 생성시간 단축

의 이점을 그대로 가져가면서, 캡슐화까지 깔끔하게 만들어줄 수 있다!

 

public class MemberDto{

	@Getter
	@Builder
	@AllArgsConstructor
	@NoArgsConstructor
	public static class MemberJoinRequestDTO {
	    private String name;
	}

	@Getter
	@Builder
	@AllArgsConstructor
	public static class MemberJoinResponseDTO {
	    private Long memberId;
	    private String name;
	}
}

이런 식으로 쓸 수 있다!

 

✨나가며

정적 이너 클래스에 대해 static을 배우는 순간부터 궁금했는데, 그간 메모리 구조와 객체지향 프로그래밍 개념 등을 공부하고 다시 보니 실제 효과를 더 크게 체감할 수 있었다. 이전에 듣던 강의에서는 컨트롤러 내부에 선언하기도 하던데, 서비스의 규모가 커지는 경우에는 좋지 않은 방식이지 않을까? 어떤 이유로 컨트롤러에 작성했을지가 궁금해졌다. 또, 이렇게 방식을 변경해가며 작성할 때 효율성 체크는 어떻게 하는지도 알아보고 싶어졌다. 재밌는 객체지향 세계관~

728x90
반응형