JAVA
getter와 setter
signal시노
2024. 7. 10. 14:14
학생들의 이름, 학년 그리고 국영수 점수를 멤버변수로 갖는 클래스가 있다.
public class Student {
//이름
String name;
//학년
int grade;
//국영수
int [] score = new int[3];
}
외부 클래스에서 Student 객체를 생성하고 호출해 보자
public class App extends Student {
public static void main(String[] args) throws Exception {
Student st1 = new Student();
}
}
st1.name = "김똥개";
라고 name 변수에 값을 넣을 수 있다.
액세스 모디파이어가 디폴드이기 때문에 가능하다.
public class Student {
//이름
private String name;
//학년
private int grade;
//국영수
private int [] score = new int[3];
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
name 변수의 getter와 setter를 만들었다.
다시 App 클래스로 돌아와서
st1.name = "김똥개"; 라고 해도 되지만
st1.setName("김똥개");
st1.getName();
이라고도 할 수 있다.
그런데 위에 st1.name = "김똥개"; 가
st1.setName("김똥개");
st1.getName();
보다 훨씬 간단하고 리더빌리티가 높으며 결과는 똑같다.
그렇다면 왜 getter와 setter를 사용할까?
구글링을 해보면 객체지향 프로그래밍에서는 이렇게 해야 한다
어쩌고~ 저쩌고~
솔직히 알아듣기 힘들다.
그런 다양한 의미들도 있지만 결국 getter, setter도 메소드이고 메소드는 하나의 기능을 수행할 뿐이다.
public void setName(String name) {
for (int i = 0; i < name.length(); i++) {
if(i > 10) {
System.out.println("error");
return;
}
}
this.name = name;
}
이름이 10글자 이상이라면 콘솔창에 error를 찍고 메소드를 종료할 것이다.
setter의 구현부를 통해 가드 코드를 작성할 수 있다.
get은 어떠한 값을 리턴 받는 것, set은 어떠한 값을 조작하는 것
이것이 약속이다.
결국 리더빌리티의 향상성으로 이어질 것이다.