▸JAVA/기본 문법

접근 제한자 (Public, Protected, Default, Private)

코데방 2019. 12. 10.
728x90

접근 제한은 성능보다는 "캡슐화"를 구현하는 개념입니다. 자기 자신의 클래스 외 다른 곳에서의 접근 가능 여부를 결정해 줍니다.

 


 

[ 클래스(Class)의 접근제한자 ]

클래스의 접근제한자는 Public과 Default 2개가 있습니다. Default의 경우는 그냥 앞에 아무것도 안붙이면 Default(기본)로 인식합니다. 패키지가 같다는 의미는 가장 하위, 즉 클래스 파일이 속해 있는 폴더가 같다는 의미입니다. Public은 항상 모든 곳에서 접근이 가능하고 Default는 같은 패키지 안에서만 접근이 가능합니다.

 

Public 클래스의 이름은 클래스 파일 이름과 동일해야 합니다. 즉, 파일 하나 당 Public 클래스 한 개가 되고 나머지는 Default 클래스가 되어 동일 패키지에서만 접근이 가능합니다. 따라서 Public 클래스가 하나도 없고 모두가 Default 클래스인 파일은 존재할 수 있지만 반대로 Public 클래스가 여러 개인 파일은 존재할 수 없습니다. 즉, 클래스 파일과 동일 이름의 클래스를 Public으로 둘 것이냐 Default로 둘 것이냐만 결정하면 된다는 의미입니다.

이러한 이유로 클래스 파일을 생성할 때 타입을 지정할 수 있도록 되어 있습니다. Default는 동일 패키지에서만 호출이 가능하니 Default 대신 Package라고 되어 있네요. 첫 생성시에만 결정해주면 파일 내 존재하는 다른 클래스들은 신경쓸 필요가 없습니다.

 

 

 


 

[ 메소드/변수의 접근제한자 ]

메소드 및 변수의 접근제한자는 Public, Protected, Default, Private 네 가지가 있습니다. 같은 파일 내에도 여러 클래스가 있다면 똑같이 적용됩니다. 그리고 한 클래스 안에서는 접근 제한자에 관계 없이 모두 접근이 가능합니다(지역변수 제외).

 

 

 

 

 


 

C언어에서도 소스파일과 헤더파일을 사용해서 이러한 캡슐화를 어느 정도 구현할 수는 있지만 Java만큼 직관적이고 효율적이진 못합니다. 객체지향언어에서는 객체를 연결하는 과정을 중시하는 만큼 이러한 기능들이 절차지향언어에 비해 강력하다고 볼 수 있습니다.

728x90

'▸JAVA > 기본 문법' 카테고리의 다른 글

애노테이션(annotation)  (0) 2019.12.10
추상 (abstract) 클래스와 메소드  (0) 2019.12.10
클래스 상속 (extends)  (0) 2019.12.10
생성자와 this  (0) 2019.12.10
Static, Final의 의미와 사용법  (0) 2019.12.10

댓글

💲 추천 글