ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바에서 접근제어자!!
    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 클래스 안의 각각의 접근제어자로 선언된 클래스들이 있습니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    package 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 패키지에 접근을 해본 코드입니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    package 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는 접근할 수 없다는 것을

          볼 수 있습니다.


      ※ 결과화면

        


    반응형
Designed by Tistory.