[JAVA] DTO와 Record

Re_Go·2024년 10월 2일
0

JAVA

목록 보기
37/37
post-thumbnail
post-custom-banner

1. DTO란?

자바에서는 데이터 전송을 위해 DTO(Data Transfer Object)라는 개념을 가지고 있는데요. 이는 다양한 계층 간 데이터 전달의 효율성을 목적으로 극대화 하기 위해 사용되는 클래스 틀을 의미하는데요.

물론 자바에는 DTO만 있는건 아니고, VO(Value Object), DAO(Data Access Object), Entity와 같이 특정 목표를 위해만들어진 그릇? 같은 객체가 존재하는데요.

지금 당장은 이러한 DTO가 와닿지 않지만, 후에 MVC 모델을 이용한 웹 어플리케이션을 개발할 때 DTO 개념을 사용하기 때문에 지금은 개념 정도로만 알아두시는 것을 추천합니다.

보안 및 매핑 목적으로 자주 사용되기도 하는 이 DTO의 골자는 다음 코드와 같습니다.

public class MemberDTO {
	// 상수 필드 선언
    private final String name;
    private final int age;
	
	// 생성자 생성
    public MemberDTO(String name, int age) {
        this.name = name;
        this.age = age;
    }

	//getter 메서드 설정 (setter는 보안 목적으로 사용 x)
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

	// 상속받은 Object 클래스의 toString 메서드 재정의
    @Override
    public String toString() {
        return "MemberDTO{name='" + name + "', age=" + age + "}";
    }

	// 상속받은 Object 클래스의 hashCode 메서드 재정의
    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

	// 상속받은 Object 클래스의 equals 메서드 재정의
    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        MemberDTO memberDTO = (MemberDTO) obj;
        return age == memberDTO.age && Objects.equals(name, memberDTO.name);
    }

    public static void main(String[] args) {
        MemberDTO member1 = new MemberDTO("Re_Go", 30);
        MemberDTO member2 = new MemberDTO("Re-Go", 29);

        // getter 메서드 호출
        System.out.println(member1.getName());
        System.out.println(member1.getAge());
        // toString 메서드 호출
        System.out.println(member1.toString());
        // hashCode 메서드 호출
        System.out.println(member1.hashCode());
        // equals 메서드 호출
        System.out.println(member1.equals(member2));
    }
}

2. Record 키워드

특히 이러한 코드를 반복적으로 작성하는것은 비효율적이라는 것인데, 이를 지원하기 위해 Java 14부터 record 객체가 추가되었는데(물론 잘 사용은 안됨),

위에서 살펴본 DTO를 자동으로 추가해준다는 장점을 가지고 있어 매우 유용하게 사용되는 객체중 하나입니다.

// Member 레코드 생성
public record Member(String name, int age) {

	public static void main(String[] args) {
		Member member1 = new Member("Re_Go", 30);
		Member member2 = new Member("Re-Go", 29);
		
		// getter 메서드 호출 (접두사를 get으로 쓰지 않고 멤버 이름과 같게 자동 생성됩니다.)
		System.out.println(member1.name); 
		System.out.println(member1.age);
		// toString 메서드 호출
		System.out.println(member1.toString());
		// hashCode 메서드 호출
		System.out.println(member1.hashCode());
		// equals 메서드 호출
		System.out.println(member1.equals(member2));
	}
}

참고로 이 record 객체와 비슷한 지원을 해주는 롬복(Lombok) 이라는 커스텀 라이브러리가 있는데요. 해당 내용은 이곳을 참조하시기 바립니다.

profile
인생은 본인의 삶을 곱씹어보는 R과 타인의 삶을 배워 나아가는 L의 연속이다.
post-custom-banner

0개의 댓글