[til_211103] [java] 캡슐화와 접근지정자

2021. 11. 3. 23:58JAVA

  • 캡슐화

캡슐화란, 1) 객체를 캡슐로 싸서, 2) 내부를 볼 수 없게 하는 것 (=> 외부의 접근으로부터 객체를 보호하는 것)

이는 재사용성과 생산성에 도움을 준다. 

자바에서는 클래스를 만드는 것 자체가 캡슐화 작업이다.

객체 모양의 틀을 선언하는 것, 즉 클래스를 만드는 것이 캡슐화로,

method (멤버 함수) 와 field (멤버 변수)가 클래스라는 캡슐 안에 구현되어 외부로부터 보호받는다.

 

class를 만들 때 field를 private으로 설정해두고,

field값을 외부에서 접근하거나 변경하고 싶다면 메소드를 통해서만 가능하다.

값을 보여주거나 변경할 수 있는 메소드를 만들어두고, 그 메소드에 '음수는 입력불가'라든지, '두 글자 이상 입력 가능' 이라든지 내가 필요로 하는 제한사항들을 걸어두어 외부 사용자가 마음대로 클래스의 값을 변경하지 못하도록 한다. 

예를 들어 리모컨 클래스라고 하면, 리모컨에 채널을 입력할 때 음수를 입력해버리면 리모컨의 기능을 제대로 하지 못하게 되므로 이를 방지하기 위해 필드는 private으로 두어 캡슐화하고 필요한 제한사항들이 모두 설정되어있는 공개된 메소드를 통해서만 변경할 수 있게 하는 작업이 캡슐화다.

 

 

  • 접근지정자

자바에서 접근지정자는 private, protected, public, default가 있다.

우선 default는 접근지정자를 생략했을 때 자동으로 디폴트 접근지정자로 설정된다.

개발자가 직접 private, protected, public을 지정하면

외부로부터 어느 범위까지 접근을 허용할 것인지 지정할 수 있다.

private는 외부로부터 완벽 차단하여 같은 클래스 내에서만 접근이 가능하다.

default는 동일 패키지* 내 타 클래스들의 접근을 허용한다.

protected도 동일 패키지 내 타 클래스들의 접근을 허용하며, 추가적으로 타 패키지의 자식클래스까지 허용한다.

public은 모든 클래스의 접근을 허용한다. 가장 넓은 공개 범위이다.

 

*패키지(package): 관련 있는 클래스 파일을 저장하는 디렉토리. 자바 응요으로그램은 하나 이상의 패키지로 구성한다.

자바 응용프로그램 > 패키지 1, 2, ... > 패키지 1 내 클래스파일 a, b, ... , 패키지 2 내 클래스 파일 a', b', ... ...