-
자바에서 접근제어자!!Java 2018. 12. 28. 15:31반응형
너무 오랜만에 다시 작성하는 블로그!!
초심을 잃지말자~~!!
자바의 접근제어자.. 당연히 알아야할 중요한 내용인데;;
순간의 물음에 자세하게 알려주지 못했다... 당연히 알고있다고 생각한 내용인데 그 때의 스스로를 반성하며 다시 정리해본다...ㅜㅜㅜ
욕을 많이 먹어도 싸다....
1. 접근제어자(Access Modifier)란?
- 변수, 메소드, 클래스에 대해 접근을 제어하는 문법이다.
※ 접근제어자의 사용 이유
▶ 규모가 큰 프로젝트에서 객체의 내부적으로 사용하는 변수나 메소드에 대해 누구나 접근하여 사용한다면
개발자가 의도하지않게 에러가 발생할 수 있고, 프로젝트가 망가질 확률이 크다.
이러한 문제로 객체의 로직을 보호하기 위해 멤버에 따라 외부의 접근을 허용하거나 차단할 필요가 있기 때문에 사용한다.
2. 접근제어자의 종류
① public
- 어디서나 접근이 가능하다. ( 즉, 다른 패키지에서도 접근 가능 )
-> All
② protected
- 같은 패키지내에서만 접근이 가능하다. ( 단, 상속 관계에 있을 때는 다른 패키지에서도 접근 가능 )
-> Class, Package, SubClasses
③ default
- 접근제어자의 지시가 없는 경우에 선언되며 같은 패키지내에서만 접근이 가능하다.
-> Class, Package
④ private
- 동일한 클래스 내에서만 접근이 가능하다.
-> Class
3. 접근제어자 테스트
▶ 아래에 org.bank 패키지 안의 Bank 클래스 안의 각각의 접근제어자로 선언된 클래스들이 있습니다.
ㅁㅇ123456789101112131415161718192021222324252627package org.bank;// access modifier test를 위한 클래스public class Bank {// public 으로 선언된 클래스public void testPublic() {System.out.println("testPublic ok~");}// protected 로 선언된 클래스protected void testProtected() {System.out.println("testProtected ok~");}// default 로 선언된 클래스void testDefault() {System.out.println("testDefault ok~");}// private 로 선언된 클래스@SuppressWarnings("unused")private void testPrivate() {System.out.println("testPrivate ok~");}}cs ▶ org.police 패키지에서 org.bank 패키지에 접근을 해본 코드입니다.
123456789101112131415161718192021222324252627282930package org.police;import org.bank.Bank;class AccessTest {public void test() {// 다른 package에서 public에 접근한다.Bank bk = new Bank();bk.testPublic();}}class AccessTest2 extends Bank{public void test() {testPublic();// 상속받았으므로 다른 팩키지의 클래스의 protected method 접근 가능testProtected();//testDefault(); 는 같은 패키지내에서만 접근이 가능하기에 에러 발생//testPrivate(); 는 같은 클래스내에서만 접근이 가능하기에 에러 발생}}public class TestAccessModifier {public static void main(String[] args) {AccessTest at = new AccessTest();at.test();AccessTest2 at2 = new AccessTest2();at2.test();}}cs ▶ 아래의 결과화면을 보면 police 패키지안의 AccessTest 클래스에서 bank 패키지안의 public에 접근하는 것을 볼 수 있다.
또한 Bank클래스의 상속을 받아 Protected에도 접근한 것을 볼 수 있는데, Default와 Private는 접근할 수 없다는 것을
볼 수 있습니다.
※ 결과화면
반응형'Java' 카테고리의 다른 글
Java 버전 정리 (0) 2021.07.12 스프링에서 사용자 IP주소를 IPv6에서 IPv4로 가져오기! (0) 2019.07.04 String vs StringBuilder vs StringBuffer 이해하기!! (0) 2018.08.30 객체 직렬화(Serialization) / 역직렬화(DeSerialization)란?? (0) 2018.08.18 Scanner vs BufferedReader (0) 2018.08.09