JAVA/Bootcamp 자바

VO class, 메서드 오버로딩, toString()

whyHbr 2024. 2. 22. 12:38
728x90
반응형

객체지향프로그래밍에서 클래스란

객체를 설계하는 도구이다. 객체를 사용해 데이터 crud가 발생하는데 이를 잘못 설계하면 데이터 처리가 힘들어지기 때문에 클래스 설계를 잘 해야한다.

 

정보은닉이란

다른 객체에게 자신의 정보를 숨기고 자신의 동작, 기능, 연산만을 통해 접근을 허용하는 것. 

클래스 외부에서 특정 정보에 접근을 막는다는 의미다.

숨겨져 있기 때문에 직접 참고가 불가하다. B가 은닉되어 있다면 B혼자 사용 가능하다

ex)

private String title;

 

객체의 상태정보엔 주로 중요한 데이터가 들어간다. 외부에서 접근해  데이터를 넣을 수 있으므로

private 을 사용해 외부에서 정보를 바로 넣을 수 없게 정보은닉 시킨 것이다.

 

private 을 사용하면 직접적인 접근이 불가능한데 정보를 어떻게 넣을 것인가?

setter, getter, toString()

 

setter는 정보를 받아와 private상태정보에게 넘겨준다. setting해준다

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

title정보를 받기 위한 setTitle

 

getter는 데이터를 꺼내기 위해 사용한다.

public String getTitle() {
    return title;
}

title 정보를 꺼내오기 위한 getTitle

 

 

 

셍성자를 이용한 초기화

객체 생성 시 PersonVo(); -> 이것은 객체를 생성한 다음 아무런 동작을 하지 않는다.

우리는 이 생성자 메서드를 사용해 상태정보값을 넣을수 있다

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

값을 세팅하기 때문에 매개변수를 받을 수 있다. 

setter는 받아온 값을 상태정보에 저장한다.

상태정보의 변수명과 세터의 변수명이 같은 경우에 this를 써주지 않고

title = title을 하면 자기 자신에게 저장한 setter가 된다.. 

그래서 이 title은 MovieVO(클래스명) 가 가지고 있는 매개변수이다. 를 알려주기 위해 this 를 쓴다

this는 나 자신을 가리킨다. 

 

마찬가지로 getter 에서도

public String getTitle() {
    return this.title;
}

this 를 사용해 메인클래스가 가지고 있는 title 을 돌려준다.

 

 

정보를 넘겨주는 setter 사용법: vo.setTitle("movie");

정보를 꺼내오는 getter 사용법: String title = vo.getTitle(); //꺼내온 것을 담을 게 필요하다

 

 

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

 

초기화란?

객체가 생성된 후 객체의 상태정보에 값을 바로 넣는 것

초기화를 사용하면 private 에 정보를 바로 넣을 수 있다.

생성자 메서드를 사용하면 상태정보의 초기화를 통해 값을 넣을 수 있다.

public  PersonVO(){ //default constructor 기본 생성자
    //객체를 생성하는 코드는 내부에서 만들어진다.
    //객체 초기화 함. this 생략가능
    this.name= "namename";// 나중에 필요 없을 수도
    this.age=44;
    this.phone="44-22-55-";
}

이것이 생성자 메서드이다.

생성자를 통해 값을 넣을 수도 있다.

이런 생성자 메서드를 만들고 객체 생성을 하고 출력을 해보면 위 정보값이 들어있다.

 

public  PersonVO(){ //default constructor 기본 생성자
   
}

Person이 가지고 있는 멤버들을 메모리에 올리는 작업을  생성자 메서드 PersonVO가 한다. 

초기화 = 여기에 동작을 넣는 것

 

PersonVO vo = new PersonVO();
System.out.println(vo.getAge()+"\t"+vo.getName()+"\t"+vo.getPhone());

생성자 메서드에 넣어준 값이 출력이 된다.

PersonVO vo1 = new PersonVO();
System.out.println(vo1.getAge()+"\t"+vo1.getName()+"\t"+vo1.getPhone()

코드를 추가해 다른 사람을 만들면?

동일한 사람이 출력된다.값이 같다.

 

 

다른 값을 넣고 싶다면?

메서드 오버로딩 Overloading(매개변수 타입, 수를 다르게 해 중복정의)

메서드오버로딩 하는 방법:

기본 생성자를 하나 더 만든다

기본 생성자는 초기화 하지 않고

추가로 만든 생성자에게 초기화 하고자 하는 값을 매개변수로 준다.

public PersonVO(String name, int age, String phone){
    this.name = name;
    this.age = age;
    this.phone = phone;

}

 

이것을 쓰는 방법, 내가 원하는 값으로 초기화 하려면?

PersonVO vo1 = new PersonVO("name1",33,"-0-0-0-0-");

객체 생성시 내가 원하는 값을 넣어주면 된다.

 

즉 다른 값을 넣으려면,

생성자 메서드를 오버로딩한다 - 받고 싶은 값을 매개변수에 넣는다 - 객체 생성할 때 값을 넘겨준다

 

메서드 오버로딩을 하려면 기본 생성자를 만들어주어야 한다. 오버로딩된 기본 생성자를 생성하면 컴파일러는 기본 생성자를 제공하지 않기 때문에

안만들면 에러 날수도

public  PersonVO(){ //default constructor 기본 생성자
    //객체를 생성하는 코드는 내부에서 만들어진다.
    //객체 초기화 함. this 생략가능
    this.name= "namename";// 나중에 필요 없을 수도
    this.age=44;
    this.phone="44-22-55-";
}
public PersonVO(String name, int age, String phone){
    this.name = name;
    this.age = age;
    this.phone = phone;

}

메서드 오버로딩을 했다고 해서 기본 생성자에 값을 넣지 못하는 건 아니다

저게 기본 값이 되는 거

 

setter를 사용하지 않아도 생성자 메서드를 통해 값을 할당 가능한

toString() 메서드

get써서 하는 출력이 귀찮다 -> toString() 을 사용하면 한번에 출력이 가능하다.

 

toString()의 사용방법

public String toString() {
    return "PersonVO{" +
            "name='" + name + '\'' +
            ", age=" + age +
            ", phone='" + phone + '\'' +
            '}';
}

VO에 toString() 을 추가해준다.

 

//생성자 메서드 통헤 원하는 값 전달하고 toString통해 출력
PersonVO vo = new PersonVO("TSP",11,"9=9-9-");
System.out.println(vo.toString());

후 sout(vo.toString()); 을 입력하면 정보가 한번에 출력된다.

 

 

완벽한 VO를 설계하려면..

- 모든 상태정보를 private 하게 만든다

- 기본 생성자 만든다

- 생성자 메서드를 오버로딩해 객체를 초기화한다. 

- setter, getter, toString() 을 만든다 (generate 를 사용하면 편하다.)

 

728x90

'JAVA > Bootcamp 자바' 카테고리의 다른 글

생성자/ 메서드 오버로딩?  (0) 2024.02.22
자바 기초: 변수? 객체? 클래스? 메서드?  (0) 2024.02.22
접근제어  (0) 2024.02.21
메서드와 변수  (0) 2024.02.21
연산자  (0) 2024.02.21