https://github.com/2026-source-code/java-skills

https://github.com/2026-source-code/why-dto.git

image.png

package ex01;

import lombok.Data;

@Data // getter, setter, toString
public class User {
    private int id;
    private String username;
    private String email;
}

package ex01;

import lombok.Data;

@Data
class UserDTO {
    private int id;
    private String username;
    private String email;
}

public class CopyEx01 {
    public static void main(String[] args) {
        // 1. setter
        User user = new User();
        user.setId(3);
        user.setUsername("ssar");
        user.setEmail("[email protected]");

        UserDTO dto = new UserDTO();
        dto.setId(user.getId());
        dto.setUsername(user.getUsername());
        dto.setEmail(user.getEmail());
        System.out.println(dto);
    }
}

package ex01;

import lombok.Data;

@Data
class UserDTO2 {
    private int id;
    private String username;
    private String email;

    public UserDTO2(int id, String username, String email) {
        this.id = id;
        this.username = username;
        this.email = email;
    }
}

public class CopyEx02 {
    public static void main(String[] args) {
        // 1. setter
        User user = new User();
        user.setId(1);
        user.setUsername("ssar");
        user.setEmail("[email protected]");

        UserDTO2 dto2 = new UserDTO2(user.getId(), user.getUsername(), user.getEmail());
        System.out.println(dto2);
    }
}

package ex01;

import lombok.Data;

@Data
class UserDTO3 {
    private int id;
    private String username;
    private String email;

    public UserDTO3(User user) {
        this.id = user.getId();
        this.username = user.getUsername();
        this.email = user.getEmail();
    }
}

public class CopyEx03 {
    public static void main(String[] args) {
        // 1. setter
        User user = new User();
        user.setId(1);
        user.setUsername("ssar");
        user.setEmail("[email protected]");

        UserDTO3 dto3 = new UserDTO3(user);
        System.out.println(dto3);
    }
}

package ex01;

import lombok.Data;

import java.util.ArrayList;
import java.util.List;

@Data
class Board{ // 1
    private int id;
    private String title;
    private String content;
    private List<Reply> replies = new ArrayList<>();
}

@Data
class Reply{ // N
    private int id;
    private String comment;
}

@Data
class DetailDTO {
    private int id;
    private String title;
    private String content;
    private List<String> comments = new ArrayList<>();

    public DetailDTO(Board board) {
        this.id = board.getId();
        this.title = board.getTitle();
        this.content = board.getContent();
        this.comments = board.getReplies().stream() // r1, r2, r3
                .map(r-> r.getComment())
                .limit(2)
                .toList();

    }
}

public class CopyEx04 {
    public static void main(String[] args) {
        // 1. setter
        Reply r1 = new Reply();
        r1.setId(1);
        r1.setComment("댓글1");

        Reply r2 = new Reply();
        r2.setId(2);
        r2.setComment("댓글2");

        Reply r3 = new Reply();
        r3.setId(3);
        r3.setComment("댓글3");

        Board board = new Board();
        board.setId(1);
        board.setTitle("제목1");
        board.setContent("내용1");
        board.setReplies(List.of(r1, r2, r3));

        // 2. 옮기기 (객체복사)
        DetailDTO dto = new DetailDTO(board);
        System.out.println(dto);
    }
}