다른 객체에게 자신의 정보를 숨기고 자신의 동작, 기능, 연산만을 통해 접근을 허용하는 것으로, 클래스 외부에서 특정 정보에 접근을 막는다는 의미
객체 모델링 (설계) - 객체 생성 - 객체 사용 (접근) 순서
객체지향 프로그래밍에서는 객체를 설계할 때 상태정보를 정보은닉 시킨다.
private -> 접근 불가능 -> 데이터를 넣고 뺄 수가 없다. -> 어떻게 해야 하는가?
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 name; // this.name
}
public int getAge() {
return age; // this.age
}
public String getPhone() {
return phone; // this.phone
}
}
// setter 메서드로 값을 저장하기
p.setName(“홍길동”);
p.setAge(50);
p.setPhone(“010-1111-1111”);
// getter 메서드로 값을 얻기
String name = p.getName();
int age = p.getAge();
String phone = p.getPhone();
public class PersonVO {
private String name;
private int age;
private String phone;
// 생략된 생성자 메서드가 있다. -> 기본생성자 (default constructor)
public PersonVO() {
// 객체를 생성하는 코드는 내부에서 만들어진다.
// 객체의 초기화를 한다.
this.name = "홍길동"; // this. 는 생략 가능
this.age = 50;
this.phone = "010-1111-1111";
}
// setter method 생략
// getter method
public String getName() {
return name; // this.name
}
public int getAge() {
return age; // this.age
}
public String getPhone() {
return phone; // this.phone
}
}
// 생성자 메서드로 값을 저장하기 (초기화)
PersonVO p = new PersonVO();
// getter 메서드로 값을 얻기
String name = p.getName();
int age = p.getAge();
String phone = p.getPhone();
객체 생성 시 원하는 값으로 초기화하기
생성자 메서드를 오버로딩(Overloading)해서 초기화 가능
생성자 메서드를 하나라도 오버로딩하면 기본 생성자 메서드는 만들어지지 않는다.
-> 기본 생성자 메서드도 필요하다면 명시적으로 직접 만들어야 한다.
public class PersonVO {
private String name;
private int age;
private String phone;
public PersonVO() {
// 초기화 없음
}
// 생성자 오버로딩에서 초기화
public PersonVO(String name, int age, String phone) {
this.name = name;
this.age = age;
this.phone = phone;
}
// setter 메서드 생략
// getter method
public String getName() {
return name; // this.name
}
public int getAge() {
return age; // this.age
}
public String getPhone() {
return phone; // this.phone
}
}
// 생성자 메서드로 값을 저장하기 (초기화)
PersonVO p = new PersonVO("홍길동", 50, "010-1111-1111");
// getter 메서드로 값을 얻기
String name = p.getName();
int age = p.getAge();
String phone = p.getPhone();
객체가 가지고 있는 값 전체를 문자열 형태로 넘겨 주기
toString() 메서드를 이용하여 객체가 가지고 있는 모든 값을 리턴
public class PersonVO {
private String name;
private int age;
private String phone;
public PersonVO() {
// 초기화 없음
}
// 생성자 오버로딩에서 초기화
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;
}
}
// 생성자 메서드로 값을 저장하기 (초기화)
PersonVO p = new PersonVO("홍길동", 50, "010-1111-1111");
// toString() 메서드로 값을 얻기
// getter method 3번 호출
System.out.println(vo.getName() + "\t" + vo.getAge() + "\t" + vo.getPhone());
// toString() 1번 호출 -> 더 효율적
System.out.println(vo.toString());
System.out.println(vo); // vo.toString() 을 찾아서 리턴한다.
package fc.java.model;
// 멤버변수만 만들고 IntelliJ의 Generate 기능을 사용하면 손쉽게 Constructor, Getter, Setter, toString()까지 만들 수 있다.
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;
}
// getter, setter 메서드
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public String getPart() {
return part;
}
public void setPart(String part) {
this.part = part;
}
public float getTime() {
return time;
}
public void setTime(float time) {
this.time = time;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
// toString() 메서드
@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) {
// Q. 잘 설계된 영화 객체(MovieVO)를 설계하고 데이터를 저장한 후 출력하시오.
MovieVO vo = new MovieVO("아바타", 20221214, "제이크 설리", "액션", 192.0f, 12);
System.out.println(vo);
System.out.println(vo.getLevel());
}
}