강좌 Course 1. Part 3. ch4 요약
VO 클래스를 잘 설계하려면 정보 은닉이 필수이다. 정보 은닉이란 접근제어자를 사용하여 클래스 외부에게서 자신의 정보에 접근하는 것을 막고 자신의 동작, 기능, 연산만을 통한 접근을 허용하는 것을 뜻한다.
// 예시
public class MemberVO {
private String name;
private int age;
private String phone;
}
예시는 MemberVo의 클래스에서 name, age, phone의 상태정보는 private으로 설정하여 은닉하였다.
정보은닉이 적용된 클래스에서 정보를 저장하고 꺼내오는 첫번째 방법이다. setter는 외부에서 정보를 받아 객체의 상태정보에 저장하고, getter는 객체에 저장된 상태정보를 꺼내온다.
메서드 이름은 메서드가 setter이면 set+멤버변수이름, getter이면 get+멤버변수이름으로 짓는다. 캐멀 케이스를 적용한다.
* IDE로 intelliJ를 사용하는 경우, 우클릭-Generate-setter, getter를 누르면 알아서 선택된 멤버변수들에 대해 setter, getter 메서드를 생성해준다. 반복적인 작업이기 때문에 이를 사용하면 편리하다.
// 예시 MemberVO의 setter, getter 메서드
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
public void setPhone(String phone){
this.phone = phone;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
public String getPhone(){
return this.phone;
}
클래스를 설계하면 기본적으로 생성자 메서드가 생성된다. 이 기본 생성자 메서드는 클래스 이름과 동일한 이름을 가지고 있으며, 실행 블록에는 아무 내용도 포함되어 있지 않다.
정보은닉이 적용된 클래스에 접근하는 두 번째 방법은 이 생성자 메서드를 이용하는 것이다.
생성자메서드를 사용하여 객체를 생성한 후, setter 메서드를 사용하여 객체에 정보를 저장하고 getter 메서드를 사용해 저장한 정보를 가져올 수 있다.
만약 매개변수를 전달받아 객체 생성과 동시에 초기화가 가능하도록 생성자 메서드를 오버로딩했다면, setter 단계를 건너뛰고 getter 메서드를 사용하여 그 값을 얻어올 수 있다. 오버로딩했을 시 매개변수를 전달하지 않는 기본 생성자 메서드는 작동하지 않기 때문에, 기본 생성자 메서드도 사용하고 싶다면 따로 빈 블록을 가진 생성자 메서드를 생성해주어야 한다.
* 매개변수를 전달하지 않았거나, 객체를 생성한 후 setter 메서드를 사용하지 않았다면 get 메서드로 정보를 받아왔을 때 null을 받아온다.
// 예시 생성자 메서드
public MemberVO(String name, int age, String phone){
// this.setName(name);
// this.setAge(age);
// this.setPhone(phone);
this.name = name;
this.age = age;
this.phone = phone;
}
// ------
MemberVO n = new MemberVO();
n.setName="Arthor";
n.setAge=49;
n.setPhone="010-1111-1111";
System.out.println(n.getName+" / "+n.getAge+" / "+n.getPhone);
// ------
MemberVO m = new MemberVO("Bruce", 50, "010-0000-0000");
System.out.println(m.getName);
toString() 메서드는 해당 클래스의 모든 멤버변수들을 리턴해주는 메서드이다. 어떤 멤버변수가 저장되어 있는지 매번 get메서드를 사용하여
public String toString(){
return name+"\t"+age+"\t"+phone;
}
System.out.print(m.toString());
* intelliJ에는 toString() 메서드도 setter, getter 메서드처럼 자동으로 만들어주는 기능이 있다. 마찬가지로 우클릭-Generate-toString() 메서드를 선택한 후 출력할 멤버변수들을 선택하면 된다.
잘 설계된 VO클래스의 구성요소
- 모든 상태정보가 private
- 디폴트 생성자 메서드
- 생성자 메서드 오버로딩
- setter 메서드
- getter 메서드
- toString() 메서드