접근제어자 (Access modifier)

Coding Cat·2023년 11월 6일

JAVA

목록 보기
2/4

제어자(modifier)

  • 제어자(modifier)란 클래스와 클래스 멤버(필드, 메서드, 생성자)를 사용할 때, 접근할 수 있는 범위를 지정하해주는 역할을 한다.
  • 자바에서 제어자는 접근 제어자(acess modifier)와 기타제어자로 구분된다.
  • 기타제어자는 여러 개를 함께 사용가능하지만, 접근제어자는 두 개 이상 사용이 불가하다.

접근 제어자


-이미지 출처
공개범위는 public > protected > default(생략) > private 순으로 좁아진다.

  • private : 같은 클래스 내에서만 접근가능
  • default : 같은 패키지 내에서만 접근가능
  • protected : 같은 패키지 내에서, 다른 패키지의 자식 클래스에서 접근 가능
  • public : 접근 제한이 없다.

접근제어자는 생략가능하며 생략했을 때는 자동으로default임을 뜻한다.

클래스의 접근 제어자

클래스를 정의할 때 사용할 수 있는 접근제어자는 public과 default(생략) 두가지다.
1. public 클래스 : public을 사용하면, 모든 클래스에서 이 클래스에 접근이 가능하다. (패키지에 상관없음)
2. default(생략) 클래스 : 클래스앞에 접근제어자가 없으면 default 클래스로, 같은 패키지 안의 클래스에서만 접근이 가능하다.

기타 제어자

  • static(정적 필드)
    같은 클래스로부터 객체를 여러 개 생성하면 각각의 객체는 고유한 상태를 가지고 있으며 서로 다른 메모리 공간에 저장된다. 하지만 static 제어자를 사용하면 모든 객체가 공유하는 필드를 만들 수 있으며, 이 정적 필드는 한 번만 생성되고 별도의 메모리 공간(static 영역)에 저장된다. 모든 객체는 정적 필드의 값을 변경할 수 있으나 정적 필드는 클래스를 인스턴스화 하지 않아도 변경할 수 있다. 덧붙여서, 정적 필드를 클래스 변수라고 부르기도 한다.
  • abstract
    abstract는 클래스나 메서드에 사용될 수 있다. 메서드의 선언부만 작성하고 정의부는 구현하지 않는 추상메서드를 선언할 때 사용한다.
  • final
    final은 클래스나 메서드, 멤버변수, 지역변수에 사용할 수 있다. 변수에 사용하면 값을 변경할 수 없는 상수가 된다. 메서드에 사용되면 오버라이딩을 할 수 없게 되고, 클래스에 사용되면 자신을 확장하는 자식클래스를 정의하지 못하게 된다.

생성자를 이용한 final 멤버 변수의 초기화
1. final이 붙은 변수는 상수라서 선언과 동시에 초기화
2. 인스턴스 변수의 경우 생성자에서 초기화
클래스 내에 매개변수를 갖는 생성자를 선언하여, 인스턴스를 생성할 때 final이 붙은 멤버변수를 초기화하는데 필요한 값을 생성자의 매개변수로 제공받는 것이다.
이 기능을 이용하면 final이 붙은 멤버변수가 다른 값을 갖도록하는 것

제어자 조합과 주의사항


1) 메서드에 static과 abstract를 함께 사용할 수 없다.
: static 메서드는 몸통이 있는 메서드에만 사용할 수 있기 때문
2) 클래스에 abstract와 final을 동시에 사용할 수 없다.
:클래스에 사용되는 final은 클래스를 확장할 수 없다는 의미이고, abstract는 상속을 통해서 완성되어야 한다는 의미이므로 서로 모순되기 때문이다.
3) abstract메서드의 접근 제어자가 private일 수 없다.
: abstract메서드는 자손클래스에서 구현하기 위해 접근해야 하기 때문이다.
4) 메서드에 private와 final을 같이 사용할 필요는 없다
: 접근 제어자가 private인 메서드는 오버라이딩될 수 없기 때문이다. 이 둘 중 하나만 사용해도 의미가 충분하다.

참고한 주소
https://88240.tistory.com/448
https://pridiot.tistory.com/46

profile
나의 archive

0개의 댓글