작심 365

[Java ] Getter , Setter 를 지양해야 되는 이유 본문

Back-End/Java

[Java ] Getter , Setter 를 지양해야 되는 이유

eunKyung KIM 2023. 10. 31. 20:43

Java 에서 클래스를 만들면 클래스와 관련된 멤버변수를 선언하게 되는데 이때 getter , setter 함수를 통해 멤버변수에 쉽게 접근해서 값을 변경하거나 가져올 수 있다. intelliJ 같은 툴도 자동으로 클래스에서 getter, setter 함수를 만들어 주는 기능도 제공하고 있다.

손쉽게 만들어서 가져다 쓸수 있기때문에 나도 자주 사용을 해왔는데 알고보니 좋은 방법이 아니라고 한다.

 

먼저 getter 와 setter 를 사용하는 이유에 대해서 생각해 보자. 

Getter와 Setter를 사용하는 이유

우선, 자바에서 클래스를 만들고 그 클래스 안에 맴버 변수들은 외부에서 마음대로 접근할 수 없도록 해야 한다. 그래서 보통은 맴버 변수 제어자를 private 으로 둔다. 

그러면 당연히 외부 클래스에서 다른 클래스의 멤버 변수의 값이 필요할수 있고 그때 멤버 변수를 바로 가져오는 것이 아닌 setter, getter 메서드를 통해서 가져오는 것이다. 

이것 말고도 setter, getter 를 통해 가져오는 이유는 값에 대한 예외처리등 다양한 장치를 걸어줄수 있기 때문이다.

간단한 예를 들면 다음과 같다.

 

 

정말 간단하게 사람 클래스를 하나 정의하고 거기에 사람 이름과 사람이 가진 돈을 변수로 주었다. 

그런데 사람이 갖고 있는 돈은 음수가 될수 없고 사람 이름도 반드시 한글자 이상이어야 한다는 조건이 있다면, 멤버 변수를 그냥 접근해서

값을 부여할수 있게 한다면 저런 규칙들을 적용할수가 없다. 그러나 함수를 통해서 값을 부여해준다면 다양한 예외처리를 통해서 값을 검증한 후에 넣어줄수 있다.

 


Getter와 Setter를 사용하면 안되는 이유

왜 그럴까?  getter, setter 함수는 접근 제한자를 public 으로 만든다. 애초에 외부에서 해당 클래스 변수에 쉽게 접근하기 위해 만든것이기 때문에 어떻게 보면 당연한 거다. 하지만, 바로 이것 때문에 객체 지향 원칙인 정보 은닉에 어긋나게 된다.

 

 

먼저 setter를 쓰지 말아야 할 이유는 다음과 같다.

함수란 어떤 하나의 기능을 하기위해 만들어 진것이다. 보통은 값을 그냥 순수하게 변경하는 일은 거의 없다.

즉 어떤 행위를 통해서 그 값이 변경된다. 예를 들어 돈이 변경되는 이유는 무엇인가를 사먹는다고 할때 돈이 변경될 수 있다. 

단순히 값만 변경하지 말고 다양한 예외 처리 조건을 넣어주면서 함수의 이름을 좀더 명확하게 지어주는 것이 좋다고 한다.

 

 

 다음으로 getter를 쓰지 말아야 할 이유는 다음과 같다.

이 경우도 마찬가지로 해당 함수가 어떤 행위로 해당 값을 가져오는지 알 수있게 좀더 이름을 명확하게 지어 주는 것이 좋다고 한다. 

 

 

 

 

 

'Back-End > Java' 카테고리의 다른 글

[Java] Array 와 ArrayList 차이  (4) 2023.10.25
Comments