<< 목차 >>
Getter와 Setter에 대한 내 과거의 생각
Getter와 Setter를 쓰는 이유
Getter와 Setter에 대한 내 과거의 생각
자바로 키오스크를 구현했을 때나, 호텔 예약 프로그램을 구현했을 때나 드는 생각이 있었다.
왜 Getter와 Setter를 쓰는 것인가.
내가 헷갈린 이유는 이렇다. 아래 코드를 보자. name, company를 필드로 가지는 Car 클래스가 있다.
public class Car {
String name;
String company;
public Car( String name, String company ) {
this.name = name;
this.company = company;
}
public String getName() {
return name;
}
}
이 클래스에서 내가 name이라는 값을 얻고 싶을 때,
public class Main {
public static void main( String[] args ) {
Car car = new Car( "carName","carCompany" );
System.out.println(car.name);
System.out.println(car.getName());
}
}
이렇게 car.name으로 name 값을 얻어오나, getName() 메서드, 즉 Getter로 name 값을 얻어오나 사실 똑같은 거 아닌가. 라고 생각했다.
그래서 괜히 메서드(그 때는 Getter와 Setter가 단순한 메서드라고 생각했다.)를 괜히 늘리는 거 같은데? 싶기도 했고, 바로 변수를 불러와 값을 구해오는게 더 깔끔해보였기 때문에 Getter와 Setter를 쓰지 않았다.
프로젝트가 끝난 후 튜터님께서 해주시는 리뷰 영상을 보는데 튜터님은 Getter와 Setter를 쓰셨기에 궁금해서 튜터님께 직접 DM을 드려 이유를 여쭤 보았다.
Getter와 Setter를 쓰는 이유
위 코드에서 name과 getName()은 같은 데이터지만, Getter와 Setter를 썼을 때의 이점이 있다.
1. 캡슐화
Getter와 Setter를 쓰면 변수를 private으로 정의해줄 수 있다. private 변수의 장점은 변수를 캡슐화 해준다는 것! 밖에서 그 변수에 접근하려면 Getter나 Setter를 사용해야만 한다. 그러니 클래스 내부의 변수 데이터를 보호할 수 있고, 그 변수를 사용하는 의도가 분명해진다.(조회 or 재설정) (여기서 머리가 띵 했다. 이 부분에 대해서는 나도 공부를 안 한 것도 아니라서 조금만 더 생각하면 알 수 있었을 텐데 아쉬웠다.) 또한, Setter 함수 내부에 유효성 처리도 할 수 있다. 이상한 데이터로 변수를 지정하려고 할 때 막아줄 수 있다.(이 이유도 듣고 나서 와 진짜 그러네. 라고 바로 이해했다..)
2. 코드 컨벤션
Java에도 공통 코드 컨벤션 같은 것이 있다. 코드 컨벤션이란 누구라도 코드를 읽을 때 비슷한 흐름으로 읽을 수 있도록 코드 구현에 나름에 규칙을 부여하는 것이다. 예를 들면, 이런 것이다.
if(true){
} else { // 닫는 중괄호('}') 뒤에 else 를 쓴다.
} // 블럭을 종료할 때는 새 줄을 삽입하고 '}'를 사용하여 종료한다.
대다수의 회사에서는 캡슐화의 이점 때문에 자기 회사의 코드 컨벤션에 Getter와 Setter 항목을 넣어둔다.
이 두 가지 이유로 Getter와 Setter를 쓰는 것이다..!
어쩌면 나도 시간을 들여 고민해 봤다면 이유를 생각해 냈을 수도 있다. 하지만 그 시간을 아껴 튜터님께 이해가 쏙 되는 답변을 듣는 것도 나쁘지는 않은 것 같다. 오히려 내가 다른 사람들에게 설명할 수 있을 정도로 이해가 되어 버려서 너무 좋았다.
다음 프로젝트 때는 꼭 Getter와 Setter를 이용하여 캡슐화도 해 보고, Setter 메서드 내부에 유효성 처리도 한 번 생각해 봐야겠다!
'STUDY > JAVA' 카테고리의 다른 글
[TIL] < 자바의 정석 > 예제 HighLow - 예외처리해보기 (0) | 2023.06.15 |
---|---|
[TIL] printStackTrace()는 왜 아래에 찍힐까? (0) | 2023.06.14 |
[TIL] 프로그래머스 - 최댓값과 최솟값 ( 느려지게 하는 범인 찾기 ) (0) | 2023.06.11 |
[TIL] I/O Study - ByteArrayInputStream 예제 01 (0) | 2023.06.08 |
[TIL] 잘못 알았던 재귀함수 (0) | 2023.06.05 |