자바 객체지향 프로그래밍의 Getter 와 Setter

Jee hyun. k·2021년 7월 13일
2

객체지향 프로그래밍 (OOP: Object-Oriented Programming)

-- 객체지향 프로그래밍에서는 객체의 데이터를 되도록 객체 외부에서 직접 접근하는 것을 막고 메소드를 통해 공개하는 방식을 사용한다. 이게 무슨말일까?
파라미터를 이용하여 매개 값을 검증해서 유효한 값만 데이터로 저장하면 객체의 무결성을 깨지 않고 데이터를 읽고 쓸 수 있게 해주기 때문이다. ( 무결성 이란 데이터 베이스 값이 정확하다는 것을 의미한다. 항상 정확한 데이터를 유지하고 있다는 것. 이는 데이터베이스에 저장된 데이터 값과 그것이 표현하는 현실 세계의 실제값이 일치하는 정확성을 의미한다. 무결성 제약조건을 걸면 정확하지 않은 데이터가 입력될 경우 이러한 값이 저장되지 않도록 할 수 있다. )
예를 들어 설명해주겠어

우선 중요한 정보가 될 클래스의 멤버 변수를 보통 private 형으로 구현한다.

private String userId;
private String password;

이렇게.

여기서 이 'private' 의 형태를 '접근제어자'라고 한다. 이 접근제어자를 그냥 편하게 'public' 으로 하면 안되나?

public String UserId;
public String password;

-- 이렇게 말이다. 뭐,, 에러는 안난다. 그렇지만 문제가 되기 때문에 Getter와 Setter가 나왔겠지..!

(아니 그래서 뭐가문제라는거냐)

정보 은닉(Information Hiding)과 '캡슐화(Encapsulation)'

-- 중요한 정보를 pubilc으로 외부에서 누구든지 마음대로 접근하고 읽고 쓰는 것이 가능하도록 허용해버리면 데이터가 안전하지 않을 뿐더러, 변수 지정에 중복이 생기거나 하는 경우엔 일관성을 깨뜨려 시스템 성능이 저하되는 문제가 생길 수 있다.

-- 그렇기 때문에 무분별한 값 변경으로 인한 에러 처리를 사전에 방지하고자, 다른 클래스에서 접근 시 내가 허용한 정보만 읽고 변경할 수 있게 정보 은닉(Information Hiding)을 해주는 것. 이것을 '캡슐화(Encapsulation)' 라고 한다.

(캡슐에 감쳐준다는 의미같아서 이름이 너무 귀여운 것 같다.ㅎ)

-- 그럼 이 데이터들을 외부에서 읽거나 변경하고자 할때는 어떻게 해야할까? 위에서 설명하였듯 파라미터를 이용하여 매개 값을 검증해서 유효한 값만 데이터로 저장 이 때 사용하는 것이 바로 GetterSetter이다.

  • 외부에서 객체의 데이터를 읽을 때 사용하는 것이 Getter,
  • 외부에서 메소드를 통해 객체를 변경할 때 사용하는 것이 Setter

Getter

-- 위에서 기재한 UserId와 password로 예를 들어 Getter를 메소드를 만들어보자면 다음과 같이 할 수 있다.

public String getUserId() {
	return userId;
}
public String getPassword() {
	return password;
  • 접근 제한자 : public
  • return type: 필드의 리턴타입과 동일
  • 메소드명: get+Fieldname
  • 리턴 값: 필드 값 (ex: userid, password)
만약 필드 타입이 boolean인 경우는 is+Fieldname 과 같이 명명한다.

여기서 Fieldname 은 필드 값의 첫번째 글자를 대문자로 바꿔서 'getUserId' 와 같이 써준다.

- 이렇게 최초의 사용된 단어를 제외한 첫번째 문자를 대문자로, 나머지를 소문자로 명명하는 규칙을
'카멜 케이스(camelcase)' 라고 한다.
자바의 클래스와 메소드 명명규칙은 camelcase 를 따른다.
( 패키지명은 표준 패턴을 따른다.)

Setter

-- 위에서 기재한 UserId와 password로 예를 들어 Setter를 메소드를 만들어보자면 다음과 같다.
public void setUserId(String userId) {
	this.userId= userId;
    }
    
public void setPassword(String password;) {
	this.password= password;
    }    
  • 접근 제한자: public

  • return type: void

  • 메소드명: set+Fieldname

  • 매개변수(parameter) type: 필드의 변수와 동일

    * setter 는 값을 변경해주는 메소드이기 때문에 파라미터를 받아 변경해준다. 때문에 return문이 없는 void 형을 사용한다.


-- 자 여기까지 간단하게 Getter 와 Setter 에 대해 정리해 보았다. 객체지향 프로그래밍의 느낌이 어느정도 정리가 되었길 바라며 마무리 하겠다.

profile
junior developer

0개의 댓글