Getter와 Setter에 대해서 알아보자.
사실 이걸 알려면 정보은닉, 캡슐화라는 걸 알아야 한다.
뭐 다양한 방법들 이론들이 있겠지만 간단히 살펴보면
캡슐화
말 그대로 캡슐에 꽁꽁 싸매듯이 밖에서 안에 있는 것들을 접근할 수 없게끔 만드는 것이 캡슐화다.
데이터(속성)와 데이터를 처리하는 함수를 하나로 묶는 것.
다시 말해 객체 외부에서는 객체 내부 정보를 직접 접근하거나 조작할 수 없고, 외부에서 접근할 수 있도록 정의된 메서드를 통해서만 관련 데이터를 접근할 수 있다.
정보은닉
즉 말 그대로 정보를 숨기는 것이다.
다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통하여 접근을 허용하는 것이다. 이를 통해서 외부 객체가 특정 객체의 데이터와 함수를 직접 접근하여 사용하거나 변경하지 못하므로 유지 보수와 소프트웨어 확장 시 오류를 최소화할 수 있음.
package j09_접근지정자.a;
public class Student {
// 접근지정자를 private로 한 것이 정보은닉이다.
// 정보은닉, 캡슐화에 대해서 알아보기.
private String name;
private String schoolName;
//setter
public void setName(String name) {
this.name = name;
}
//getter
public String getName() {
return name;
}
}
package j09_접근지정자.b;
public class Teacher {
private String name;
private String address;
private String phone;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public void showInfo() {
String _address = createMessage(name, address);
String _phone = createMessage(name, phone);
System.out.println(_address);
System.out.println(_phone);
}
//캡슐화.
private String createMessage(String name, String value) {
return name + "님: " + value;
}
}
package j09_접근지정자;
import j09_접근지정자.a.Student;
import j09_접근지정자.b.Teacher;
public class UserMain {
public static void main(String[] args) {
Student student = new Student();
Teacher teacher = new Teacher();
student.setName("문몰래");
System.out.println(student.getName());
teacher.setName("문몰래");
teacher.setAddress("부산");
teacher.setPhone("010-15324-456413");
teacher.showInfo();
}
UserMain 클래스를 살펴보면 지금 Student, Teacher 클래스를 가지고 각자의 인스턴스를 만들고 있다. 이후 student에 있는 name 변수에 값을 입력하려고 할 때 예전처럼 student.name = “ 문 몰래”처럼 직접 값을 넣지 않는다.
setName을 이용해서 값을 넣고 System.out.println(student.getName()); 에서 보듯이 getName을 이용해서 값을 받아온다.
근데 굳이 이렇게까지 해야 하나??? 싶은데 해야 한다.
사용자가 값을 이상하게 넣는 걸 방지해야 한다. 예를 들어 나이를 입력하는데 -1살이 말이 되는가?? 그런 걸 방지하기 위해 그리고 데이터 값을 막 바뀌는 걸 방지하기 위해 사용해야 한다.
그냥 무조건 필수적인 거다.
'Java' 카테고리의 다른 글
Switch문 (0) | 2023.08.17 |
---|---|
형변환(Java) (0) | 2023.08.06 |
Printf(Java) (0) | 2023.08.02 |
Static에 대하여 - JAVA (0) | 2023.02.15 |
접근지정자에 대하여 (0) | 2022.05.31 |