ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [java] 패키지와 접근제한자(public,protected/default/private)
    java 2023. 1. 19. 16:55
    패키지는 비슷한 성격의 자바 클래스들을 모아놓은 자바의 디렉토리이다.

    house패키지 내부에 HouseKim, HousePark 클래스가 있고, person은 house패키지의 서브패키지이다. person패키지 내부에는 EungYongPark클래스가있다.

     

    패키지 사용하기

    HouseKim패키지 내부에 있는 클래스(HousePark)이 HouseKim클래스를 사용한다면 import를 따로할필요 없다.

    외부 클래스에서 HouseKim클래스를 사용하려면 import를 해야한다.

    import house.HouseKim;
    
    public class Sample{
        public static void main(String[] args)  {
    
            HouseKim kim = new HouseKim();
    
        }
    }
    import house.*;
    
    //house패키지 내 모든 클래스를 사용할 수 있다.

    패키지를 사용하는 이유

    • 비슷한 성격의 클래스들끼리 묶을 수 있어 클래스 분류가 용이함.
    • 패키지명이 다르면 클래스명이 동일해도 충돌없이 사용가능

     


    접근제어자

    자바는 접근제어자를 사용하여 변수나 메소드의 사용권한을 설정한다.

     

    접근제어자

    1. private

    2. default

    3. protected

    4. public

    접근제어자는 private ->default ->protected-> public순으로 많은 접근을 허용한다.

     

    private

    private이 붙은 변수,메소드는 오직 해당클래스 내에서만 접근이 가능하다.

     

    default

    접근 제어자를 별도로 설정하지 않았을때 자동으로 설정되는 접근제한자이며,

    default가 붙은 변수,메소드는 해당 패키지 내에서만 접근이 가능하다.

    상속받고 어떻게하더라도 해당패키지가 아니면 접근이 불가능하다.

     

    package house;
    
    public class HouseKim {
        String lastname = "kim"; //default
    }
    
    ____________________________________________________________
    package house;
    
    public class HousePark {
        String lastname = "park";
    
        public static void main(String[] args) {
            HouseKim kim = new HouseKim(); 같은 패키지이기때문에 접근가능 (default)
            System.out.println(kim.lastname);
    
        }
    }

     

    protected

    protected가 붙은 변수, 메소드는

    동일 패키지의 클래스, 혹은 다른패키지 클래스에서 사용하려는 해당클래스를 상속받는경우 접근가능

    package house; //하우스패키지
    
    public class HousePark {
        protected String lastname = "park";
    
    }
    
    ________________________________________________________________________
    package house.person; //house의 서브패키지
    
    import house.HousePark;//외부클래스를 사용하려면 import해주어야함
    
    public class EungYongPark extends HousePark {//house패키지의 HousePark클래스를 상속
        public static void main(String[] args) {
            EungYongPark eyp = new EungYongPark();
            System.out.println(eyp.lastname); //다른패키지지만 사용할려는 클래스를 상속받았기때문에 사용가능함
    
        }
    
    }

    public

    어떤 클래스에서든 접근가능하다.

    댓글

lee-ding