초급의 끄적거림

[JAVA] 접근제어자 본문

JAVA

[JAVA] 접근제어자

codingD 2020. 7. 31. 16:56

자바의 접근제어자


  1. private

  2. default

  3. protected

  4. public

public > protected > default > private 순으로 보다 많은 접근을 허용함

 

private 


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

  • 아래 예제의 study 변수와 getStudy 메소드는 AccessStudy 클래스 안에서만 접근가능하고 다른 클래스에서는 접근이 불가능함.

public class AccessStudy {
    private String study;
    private String getStudy() {
        return this.study;
    }
}

 

default


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

  • StartJava와 EndJava의 패키지는 javastart.study로 동일한데 StartJava의 lastname 변수는 접근제어자가 default로 EndJava 클래스에서 main 메소드에서 사용한 것처럼 lee.lastname으로 StartJava의 lastname변수에 접근이 가능

StartJava.java

package javastart.study;

public class StartJava {
    String lastname = "lee";
}

 

EndJava.java

package javastart.study;

public class EndJava {
    String lastname = "yoon";

    public static void main(String[] args) {
        StartJava lee = new StartJava();
        System.out.println(lee.lastname);
    }
}

 

protected 


  • protected가 붙은 변수, 메소드는 동일 패키지 내의 클래스 또는 해당 클래스를 상속받은 외부 패키지의 클래스에서 접근 가능

  • NaEun 클래스를 상속받은 April 클래스의 패키지는 javastart.start.grup으로 NaEun의 패키지인 javastart.start와는 다르지만 NaEun의 lastname 변수가 protected로 설정되어 있기 때문에 april.lastname의 접근이 가능함

  • 만약 lastname의 접근제어자가 protected가 아닌 default 였다면 april.lastname은 컴파일 오류가 발생

NaEun.java

package javastudy.start;

public class NaEun {
    protected String lastname = "lee";
}
package javastudy.start.grup;

import start.NaEun;

public class April extends NaEun {       
    public static void main(String[] args) {
        April april = new April();
        System.out.println(april.lastname);       
    }    
}

 

public


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

  • NaEun의 info 변수는 public 접근제어자가 붙어 있어서 어떤 클래스에서든지 접근 가능

NaEun.java

package javastart.study;

public class NaEun {
    protected String lastname = "lee";
    public String info = "public";
 }
Comments