Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

우주코딩

캡슐화, 게터와 세터 본문

자바 본 강의

캡슐화, 게터와 세터

우주코딩 2021. 7. 31. 11:15

캡슐화

'캡슐화' 문법은 개발자가 특정 멤버를 직접 접근하지 못하게 막는 문법이다

오직 메서드만을 통해 필드를 변경할 수 있도록 한다.
문법: 클래스 멤버나 인스턴스 멤버 선언할 때 접근 제한자(modifier)를 붙인다
접근 제한자

  • private : 클래스에 소속된 같은 멤버만 접근 가능
  • (default) : 같은 패키지에 소속된 멤버만 접근 가능
  • protected : 같은 패키지에 소속되거나 자손 클래스의 멤버만 접근 가능
  • public : 모두 접근 가능

게터

특정 필드를 변경하지 못하더라도 외부에서 이 값들을 조회할 수 있는 방법을 제공해야한다. 보통 이렇게 필드 값을 조회하는 용도로 사용하는 메서드의 경우 메서드의 용도를 이해하기 쉽도록 메서드를 만들 경우 getXxx() 형태로 이름을 짓는다.

get필드명(){ ... }

get으로 시작하는 이런 메서드를 게터라고 부른다.

세터

캡슐화로 특정 필드에 직접 접근하는 것을 막았지만, 캡슐화 되지 않은 다른 필드에 새로운 값을 저장하고 해당 필드 값을 적용해야하는 메서드를 호출하지 않았다면 연산 결과에 문제가 생긴다.

따라서 연산자에 사용하는 모든 변수를 캡슐화 한다.
그리고 직접 필드의 값을 바꾸게 하는 것이 아닌 메서드를 통해 바꾸도록 유도한다.

즉, 필드값을 바꿀때마다 연산자를 수행해야하는 경우 그 필드의 직접 접근을 막아라. 그리고 메서드를 통해 값을 설정하게 해라.

보통 필드의 값을 설정하는 메서드는 setXxx() 으로 이름을 짓는다.

이런 메서드를 세터라고 부른다.
필드를 비공개로 막으면 값을 조회할 수 없기 때문에 해당 필드의 getter도 함께 추가해야한다.

참고로 이런 게터와 세터는 "프로퍼티(property)" 라고 부른다.

프로퍼티 명 = 세터와 게터에서 set, get 을 제외하고 첫번째 문자를 소문자로 만든 것

void setKor(){
    프로퍼티명 = "kor"
}

또한, 코드를 작성할 때 필드나 메서드나 공개할 것은 공개하고 공개하지 말아야하는 것은 공개하지 않는다. 기본이 비공개이고, 공개할 멤버만 공개해야하는 것이다. 그래야 클래스가 잘못 사용되는 것을 방지할 수 있다.
하지만 게터와 세터를 모든 필드에 만드는 것은 아니다. 게터만 필요하면 게터만 만들 수 있다.

Comments