<aside> 1️⃣ entity 선언

</aside>

@Getter
@Entity
public class User {

    @Id
    @GeneratedValue
    private Long id;

    private String name;
    private String email;

    public User(String name, String email) {
        this.name = name;
        this.email = email;
    }

    public static User fromDto(UserDto dto) {
        return new User(dto.getName(), dto.getEmail());
    }

}

<aside> 2️⃣ class를 통한 dto생성방식 설명

</aside>

@Data
public class UserDto {

    private final String name;
    private final String email;
		private String address;

		// 생성자를 이용해서 바로 만들어주는 방식
    public static UserDto fromEntity(User user) {
				return new UserDto(
					user.getName(),
					user.getEmail()
				)
    }

		// setter를 이용해서 만들어진 dto 객체에 필요한 값만 세팅해주는 방식
		public static UserDto fromEntity(User user) {
		    UserDto dto = new UserDto();
		    dto.setName(user.getName());
		    dto.setEmail(user.getEmail());
		    return dto;
		}

}

<aside> ❓ Setter를 사용하면 왜 불완전한 상태에 놓일 수 있다는 것일까?

</aside>

UserDto dto = new UserDto();
dto.setName("John Doe");
UserDto dto = new UserDto("John Doe", "[email protected]");

<aside> ❓ 불완전한 상태의 객체가 위험한 이유

</aside>