공부기록/Java
Java (Getter)(Setter)
동석쿠
2022. 1. 21. 17:35
Private, Public
클래스의 모든 정보를 손쉽게 바꿀 수 있으면 안된다
왜냐하면 클래스는 고객의 비밀번호/결제정보와 같이 민감한 정보들도 담고 있기 때문.
그래서 자바의 클래스는, 밖에 드러내도 되는 것들을 public,
함부로 바꾸면 안되는 것들을 private 으로 구분해서 나타낸다.
private 일 경우 발생하는 오류
public 이면? 아무런 오류도 발생하지 않는다
Getter / Setter
변수를 private으로 해놓으면 마음대로 변수를 변경할 수 없게된다.
이럴 때 필요한게 getter와 setter다
// Getter
public String getTitle() {
return this.title;
}
// Getter
public String getTutor() {
return this.tutor;
}
// Getter
public int getDays() {
return this.days;
}
// Setter
public void setTitle(String title) {
this.title = title;
}
// Setter
public void setTutor(String tutor) {
this.tutor = tutor;
}
// Setter
public void setDays(int days) {
this.days = days;
}
Course course = new Course();
System.out.println(course.getTitle());
System.out.println(course.getTutor());
System.out.println(course.getDays());
course.setTitle("웹개발의 봄 스프링");
course.setTutor("남병관");
course.setDays(35);
System.out.println(course.getTitle());
System.out.println(course.getTutor());
System.out.println(course.getDays());
getter는 가져오는 것 setter는 설정하는 것
이렇게 getter와 setter로 프로그래밍 하는 이유는 개체의 무결성을 보장하기 위함이다.
예를들어 Man이라는 클래스에 weight라는 필드가 존재할 때 weight는 0보다 작을 수 없다.
그러나 외부에서 직접적으로 접근할 경우, weight에 -100이라는 값을 줌으로써 객체의 무결성이 깨질 수 있다.
이를 방지하기위해 필드를 private으로 만들어 위부의 접근을 제한한 후,
setter를 사용해 전달받은 값을 내부에서 가공해 필드에 넣어주는 방식을 사용하고
마찬가지로 필드 값을 가져올 때도, getter를 사용해 본 필드의 값을 숨긴 채 내부에서 가공한 값을 꺼낼 수 있다.
내가 이해한대로 쉽게 설명하면
같이 협업을 할 때 객체사양 제대로 이해하지 못한사람이 냅다 키값을 변경해버린다던가.
원래 이런이런식으로 다른 필드에 영향받아 변경되도록 해놓은 필드에 멋대로 직접 값을 변경한다던가.
이러한 행위들을 아예 못하게 객체 수정권한 자체를 한정짓는 것. 객체를 설계한 의도대로 가져다 쓰라고