Coding/JAVA

접근제어자 (public, protected , default, private) 차이와 그 예시 (+ static, final)

M1zz 2018. 6. 21. 17:52

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


private 이 붙어있다면, 해당 클래스에서만 접근이 가능하다.


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


default 는 별도의 설정이 없을 때 이고, 해당 패키지 내에서만 접근이 가능하다


package jump2java.house; public class HouseKim { String lastname = "kim"; }


package jump2java.house; public class HousePark { String lastname = "park"; public static void main(String[] args) { HouseKim kim = new HouseKim(); System.out.println(kim.lastname); } }


protected 가 붙어있다면 메소드는 동일 패키지내의 클래스, 해당 클래스를 상송박은 외부 패키지의 클래스에서 접근 가능


package jump2java.house; public class HousePark { protected String lastname = "park"; }


package jump2java.house.person; import house.HousePark; public class EungYongPark extends HousePark { public static void main(String[] args) { EungYongPark eyp = new EungYongPark(); System.out.println(eyp.lastname); } }


public 이 붙어있다면 어떤 클래스에서라도 접근이 가능하다.


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



static 키워드는 전역, 전적의 의미로 통용된다. 

변수에 사용되면 모든 해당 클래스는 같은 메모리를 공유한다.

특정한 인스턴스에 종속되지 않으며, 인스턴스를 만들지 않고도 사용가능하다.


static 메소드는 클래스 메소드라고도 부른다. 오버리이드가 불가능하고, 상속클래스에서 보이지 않는다.



final 키워드는 변수에 상수처럼 변하지 않는 값을 대입할 때 사용된다. 

대입연산자를 통해 한 번만 초기화가 가능하며, 상수를 만들 때 유용하다.

final 메소드는 오버라이드 하거나 숨길 수 없는 메소드이고,

클래스는 상속할 수 없는 클래스를 의미한다. 의미 그대로 상속 계층에서 마지막 클래스이다.


하지만 final의 정의가 상수는 아니다. 한번만 초기화 가능한 것이기 때문에 클래스 별로 다른 value의 값을 가질것 이다.

value의 값을 특정 값이라고 말할 수 없다.


public class Test {
  private final int value;

  public Test(int value) {
    this.value = value;
  }

  public int getValue() {
    return value;
  }
}

static final 을 관례처럼 사용하는 이유는 - 변수의 그 의미와 용도를 고정시키겠다는 뜻이다.

어떤 변하지 않는 값을 만든다는 것은 어디에서나 그 값을 이용할 수 있도록 효율을 위한 약속의 뜻이다.



참고 : https://wikidocs.net/232

참고 : https://djkeh.github.io/articles/Why-should-final-member-variables-be-conventionally-static-in-Java-kor/