스크린샷 2025-08-08 오후 3.56.56.png

package com.haenin.section04.constructor;

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

        /* 목표, 생성자 함수가 무엇인지 이해하고 선언 및 호출할 수 있다. */
        User user1 = new User();
        System.out.println(user1.getInfo());

        User user2 = new User("user01","pass01","홍길동");
        /* 필기. 매개변수 3개를 초기화하는 생성자 */
        System.out.println(user2.getInfo());
    }
}

package com.haenin.section04.constructor;

import java.util.Date;

public class User {
    private String id;
    private String pwd;
    private String name;
    private java.util.Date enrollDate;
    // 필기 util패키지 안에 있는 데이트를 쓸 때는 풀 패키지를 작성하는 것이 좋다 mysql과 비교

    // 필기 user()함수를 작성하지 않은 상태에서도 컴파일로가 작성해줌
    /* 설명. 기본 생성자( 작성하지 않아도 작성됨, 명시적으로 작성하는 것을 권장) */
    public User(){
        System.out.println("기본생성자 실행됨...");
    }

    /* 설명. 매개변수 있는 생성자(객체가 생성될 때 초기화하고 싶은 값을 매개변수로 가지는 생성자 */
    /* 설명. 생성자에서 this.의 이미는 해당 생성자로 생성될 객체를 뜻함 */
    public User(String id, String pwd, String name) {
        this.id = id;
        this.pwd =pwd;
        this.name = name;
    }

    public User(String id, String pwd, String name, Date enrollDate) {

        /* 설명. this()는 같은 클래스의 다른 생성자를 참조할 때 사용
        *   1. 첫 줄에 사용할 것
        *   2. 다른 생성자 하나만 추가 사용 가능
        *    (목적은 코드 줄 수 줄이기)
        * */

//        this.id = id;
//        this.pwd = pwd;
//        this.name = name;
        this(id, pwd, name);
        /* 필기. this()는 생성자 */
        this.enrollDate = enrollDate;
    }

    // 필기 속성이랑 생성자 함수가 실행되고 객체가 생성됨
    public String getInfo(){
        return this.id + ", " + this.pwd + ", " + this.name + ", " + this.enrollDate;

    }
}

package com.haenin.section04.dto;

public class Application {
    public static void main(String[] args) {
        UserDTO user1 = new UserDTO();
        System.out.println(user1);
        // println은 변수가 들어오면 스스로 변수.toString()을 호출함

        UserDTO user2 = new UserDTO("user01", "pass01", "홍길동",
                                        new java.util.Date());
        System.out.println("user2 = "+ user2);

        /* 설명. JSP, Spring Framework, Mybatis, ... 등에서 사용할 예정 */
        user2.setName("유관순");
        System.out.println("user2 = " + user2.getName());

    }
}

package com.haenin.section04.dto;

/* 설명. DTO(Data Transfer Object) */
/* 설명. 자바빈(Java Bean) 형태의 클래스
*   JSP에서 사용되는 표준 액션 태그로 접근할 수 있게 만든 자바 클래스 형태이다.
*   자바 코드를 모르는 웹 퍼블리셔들도 자바 코드를 사용할 수 있도록 태크 형식으로 지원하는 문법을
*   의미하는데, 그 때 사용할 수 있도록 규칙을 지정해 높은 java 클래스를 자바빈(java bean)이라고 부른다.
*   지금은 특정 목적 및 프레임워크를 위해 클래스를 작성하는 규칙이라고 보면 된다.
* */

/* 설명.
*   자바빈 작성 규칙
*   1. 자바빈은 특정 패키지에 속해 있어야 함
*   2. 필드의 접근 제어자는 private으로 선언되어야 함(캡슐화 적용)
*   3. 기본 생성자가 명시적으로 존재해야 함(매개변수 있는 생성자는 선택사항)
*   4. 모든 필드에 접근 가능한 설정자(setter)와 접근자(getter)가 public으로 작성되어 있어야 함
* */

import java.util.Date;

public class UserDTO {
    private String id;
    private String pwd;
    private String name;
    private java.util.Date enrollDate;

    public UserDTO() {
    }

    public UserDTO(String id, String pwd, String name, Date enrollDate) {
        this.id = id;
        this.pwd = pwd;
        this.name = name;
        this.enrollDate = enrollDate;
    }

    public String getId() {
        return id;
        // 필기 this.이 생략된 상태
    }

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

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public String getName() {
        return name;
    }

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

    public Date getEnrollDate() {
        return enrollDate;
    }

    public void setEnrollDate(Date enrollDate) {
        this.enrollDate = enrollDate;
    }

    @Override
    public String toString() {
        return "UserDTO{" +
                "id='" + id + '\\'' +
                ", pwd='" + pwd + '\\'' +
                ", name='" + name + '\\'' +
                ", enrollDate=" + enrollDate +
                '}';
    }
}