메뉴 건너뛰기

조회 수 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
번호 제목 날짜 조회 수
131 Eclipse에서 import문 자동으로 작성하는 기능 file 2016.09.19 4811
130 간단한 개인홈페이지 만들어보기 file 2016.08.29 4748
129 이클립스 플러그인 삭제방법 file 2016.09.19 4721
128 한글이 깨졌다! 인코딩(encoding)을 설정하자 file 2016.09.19 4715
127 GET 파라메타 쿼리문자열 컨트롤 : getQueryString 2016.12.09 4705
126 기존 프로젝트, Table, View 모두 다 삭제하기 file 2016.08.29 4600
125 예외처리(Exception handling)방법 file 2016.09.21 4584
124 No bean name '***Service' is defined 오류나는 이유 및 해결방법 file 2016.08.29 4561
123 자바용 날짜 계산 2016.09.19 4543
122 회원가입 양식에서 (필수/옵션)필드 추가/제거하기 file 2016.08.29 4471
121 [자바(스프링&mybatis&jsp) 프로젝트 & 아파치 &톰켓 연동 ] 이클립스 프로젝트 생성 순서08.commons-logging 설치 file 2016.08.18 4458
120 이클립스를 화려하게 꾸며보자 file 2016.09.19 4457
119 자바 JXL 엑셀파일을 읽어 배열리턴 : JAVA EXCEL ArrayList 2016.12.09 4389
118 My-SQL 을 이용한 JDBC file 2016.09.21 4282
117 배치관리 컴포넌트 생성 후 에러 날 때 해결방법 file 2016.08.29 4265
116 전자정부 표준프레임워크 설치하기 file 2016.08.29 4250
115 [자바(스프링&mybatis&jsp) 프로젝트 & 아파치 &톰켓 연동 ] 이클립스 프로젝트 생성 순서04.jdbc 드라이버 설치 file 2016.08.18 4209
114 자바 다양한 형변환. 그리고 아스키 코드 String char int : JAVA 2016.12.09 4188
113 eclipse 콘솔(로그)에 디버그(Debug) 모드에서 실행된 쿼리문을 보여주자. - 전자정부프레임워크 오라클 file 2016.08.29 4172
112 프로젝트 & 아파치 &톰켓 연동 ]2. 자바 설치 file 2016.08.18 4170
Board Pagination Prev 1 2 3 4 5 6 7 8 Next
/ 8

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved