Getter/Setter ?

getter, setter는 get method와 set method를 의미한다.

Get/Set method는 각각 값을 가져오는 메소드, 값을 수정하는 메소드이다.

자바에서 Get/Set Method를 굳이 일반 메소드와 구분하여 사용하는 이유가 무엇일까?

 

Why use Getter/Setter Method in JAVA?

자바는 대표적인 객체지향프로그래밍 언어이다.

객체지향프로그래밍에서는 객체의 데이터에 객체 외부가 직접적은로 접근하는 것을 막는다. (캡슐화)

외부에서 객체의 데이터를 직접적으로 읽고 변경하게 된다면 객체 무결성이 깨질 수 있기 때문이다.

자바에서는 이렇게 "민감한 데이터를 사용자에게서 숨기도록" 캡슐화를 위하여 멤버변수를 private으로 선언하여 get/set method를 통해서 멤버변수에 접근할 수 있도록 한다.

 

즉, 캡슐화를 위해서 get/set을 사용한다.

 

캡슐화 예시

사람 객체가 있다고 가정하자.

사람은 모두 이름과 나이, 성별, 생년월일, 주민등록번호를 가진다.

간단하게 예시만 들 것이기 때문에 이름과 주민번호를 멤버변수로 갖는 객체를 선언할 것이다.

이를 객체로 표현하면 다음과 같다.

class Person {
    public String name; // 이름
    public String personId; // 주민번호
}

 

여기서 접근제어자를 모두 public으로 선언하였는데, 주민번호는 개인정보이기 때문에 private으로 선언해줘야 알맞다. 이를 수정해준다.

 

class Person {
    public String name;
    private String personId;
}

 

이제 우리가 사람의 주민번호를 알고 싶을때 Person.personId로 접근할 수 없게 되었다. 특정 사람의 주민번호를 알기 위한 get method와 주민등록을 변경할 경우를 대비해 set method를 같이 선언해준다.

class Person {
    public String name;
    private String personId;
    
    public String getPersonId() {
    	return this.personId;
    }
    
    public void setPersonId(String newPersonId) {
        Pattern id = Pattern.compile("/^\d{2}[0-1]\d{1}[0-3]\d{1}\-[1-4]\d{6}$/");
        if (id.matcher(newPersonId).matches()) {
	        this.personId = newPersonId;
        }	
    }
}

 

이렇게 get/set 메소드를 활용하면 외부로부터 값을 보호하고, set 메소드를 통해서 수정하고자 하는 값이 올바른 값이 맞는지 확인하는 과정을 거칠 수 있다.

728x90

'Language > JAVA' 카테고리의 다른 글

[JAVA] Vector Class  (1) 2023.11.29
[JAVA] Enum 열거형  (0) 2023.11.04
[JAVA] 생성자  (0) 2023.10.25
[JAVA] 값 복사와 주소 복사  (0) 2023.10.25
[JAVA] Java Collections / Array / ArrayList  (2) 2023.10.25

+ Recent posts