클래스 및 객체 내의 멤버들은 앞으로 설명할 접근 제한자에 따라 외부에서 멤버 변수를 접근하는대에 제한이 있는데요. 이때 사용되는 것이 바로 getter
와 setter
메서드 입니다.
이 두 메서드는 따로 존재하는 라이브러리 키워드는 아니고, 사용자가 은닉 되어있는 멤버를 간접적으로 제어하고자 할 때 생성하게 되는 메서드를 의미하는데, 특정 멤버의 상태를 얻어오고자 할 경우 메서드의 접두어로 get
을 붙이고, 특정 멤버에 특정한 값으로 할당하거나 초기화 할 경우에는 접두어로 set
을 붙여 접근 제한이 있는 멤버 요소를 간접적으로 접근 및 제어하는 것이 가능해집니다.
이럴 경우 해당 멤버의 보안성을 최대한으로 유지하면서 필요한 작업만 수행할 수 있다는 점에서 클래스 작성시 단골로 따라다니는 메서드라고 할 수 있겠습니다. 특히나 getter, setter 메서드를 이용하면 필드 변수에 할당되는
(참고로 getter 메서드 중 접근하는 멤버의 타입이 boolean일 경우 접두어로 관례상 get, set을 붙이는게 아니라 is를 붙입니다.)
public class Person { // public으로 선언된 필드 public String name; // 이름 // private으로 선언된 필드 private int age; // 나이 // default로 선언된 필드 (접근 제한자를 명시하지 않으면 default로 설정됨) boolean marriage; // 결혼 여부 // protected로 선언된 필드 protected String address; // 주소 // 매개변수를 받지 않을 때 생성자를 기본 속성으로 지정 public Person(){ this("John Doe", 30, false); // 다른 생성자 호출 } // 전달 받는 매개변수가 있을 때 public Person(String name){ this(name, 30, false); // 다른 생성자 호출 } // 전달 받는 매개변수가 있을 때 public Person(String name, int age){ this(name, age, false); // 다른 생성자 호출 } // public 생성자 public Person(String name, int age, boolean marriage) { this.name = name; this.age = age; this.marriage = marriage; } // Getter 메서드 public String getName() { return name; } public int getAge() { return age; } // boolean 타입 멤버의 경우 get이 아니라 is를 붙여줍니다. (setter는 다른 멤버들과 동일합니다.) public boolean isMarried() { return marriage; } protected String getAddress() { return address; } // Setter 메서드 public void setName(String name) { this.name = name; } // 나이를 세팅할 때 범위를 주면서 세팅할 수 있음. public void setAge(int age) { this.age = age >= 0 && age <= 150 ? age : 0; } public void setMarried(boolean marriage) { this.marriage = marriage; } protected void setAddress(String address) { this.address = address; } }
특히 이러한 getter
와 setter
는 당장 필요하지 않아 보이더라도, 후에 DTO(Data Transfer Object)
의 요소들을 세팅 할때나, Spring의 MVC 모델
에서 각 데이터 요소들의 정보를 저장할 때 주로 사용되므로 필수적으로 알아야 하는 개념이라고 생각하시면 되겠고,
뿐만 아니라 getter와 setter를 일일이 작성하지 않아도 각 IDE마다 getter나 setter를 자동 완성해주는 기능 또한 지원하며, Lombok과 같은 특정 라이브러리를 사용하면 단순한 어노테이션 만으로도 쉽게 getter와 setter를 자동으로 부여할 수도 있습니다.