[Java] 접근제어자

이용준·2022년 11월 6일
0

Java

목록 보기
24/29

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

1.접근제어자

변수나 메소드의 사용 권한은 다음과 같은 접근 제어자를 사용해 설정할 수 있다.
1. pirvate
2. default
3. protected
4. public
private < default < protected < public 순으로 많은 접근을 허용한다.

1-1.pirvate

private이 붙은 변수, 메소드는 해당 클래스에서만 접근 가능

public class Sample{
  private String secret;
  private String getSecret();{
    return this.secret;
  }
}  

secret 변수와 getSecret() 메소드는 오직 Sample 클래스에서만 접근 가능

1-2.default

접근 제어자를 별도로 사용하지 않는다면 접근 제어자가 없는 변수/메소는 default 접근 제어자가 되어 해당 패키지 내에서만 접근 가능

  • 예제)house/HouseKim.java

    package house; // 패키지 동일
    
    public class HouseKim{
      String lastname = "kim";  // lastname은 default 접근제어자로 설정된다.
    }  
  • house/HousePark.java

    package house; // 패키지 동일
    
    public class HousePark{
      String lastname = "park";
      
      public static void main(String[] args){
        HouseKim = new HouseKim();
        System.out.println(kim.lastname);  // HouseKim 클래스의 lastname 변수 사용 가능
      }
    }  

    HouseKim과 HousePark 패키지는 house로 동일하다. 따라서 HousePark 클래스에서 HouseKim의 lastname 변수에 접근이 가능하다.

1-3.protected

  1. 동일 패키지의 클래스
  2. 해당 클래스를 상속받은 다른 패키지의 클래스
    의 경우 접근이 가능하다.
  • 예) house/HousePark.java

    package house; // 아래와 패키지 다름
    
     public class HousePark{
       protected String lastname = "park";
     }  
  • 예) house/person/EunYoungPark.java

    package house.person; // 위와 패키지 다름
    
    import house. HousePark;
    
    public class EunYoungPark extends HousePark{ // HousePark 상속받음
      public static void main(String[] args){
        EunYoungPark eyp = new EunYoungPark();
        System.out.println(eyp.lastname); // 상속한 클래스의 protected 변수는 접근 가능
      }
    }  

    위 두가지 예는 패키지가 다르지만 HousePark의 lastname 변수가 protected이므로 eyp.lastname과 같은 접근이 가능하다.

    1-4.public

    public 접근제어자가 붙은 변수/메소드는 어떤 클래스에서라도 접근 가능.

    package house;
    
    public class HousePark{
      protected String lastname = "park";
      public String info = "this is public message.";
    }

    위 예제에서 info 변수는 public 접근제어자가 붙어 있으므로 어떤 클래스라도 접근이 가능하다.

    클래스나 메소드 역시 접근제어자 규칙을 따른다.
    접근제어자를 모두 public으로 설정해도 프로그램은 작동할 것이다. 그러나 접근제어자를 이용하면 프로그래머의 실수 방지 및 기타 위험요소 제거 등의 장점이 있다.

profile
뚝딱뚝딱

0개의 댓글