클래스의 모든 정보를 손쉽게 바꿀 수 있으면 안된다.
왜냐하면 클래스는 고객의 비밀번호/결제정보와 같이 민감한 정보들도 담고 있기 때문이다.
그래서 자바의 클래스는, 밖에 드러내도 되는 것들을 public, 함부로 바꾸면 안되는 것들을 private 으로 구분해서 나타낸답니다.
setter 는 이렇게 변수의 값 대입이 여러 곳에서, 제한 없이 가능한 것을 접근 제한자로 막고, 접근 범위에 한해서 메소드로 대입전 값을 처리 후 대입되게 하기 위해 사용된다.
Getter / 은닉성
메소드를 통해 값을 대입하는 것은 대입전 사전 처리가 필요하니 그럴 수 있다고 치자. Getter는 왜 쓰는 걸까. 어차피 그 값에 영향을 미치지 않으면 값을 가져오는거야 자유롭게 하면 안될까?
큰 프로젝트에서 엄청 긴 코드를 다룬다고 생각해보자. 다른 사람의 코드 속 모든 변수 값을 가져올 필요도 없을 뿐더러, 가져올 수 있는 것이 마냥 편한 일은 아닐 것이다.
자동차 게임을 개발하는 상황을 가정해보자. 만약 당신이 자동차가 충돌 시 튕겨나가는 이벤트 처리를 만드는 일을 담당한다면, 충돌하는 자동차의 색상이나, 브랜드를 알야할까? 아마 불필요한 정보에 신경이 빼앗길 것이다.
자동차 객체를 가져다 쓸 때 차종, 색, 휠, 차량 넘버, 제조사 등의 잡다한 정보는 자동차를 구현한 사람들의 몫이고, 다른 사람에게 방해만 될 뿐이다.
이렇게 변수들의 외부 노출을 제한하고, 노출 범위를 정해주는 것이 Getter고, 그러한 속성이 은닉성이다.
private으로 설정된 정보를 가져오는 메소드를 Getter, 정보를 바꾸는 메소드를 Setter 라고 부른다.
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;
}
Getter/Setter 사용하기
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());
'Study > Spring(Boot)' 카테고리의 다른 글
[Spring Boot] MyBatis 문법- #{} , ${} 사용법 (0) | 2023.03.10 |
---|---|
Maven과 Gradle에 대하여 (0) | 2022.11.03 |
[Spring] DI(의존성 주입)와 스프링 IoC 컨테이너(Bean) (0) | 2022.06.08 |
[Spring Boot] Controller에 대하여 (0) | 2022.05.30 |
댓글