[패스트캠퍼스] [ 잘 설계된 VO 클래스 ] 나도 할 수 있는 Java&Spring 웹 개발 종합반 70 ~ 74강

2024. 5. 21. 21:15나도 할 수 있는 Java&Spring 웹 개발 종합반

728x90
반응형

 

1. 정보은닉이란?

다른 객체에게 자신의 저옵를 숨기고 자신의 동작, 기능, 연산만을 통해 접근을 허용하는 것으로 클래스 외부에서 특정 정보에 접근을 막는다는 의미이다

 

객체 모델링(설계) --> 객체 생성 --> 객체 사용(접근)

 ㄴ 객체지향프로그래밍에서는 객체를 설계할 때 상태정보를 정보은닉 시킨다

 

this는 private에도 접근 가능 (자신의 멤버변수라는 것을 의미하기 위해)

 

2. setter, getter 메서드 만들기

stter method -> 값을 저장 ( Ex: setName, setAge .. )

getter method -> 값을 얻어옴 ( 밖으로 보내주는 역할 ) ( Ex: getName, getAge .. )

한 쌍으로 이용함 ( 접근을 위해 )

 

(setter)에서 this 키워드를 생략하면 어떻게 될까? 알아서 잘 대입해주길 기대하겠지만 그렇지 않다. 자기 자신에게 값을 할당하고 있다는 경고 메시지를 만날 수 있다. 변수의 지역성으로 인해 두 개의 name이 모두 지역 변수를 뜻하게 된다. 그렇기 때문에 this는 이처럼 멤버 필드임을 명확하게 하기 위해 사용할 수 있다.

반면에 접근자(getter)에서는 this를 사용하지 않았다. 매개변수가 없을뿐더러 접근자 메서드가 수행되는 블록 내에서는 동일한 이름을 가진 변수가 없다. 따라서 접근자 내의 name은 멤버 필드임이 명확하다.

 

출저 : https://madplay.github.io/post/what-is-the-meaning-of-this-in-java

 

setter와 getter를 잘 쓰는게 잘 설계된 VO 클래스이다

 

3. 생성자를 이용한 객체 초기화

public class PersonVO {
    // setter method

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

    // getter method

    public String getName() {
        return name; // this.name
    }
    public int getAge() {
        return age; // this.age
    }
}

 

4. toString() 메서드로 객체 값 출력하기

객체가 가지고 있는 값 전체를 문자열 형태로 넘겨주기

- toString() 메서드를 이용하여 객체가 가지고 있는 모든 값을 리턴 해주기

 

public string toString() {
    retrun name + "\t" + age + "\t" + phone;
}

ㄴ setter, getter 밑에 !

 

public class ToStringPrint {
    public static void main(String[] args) {
        PersonVO vo = new PersonVO("홍길동", 34, "010-1234-5678");
        System.out.println(vo.toString());
    }
}

ㄴ 메인 클래스의 효율성

 

public class ToStringPrint {
    public static void main(String[] args) {
        PersonVO vo = new PersonVO("홍길동", 34, "010-1234-5678");
        System.out.println(vo); // vo 전체를 확인하기 때문에 자동으로 toString()을 찾음
    }
}

ㄴ toString() 생략 가능

 

# 잘 설계된 VO 클래스란?

 

1. 모든 생태정보를 정보은닉 하기 (private)

 

2. 디폴트 생성자를 반드시 만들기

 

3. 생성자 메서드를 오버로딩하여 객체 초기화 하기

 

4. setter 메서드를 만들기 (값을 저장할 용도)

 

5. getter 메서드를 만들기 (값을 얻기 용도)

 

6. toString() 메서드를 만들기 (객체가 가지고 있는 전체 값 출력 용도)

 

package fc.java.model;

public class MovieVO {
    private String title;
    private int day;
    private String major;
    private String part;
    private float time;
    private int level;

    // 디퐅트 생성자
    public MovieVO() {

    }

    public MovieVO(String title, int day, String major, String part, float time, int level) {
        this.title = title;
        this.day = day;
        this.major = major;
        this.part = part;
        this.time = time;
        this.level = level;
    }

    public String getTitle() {
        return title;
    }

    public int getDay() {
        return day;
    }

    public String getMajor() {
        return major;
    }

    public String getPart() {
        return part;
    }

    public float getTime() {
        return time;
    }

    public int getLevel() {
        return level;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public void setDay(int day) {
        this.day = day;
    }

    public void setMajor(String major) {
        this.major = major;
    }

    public void setPart(String part) {
        this.part = part;
    }

    public void setTime(float time) {
        this.time = time;
    }

    public void setLevel(int level) {
        this.level = level;
    }

    @Override
    public String toString() {
        return "MovieVO{" +
                "title='" + title + '\'' +
                ", day=" + day +
                ", major='" + major + '\'' +
                ", part='" + part + '\'' +
                ", time=" + time +
                ", level=" + level +
                '}';
    }
}

 

package fc.java.part3;

import fc.java.model.MovieVO;

public class BestVOModeling {
    public static void main(String[] args) {
        MovieVO vo = new MovieVO("아바타", 20221224, "제이크 설리", "액션", 192.0f, 12);
        System.out.println(vo);
    }
}

MovieVO{title='아바타', day=20221224, major='제이크 설리', part='액션', time=192.0, level=12}

 

728x90
반응형