setter,getter는 spring에서 lombok을 통해서 쉽게 사용하는데, 헷갈리는 부분이 있어서 한번 정리하고 싶었다.
왜 쓸까 ?
객체 지향 프로그래밍에서는 객체의 데이터는 객체 외부에서 직접적으로 접근 하는 것을 막는다. 객체의 데이터를 외부에서 읽고 변경하게되면 객체의 무결성이 깨질수 있기 때문이다.
그래서 객체 지향프로그래밍에서는 메소드를 통해서 데이터를 변경하는 방법을 선호한다.
데이터는 외부에서 접근하지 않도록 막고, 메소드를 공개해서 외부에서는 메소드를 통해 데이터에 접근하도록 하는 것이다. (메소드는 매개값을 검증해서 유효한 값만 데이터로 저장할 수있기때문)
그리고 이렇게 private로 멤버변수를 선언한 경우에는 객체 내에서 set,get과 같은 메소드를 사용해야한다.
set은 객체에 메소드를 사용해서 전달하는 값을 넣어주는 것이다. 값을 넣어주는 것이기 때문에 따로 메소드의 타입이 없기에 void를 주면 된다.
get은 객체 안에있는 값을 꺼내주는 (조회하는) 메소드이다. 메소드를 실행했을때 값을 가져와야 하기때문에 반환값(리턴)이 있어야 해서 조회하고자 하는 값의 타입을 메소드에 넣어주고 리턴값으로 받아야한다.
// 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());