메뉴 건너뛰기

조회 수 1564 추천 수 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
번호 제목 날짜 조회 수
86 jquery 스크롤(scroll) 따라다니는 배너 레이어 / 위로 버튼 / 화면 상단으로 이동 / scroll layer 이벤트 file 2017.07.04 748
85 BigDecimal타입의 사칙연산 2016.12.22 1185
84 다양한 문자 조합을 이용한 카운팅 구하기 2016.12.09 1824
83 자바 JXL 엑셀파일을 읽어 배열리턴 : JAVA EXCEL ArrayList 2016.12.09 1490
82 날짜 시간 포맷 제어 자바 클래스 : JAVA DateUtils Date time file 2016.12.09 1766
81 자바 다양한 형변환. 그리고 아스키 코드 String char int : JAVA 2016.12.09 1588
80 자바 XML 제어 라이브러리 XStream : JAVA 2016.12.09 1840
79 원하는 패턴의 날짜 구하기 : JAVA 2016.12.09 1297
78 iBATIS 동적으로 맵핑하기 2016.12.09 1435
77 GET 파라메타 쿼리문자열 컨트롤 : getQueryString 2016.12.09 1472
» 접근 제한자 private/ protected/ public / default file 2016.10.06 1564
75 예외처리(Exception handling)방법 file 2016.09.21 1801
74 My-SQL 을 이용한 JDBC file 2016.09.21 1623
73 static멤버와 관련된 예제 2016.09.21 1653
72 파일 읽고쓰는 암호화/복호화 2016.09.21 2390
71 JQuery 자동완성 플러그인 JSDT설치 file 2016.09.19 3649
70 System.out.println(); 이클립스에서 자동화기능 사용 file 2016.09.19 2199
69 웹브라우저(크롬) 설정하여 웹을 실행해 보자 file 2016.09.19 2223
68 한글이 깨졌다! 인코딩(encoding)을 설정하자 file 2016.09.19 1544
67 이클립스를 화려하게 꾸며보자 file 2016.09.19 1684
Board Pagination Prev 1 2 3 4 5 Next
/ 5

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved