메뉴 건너뛰기

조회 수 5136 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄


접근 제한자(Access Modifier)

접근을 제한한다라는 뜻을 모르는 사람은 없습니다. 하지만 무엇 때문에 어떤 접근을 제한하는지를 알려고 하면 머리가 좀 아파옵니다. 기본적으로 소규모의 프로그램을 만들게 되면 딱히 중요할것 같지 않은데... 하지만 실무에서 수백개의 복잡한 클래스와 필드, 메소드, 생성자 연관관계와 공개유무등을 설정할때 꼭 필요한 부분입니다.




위 사진을 보시면 제일 큰 범위를 가지고 있는 public은 모든 접근을 허용하며, protected는 상속관계가 없는 다른 패키지 클래스를 차단합니다.  dafault(프랜들리)는 다른 패키지 클래스를 전부 차단하고, private가 모든 외부에 있는 클래스의 접근을 차단하죠. 


또한 각각 기본적으로 모든 접근 제한자가 필드와 생성자 메소드를 적용대상으로 하고 있지만 다른패키지에 있는 클래스를 제한하는건 public과 default 제한자만 해당됩니다.





 public 제한자 (모든것이 접근가능)

카페로 비유하자면 가입을 안해도 볼 수 있는 전체공개글이 public에 해당합니다. 외부의 모든 클래스 및 생성자, 메소드, 필드로부터 접근을 완전히 허용하고, 다른 개발자들에게 라이브리처럼 공유하려고 한다면 public 접근 제한자를 사용하시면 됩니다.   


먼저 동일 패키지에서 각 클래스간의 접근이 가능한것을 확인해봤는데요. test1클래스가 test2의 클래스의 접근을 허용하여 아무런 오류도 뜨지 않았습니다. 



이번엔 다른 패키지에서 접근이 가능한지 확인을 해봤습니다. 패키지1의 test1클래스는 패키지2의 test3클래스에 import되어 접근이 가능해지면서 오류가 뜨지 않았네요. 한마디로 public 접근 제한자를 사용하면 모든 클래스에게 공개할 수 있다로 정리 해볼수 있겠습니다. 





 protected 제한자 (클래스 선언불가)

위에서 public은 모든게 허용되는 제한자라 비교를 위해 클래스가 접근가능한지만 알아봤었고, 아래사진과 같이 protected와 private는 클래스 선언자체가 불가능합니다. 



그러므로 protected 접근 제한자는 같은 패키지에 속해있는 클래스에서 생성자와 메소드, 필드(객체)만 호출 할 수 있고, 다른 패키지에 있는 생성자, 메소드, 필드는 호출하지 못하지만 상속관계에 있는 클래스라면 예외로 호출이 가능합니다.


같은 패키지 안에 있는 클래스끼리는 호출을 허용하니 생략하도록 하고, 위 사진은 패키지가 다른 클래스에 있는 protected 생성자/메소드/필드를 가져오려면 상속을 받아 사용이 가능하게 한 예제입니다.


해석을 하자면... 패키지1에있는 test1클래스에서 다른 패키지에 있는 protected생성자를 가져오기 위해 test3 클래스를 상속받았더니 오류가 뜨지 않는거죠. 반대로 test3에 test1을 상속받고자 하면 오류가 생깁니다. 

( ★ protected가 들어있는 클래스가 부모 클래스라면 가능 )





 default 제한자 (앞에 생략되있는 접근제한자)

앞에 public이나 protected, private를 추가하지 않았다면 기본적으로 default 접근 제한자가 되어 다른 패키지와의 클래스 선언과 생성자/메소드/필드의 호출이 불가능해집니다. 물론 동일 패키지안에서는 모든게 허용됩니다.


동일 패키지간의 허용은 private(전체 비공개)말고 전부 허용이 가능하므로 다른 패키지간의 관계만을 따져보는게 좋다고 생각했습니다. 이번에도 해석하자면 test1클래스에 3번째 필드선언은 앞에 접근제한자가 생략되있는데 그것을 default 접근제한자로 부르고  다른패키지에 있는 test3클래스에서 호출해봤으나 접근이 불가하여 오류가 났습니다. 

(★ default는 friedly(프랜들리)라고도 부른다고 하네요.)





 private 제한자 (전부 접근 불가)

이건 그냥 게시판 글에서 비공개를 하면 글쓴이만 볼수있다로 비유가 가능하겠네요. 동일한 패키지든 다른 패키지든 전부 접근이 불가하도록 하는 최고로 강력한 접근 제한자입니다. 



private는 무조건 클래스 내부에서만 사용이 가능하기 때문에 다른 예제를 만들지는 않고 총정리한 요약사진을 올려보도록 할게요. 클래스 내부에서는 모두 접근이 가능 / 동일 패키지에서는 private를 제외한 전부 접근 가능 / 다른 패키지에는 public을 제외한 나머지는 접근이 불가하다고 이해하시면 빠를듯하네요!!


List of Articles
번호 제목 날짜 조회 수
111 A java Runtime Environment(JRE) or Java Development Kit(JDK) must be ~~~~ 하면서 이클립스가 실행안될때. file 2019.03.05 789
110 변환 (문자, 숫자, KSC5601.....) 2019.01.16 1281
109 기본적인 스크립트 보안 2019.01.16 6044
108 JAVA/JSP SQL Injection 해킹 방지를 위한 코딩 2019.01.10 846
107 Java : JSOUP 를 이용, html에서 소스, 링크경로 추출후 절대 경로로 바꾸기 2019.01.08 1166
106 Apache Commons HttpClient 3.x 로 Http 서버에 파일 전송하기 file 2019.01.08 1136
105 JSON 문자열을 Map 으로 변환하기(Jackson 사용) 2019.01.08 1010
104 시간관련 클래스 file 2018.09.21 1186
103 직렬화 / 역직렬화 file 2018.09.21 951
102 예외처리 / 예외발생 file 2018.09.21 934
101 JAVA 현재 시간 구하기 file 2018.07.09 1266
100 JAVA 이클립스 인코딩 변경하기 file 2018.07.09 1587
99 JAVA JDK 제거하기 file 2018.07.09 1409
98 JAVA CentOS JDK 설치 및 환경변수 설정 file 2018.07.09 1821
97 JAVA 정규표현식을 이용한 패턴매칭(HTML 제거) 2018.07.09 1164
96 JAVA 두개의 문서 파일 비교하기 2018.07.09 2388
95 JAVA 인코딩을 변경하여 파일 출력하기 (EUC_KR) 2018.07.09 1105
94 JAVA TreeMap 인덱스 값 가져오기 및 Collections.sort 사용하기 2018.07.09 1486
93 JAVA public, private, protected 정리 2018.07.09 1001
92 JAVA HashMap의 Key값 출력하기 2018.07.09 1069
Board Pagination Prev 1 2 3 4 5 6 7 8 Next
/ 8

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved