정보 은닉
정보 은닉 : 다른 객체에게 자신의 정보를 숨기고 자신의 동작, 기능, 연산을 통해 접근을 하는 것으로 클래스 외부에서 특정 정보에 접근을 막는다는 의미
- setter, getter 메서드
this는 자기 자신이 가지고 있는 정보를 가리킬 때 사용
private String name;
private int age;
private String phone;
public PersonVO(){
}
public String getName() { // getter 메서드로 값을 얻어오고 get + 멤버 변수의 첫 영문을 대문자로 만들기
return name;
}
public void setName(String name) { // this.name 반환
this.name = name; // setter 메서드로 값을 저장하고 set + 멤버 변수의 첫 영문을 대문자로 설정
}
public class SetterGetterTest {
public static void main(String[] args) {
// Q. setter, getter 메서드를 통해 PersonVO객체에 이름, 나이, 전화번호를 저장하고 출력하세요
PersonVO vo=new PersonVO();
//vo.name="홍길동";
vo.setName("홍길동");
vo.setAge(50);
vo.setPhone("010-1111-1111");
System.out.println(vo.getName()+"\t"+vo.getAge()+"\t"+vo.getPhone());
}
}
- 생성자 메서드
public PersonVO(){
// 객체를 생성하는 코드는 내부에서 만들어진다.
// 객체의 초기화를 한다.
this.name = "홍길동";
this.age = 50;
this.phone = "010-1234-5678";
}
개발자가 원하는 값으로 초기화를 하는 방법?
: 생성자 메서드를 오버로딩해서 초기화
// 생성자의 오버로딩 -> 내가 원하는 값으로 초기화, 기본 생성자는 지우면 안된다.
public PersonVO(String name, int age, String phone){ // 생성자 오버로딩해서 초기화
this.name=name;
this.age=age;
this.phone=phone;
}
public class ConstructorOverloading {
public static void main(String[] args) {
// Q. 생성자 메서드를 통해 PersonVO객체에 원하는 이름, 나이, 전화번호를 저장하고 출력하세요
PersonVO vo=new PersonVO("홍길동", 34,"010-5555-5555");
PersonVO vo1=new PersonVO("나길동", 60,"010-2222-2222");
PersonVO vo2=new PersonVO("조길동", 50,"010-3333-3333");
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());
}
}
- toString() : 객체 값 출력하기 → getter를 여러개 쓰지말고 효율적으로 데이터 가져오기
public String toString(){
return name+"\t"+age+"\t"+phone;
}
// getter를 여러번 쓰지 않고 한번에 toString 메서드로 출력
public class ToStringPrint {
public static void main(String[] args) {
PersonVO vo = new PersonVO("홍길동", 34,"010-5555-5555");
System.out.println(vo.getName()+"\t"+vo.getAge()+"\t"+vo.getPhone());
System.out.println(vo.toString());
System.out.println(vo); // toString() 생략가능(객체가 가진 전체 데이터를 출력하라는 것으로 컴파일러가 인식)
}
}
- VO 클래스 설계
// Generator를 사용해서 모두 생성가능(alt + insert)
package fc.java.model;
public class MovieVO {
// 1. 모든 생태정보를 정보은닉 하기(private)
private String title;
private int day;
private String major;
private String part;
private float time;
private int level;
// 2. 디폴트 생성자 만들기
public MovieVO() {
}
// 3. 생성자 메서드를 오버로딩하여 객체 초기화 하기
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;
}
// 4. setter 메서드를 만들기(값을 저장용도)
// 5. getter 메서드를 만들기(값을 얻기 용도)
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;
}
// 6. toString()메서드를 만들기(객체가 가지고 있는 전체 값 출력 용도)
@Override
public String toString() {
return "MovieVO{" +
"title='" + title + '\'' +
", day=" + day +
", major='" + major + '\'' +
", part='" + part + '\'' +
", time=" + time +
", level=" + level +
'}';
}
}
public class BestVOModeling {
public static void main(String[] args) {
// Q. 형태로 잘 설계된 영화(MovieVO) 객체를 설계하고 데이터를 저장 한 후 출력하세요
MovieVO vo=new MovieVO("아바타",20221214,"제이크 설리","액션",192.0f,12);
System.out.println(vo.toString());
System.out.println(vo.getLevel());
}
}
정보 은닉 ⇒ private 사용,
'개발 > Java' 카테고리의 다른 글
Static (0) | 2024.01.28 |
---|---|
배열과 클래스의 관계 (0) | 2024.01.28 |
패키지(Pakage) (0) | 2024.01.28 |
모델(Model) (0) | 2024.01.28 |
클래스(Class) (1) | 2024.01.28 |