VO 클래스

yoonhyojin·2024년 5월 30일

Java

목록 보기
1/2
post-thumbnail

객체지향프로그래밍에서 클래스는 객체를 모델링(설계)하는 도구이다.
모델링은 설계를 하는 것으로 어떻게 설계해야 VO 클래스를 잘 설계 할 수 있는지 학습하는 것을 목표로 한다.

🎈 VO 클래스 설계

1. 정보은닉 된 정보에 접근하는 방법

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

1-1. setter, getter 메서드를 통해서 접근 가능

  • setter: 외부로부터 데이터를 전달받아 멤버변수에 저장. 매개변수만 있고, 리턴값은 없는 메서드로 정의
  • getter: 내부의 멤버변수에 저장된 값을 외부로 리턴. 매개변수는 없고, 리턴값만 있는 메서드로 정의한다.
public class PersonVO {
    private String name;
    private int age;
    private String phone;
    
    //setter method
    public void setName(String name) {
        this.name=name;
    }
    public void setAge(int age) {
        this.age=age;
    }
    public void setPhone(String phone) {
        this.phone=phone;
    }
    
    //getter method
    public String getName() {
        return this.name;
    }
    public int getAge() {
        return this.age;
    }
    public String getPhone() {
        return this.phone;
    }

1-2. 생성자 메서드를 통해서 접근 가능(객체 초기화)

public class PersonVO {
    private String name;
    private int age;
    private String phone;
    //생략된 생성자 메서드가 있음 => 기본 생성자 (default Constructor)
    public PersonVO(){
        //객체를 생성하는 코드는 내부에서 만들어짐
        //객체의 초기화
        //this 생략 가능함
        this.name = "홍길동";
        this.age = 50;
        this.phone = "010-3435-4543";
    //setter 메서드 생략
    //getter 메서드 생략
    }

public class ConstructorInit {
    public static void main(String[] args) {
    	//Q. 생성자 메서드를 통해 PersonVO객체에 원하는 이름, 나이, 전화번호를 저장학고 출력하세요.
        PersonVO vo = new PersonVO();
        System.out.println(vo.getName()+"\t"+ vo.getAge() +"\t"+ vo.getPhone());

        PersonVO vo1 = new PersonVO();
        System.out.println(vo1.getName()+"\t"+ vo1.getAge() +"\t"+ vo1.getPhone());
        //개발자가 원하는 것으로 초기화를 하는 방법은?
    }
}

>> 홍길동	 50  010-3435-4543
   홍길동	 50  010-3435-4543

2. 객체 생성시 원하는 값으로 초기화 가능

2-1. 생성자 메서드를 오버로딩(Overloading)해서 초기화 가능

public class PersonVO {
    private String name;
    private int age;
    private String phone;
    
    /*
    1.
    public PersonVO(){
      //초기화 없음
    }  
    >> null   0   null 출력됨
    2.
    public PersonVO(){
       this.name = "홍길동";
       this.age = 50;
       this.phone = "010-3435-4543";
    }
    >> 홍길동 	50   010-3435-4543 출력됨
    => 오버로딩하여 기본 생성자는 생략. 만약 기본생성자가 필요하다면 명시해주어야 함.(기본생성자는 컴파일러가 만들어주지 않음)
    */  
    
    //생성자 메서드의 오버로딩
    public PersonVO(String name, int age, String phone) {
    this.name = name;
    this.age = age;
    this.phone = phone;
    }
    //setter 메서드 생략
    //getter 메서드 생략
}

public class ConstructorOveerloading {
    public static void main(String[] args) {
        //Q. 생성자 메서드를 통해 PersonVO객체에 원하는 이름, 나이, 전화번호를 저장학고 출력하세요.
        //PersonVO vo = new PersonVO(); // 2번 즉, 기본생성자 생략시 오류 발생. 1번 경우에는 괄호 안에 값을 넣어주면 출력됨.
        PersonVO vo1 = new PersonVO("나길동",67,"010-8956-5234");
        PersonVO vo2 = new PersonVO("조길동",80,"010-3279-9543");
        System.out.println(vo.getName()+"\t"+ vo.getAge() +"\t"+ vo.getPhone());
        System.out.println(vo1.getName()+"\t"+ vo1.getAge() +"\t"+ vo1.getPhone());
        System.out.println(vo2.getName()+"\t"+ vo2.getAge() +"\t"+ vo2.getPhone());
    }
}

>> 나길동	 67  010-8956-5234
   조길동	 80  010-3279-9543

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

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

public class PersonVO {
    private String name;
    private int age;
    private String phone;
     
    //생성자 메서드의 오버로딩
    public PersonVO(String name, int age, String phone) {
    this.name = name;
    this.age = age;
    this.phone = phone;
    }  
    //setter 메서드 생략
    //getter 메서드 생략
    
    //toString()메서드에 모든 값을 문자열로 만들기
    public String toString() {
    return name + "\t" + age +"\t" + phone;
    }   
}

public class ToStringPrint {
    public static void main(String[] args) {
        //Q. 생성자 메서드를 통해 PersonVO객체에 원하는 이름, 나이, 전화번호를 저장학고 toString() 메서드로 출력하세요.
        PersonVO vo1 = new PersonVO("나길동",67,"010-8956-5234");
        PersonVO vo2 = new PersonVO("조길동",80,"010-3279-9543");
        /*System.out.println(vo1.getName()+"\t"+ vo1.getAge() +"\t"+ vo1.getPhone());
        System.out.println(vo2.getName()+"\t"+ vo2.getAge() +"\t"+ vo2.getPhone());*/
        //위 코드를 아래와 같이 한번에 출력 할 수 있음
        System.out.println(vo1.toString());
        System.out.println(vo2.toString());
        System.out.println(vo1); //toString()을 생략해도 됨. java에서 컴파일러는 vo1만 입력되어 있어도, 객체 vo1이 가지고 있는 전체 데이터를 출력함.        
    }
}

>> 나길동	 67  010-8956-5234
   조길동	 80  010-3279-9543
   나길동	 67  010-8956-5234

<정리>

'MovieVO2.java'

package fc.java.part3;

public class MovieVO2 {
    //모든 데이터 정보은닉
    private String title;
    private int date;
    private int age;

    //디폴트 생성자 만들기
    public MovieVO2(){
    }

    //생성자 메서드를 오버로딩하여 객체 초기화
    public MovieVO2(String title, int date, int age){
        this.title = title;
        this.date = date;
        this.age = age;
    }

    //setter method : 값 저장 용도
    public void setTitle(String title){ //return값이 없으므로 void
        this.title=title;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void setDate(int date) {
        this.date = date;
    }

    //getter method : 값 얻을 용도
    public String getTitle(){ //return값이 있으므로 return값에 해당하는 자료형 입력
        return this.title;
    }
    public int getAge() {
        return this.age;
    }
    public int getDate() {
        return this.date;
    }

    //toString() method : 객체가 가지고 있는 모든 값 출력 용도
    public String toString() {
        return title + "\t" + age + "\t" + date;
    }

}

'MovieVOModeling.java'

package fc.java.part3;

public class MovieVOModeling {
    public static void main(String[] args) {
        MovieVO2 MVO = new MovieVO2("범죄도시",20240530,15);
        MovieVO2 MVO1 = new MovieVO2("기생충",20240223,16);
        MovieVO2 MVO2 = new MovieVO2("아바타",20130912,13);
        System.out.println(MVO.toString());
        System.out.println(MVO1);
        System.out.println(MVO2);
    }
}

>> 범죄도시	15	20240530
	기생충	16	20240223
	아바타	13	20130912
profile
내가 보려고 정리하는 블로그📝

0개의 댓글