본문 바로가기

자바

dto 복사에 관하여

일하다가 dto 복사할일이 생겨서 방법을 두가지 생각해봤다.

 

예제는 dto의 데이터 일부를 추출하여 toString으로 콘솔에 찍어보기다.

 

package dto.test;

public class DtoCopyTest {

    public static void main(String[] args) {

        MyDto dto = new MyDto();
        dto.setId("20221208");
        dto.setName("dev-jones");
        dto.setBirthday("19900101");

        MyDtoCopy dtoCopy = new MyDtoCopy(dto);
        System.out.println(dtoCopy.toString());
    }
}

class MyDto {
    private String id;
    private String name;
    private String birthday;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }
}

class MyDtoCopy {
    MyDto dto;

    public MyDtoCopy(MyDto dto) {
        this.dto = dto;
    }

    @Override
    public String toString() {
        return "출력데이터: [name=" + dto.getName() + "], [birthday=" + dto.getBirthday() + "]";
    }
}

결과:

출력데이터: [name=dev-jones], [birthday=19900101]

 

Copy클래스의 필드로 지정하고 생성시 카피가 되도록 진행했다.

 

다음은 BeanUtils.copyProperties를 이용한 예제이다.

package dto.test;

public class DtoCopyTest1 {
    public static void main(String[] args) {

        YourDto dto = new YourDto();
        dto.setId("20221208");
        dto.setName("dev-jones");
        dto.setBirthday("19900101");

        YourDto dtoCopy = new YourDtoCopy();
        BeanUtils.copyProperties(dto, dtoCopy);
        System.out.println(dtoCopy.toString());
    }
}

class YourDto {
    protected String id;
    protected String name;
    protected String birthday;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }
}

class YourDtoCopy extends YourDto {

    @Override
    public String toString() {
        final StringBuffer sb = new StringBuffer("YourDtoCopy{");
        sb.append("name='").append(name).append('\'');
        sb.append(", birthday='").append(birthday).append('\'');
        sb.append('}');
        return sb.toString();
    }
}

 

결과는 동일하다.