프로그래밍언어/Java

자바(Java) - 접근 제어자(제한자, access modifier)란 무엇인가?

멍토 2020. 8. 23.

OOP의 특징 중 하나인 캡슐화를 잘 사용하기 위해 접근제어자(제한자, access modifier)를 사용해야 한다.

따라서 접근제어자에 대해 정리해보려 한다.

1. 접근제어자의 종류

2. 접근제어자는 왜 사용해야 할까?

3. 접근제어자는 언제 써야할까?


1. 접근제어자의 종류

접근제어자는 총 4가지로 public, protected, default, private가 있다.

접근 제어자는 클래스, 변수, 함수에 붙일 수 있다.

클래스의 접근 제어자에는 public, default만 가능하다.

여기서의 내용은 대부분 함수에 대한 이야기이다.

public : 외부에서의 모든 접근이 허용된 접근 제어자이다.

protected : 같은 패키지에 속해있을때만 호출이 가능하다. 예외적으로 다른패키지에 있더라고 상속관계에 있는 클래스라면 호출이 가능하다.

default : 앞에 접근제한자를 붙이지 않았다면 기본적으로 적용되는 제어자이다. 같은 패키지에 속해있을때만 호출이 가능하며 다른 패키지에서는 호출이 불가능해진다.

private : 동일 패키지에서조차 접근이 불가능한 접근제어자. 같은 클래스에서만 접근이 가능하다.


2. 접근제어자는 왜 사용해야 할까?

(함수의경우)

접근제어자를 사용하지 않는다면 외부에서는 몰라도 되는 내용을 보여주게 된다.

기능을 만들 다 보면 하나의 함수가 여러 가지 일들을 하게 되고 OOP의 단일책임원칙(Single Responsibility principle)을 지키기 위해 함수를 분리하게 된다.

이렇게 나뉜 기능들이 외부에 모두 공개되는 것이 과연 좋을까?

예로 들어본다면 리모컨으로 텔레비전채널을 바꾼다고 할 때 사용자가 과연 텔레비전채널을 바꾸는 원리에 대해서 알아야 할까?

사용자는 버튼을 누르면 채널이 바뀐다는 사실만 알면 되는 것이다.

이와 마찬가지로 외부 사용자 역시 자신이 필요한 기능만 호출할 수 있으면 된다.

이러한 내용이 무엇일가? 바로 캡슐화이다.

정리 : 접근제어자를 쓰는 이유는 객체의 캡슐화를 지켜주기 위해 쓰는 기술이기 때문이다.


3. 그렇다면 각자 어느 상황일 때 사용하면 좋을까?

왜 사용해야 하는지 이해했다면 무리 없이 적용이 가능할 것이다.

그렇지만 나는 진짜 모르겠다. 라고 한다면 처음부터 닫혀있는 접근제한자를 사용하면 된다. (함수일 때)

처음에는 private를 사용하다가 외부에서 해당 함수를 호출해야 한다면 변경한다.

만약 상속을 통해 자식객체가 호출해야 한다면 protected로 바꿔준다.

외부에서 호출해야 한다면 public으로 바꿔준다.

변수라면 때려죽여도 private로 두고 쓰면 된다.

필요하다면 getter로 넘겨주자. (getter도 최대한 자제하고 객체끼리 메시지를 보내서 통신하면 더 좋다.)

댓글

💲 광고입니다.