getter 와 setter 는 왜 사용하는걸까?

charco·2021년 6월 2일
0

영어해석

목록 보기
3/4

이 글은 Getters And Setters in Java Explained 를 번역한 글입니다.
번역에 오류가 있을 수 있으니 주의바랍니다.

무의식적으로 쓰던 getter 과 setter에 대한 궁금증이 생겼다.
암기만 하고 있었을 뿐 어떤 상황에서 getter 과 setter을 쓰는지
제대로 알고 있지 못했다.
그래서 getter 과 setter을 썼을때 개발자가 얻을 수 있는
이점
에 대해 알아보기로 했다.


getter, setter 은 데이터를 보호하기 위해 사용한다. 특히 클래스를 생성할때.

getter 은 인스턴스 변수를 반환하고 setter 은 인스턴스 변수를
대입하거나 수정한다. 그래서 accessor이나 mutator로 불리기도 한다(이건 중요하지 않음).

관습에 따라 getter은 변수 앞에 get, setter은 변수 앞에 set 이 붙고
그 변수들의 앞글자는 대문자로 한다.

public class Vehicle {
  private String color;
  
  // Getter
  public String getColor() {
    return color;
  }
  
  // Setter
  public void setColor(String c) {
    this.color = c;
  }
}

getter 은 객체의 attribute(변수) 를 반환하고 setter 은
파라미터를 받아서 attribute 에 할당한다.

getter와 setter 가 정의되면 main 메서드에서 이렇게 사용할 수 있다.

public static void main(String[] args) {
  Vehicle v1 = new Vehicle();
  v1.setColor("Red");
  System.out.println(v1.getColor());
}

// 결과 "Red"

getter 와 setter 로 값들을 처리할 수 있다.
setter 에서 값이 할당되기 전에 파라미터의 유효성을 검사 할 수도 있다(validate).


getter, setter을 왜 사용하는 걸까?

getter, setter을 통해 값에 대해 얼마나 중요하게 다룰지 조절할 수 있다.
간단히 아래의 예제를 보자.

public void setNumber(int number) {
  if (number < 1 || number > 10) {
    throw new IllegalArgumentException();
  }
  this.number = num;
}

위의 setter을 통해 1과 10 사이의 숫자들만 number 변수에 할당 할 수 있다. 아래와 같이 직접 수정하는 것보다 훨씬 나은 방식이다.

obj.number = 13;

1과 10 사이의 값만을 원하는데 13을 할당했다.
이렇게 값을 대입하면 원치 않는 에러나 결과가 나올 수 있다.

number 변수를 private 으로 지정하고 setNumber 메서드를
이용하면 이와 같은 문제를 예방할 수 있다.

number이 private이므로 number을 불러오려면 자연스럽게
getter 메서드가 있어야 한다.

public int getNumber() {
  return this.number;
}

내 생각대로 정리하자면 데이터에 할당될 값이 어떤 기준 안에 있어야 할때
setter을 사용해 그 기준에 맞게 강제할 수 있다는 점이 중요한 것 같다.
그에 따라 getter은 필연적으로 따라오는 것이다.

profile
아직 배우는 중입니다

0개의 댓글