[자바의 정석] 제어자 (modifier)

강신현·2022년 5월 24일
0

자바의 정석

목록 보기
12/15

✅ 제어자 ✅ final ✅ abstract ✅ 접근 제어자 (public, protected, default, private)

제어자

(modifier)

클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다.

접근 제어자 : public, protected, default, private
그 외 : static, final, abstract, native, transient, synchronized, volatile, strictfp

  • 하나의 대상에 대해서 여러 제어자를 조합하여 사용하는 것이 가능하다.
  • 단, 접근 제어자는 하나만 사용할 수 있다.
대상의미
static+멤버변수- 모든 인스턴스에 공통적으로 사용되는 클래스변수가 된다.
- 클래스변수는 인스턴스를 생성하지 않고도 사용 가능하다.
- 클래스가 메모리에 로드될 때 생성된다.
static+메서드- 인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 된다.
- static메서드 내에서는 인스턴스멤버들을 직접 사용할 수 없다.
  • 인스턴스 멤버를 사용하지 않는 메서드는 가능하다면 static 메서드로 하는 것이 인스턴스를 생성하지 않고도 호출이 가능해서 더 편리하고 속도도 더 빠르다.

- final

대상의미
클래스변경될 수 없는 클래스, 확장될 수 없는 클래스가 된다.
다른 클래스의 조상이 될 수 없다.
메서드변경될 수 없는 메서드, 오버라이딩을 통해 재정의 될 수 없다.
멤버, 지역 변수값을 변경할 수 없는 상수가 된다.
  • 일반적으로 선언과 초기화를 동시에 하지만, 인스턴스 변수의 경우 생성자에서 초기화 되도록 할 수 있다.
  • 이를 활용하면 각 인스턴스마다 final이 붙은 멤버변수가 다른 값을 갖도록 하는 것이 가능하다.

- abstract

대상의미
클래스클래스 내에 추상 메서드가 선언되어 있음을 의미한다.
메서드선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 알린다.
  • 추상 클래스는 아직 완성되지 않은 메서드가 존재하므로 인스턴스를 생성할 수 없다.
  • 다른 클래스가 이 클래스를 상속받아서 일부의 원하는 메서드만 오버라이딩해도 된다는 장점이 있다.

- 접근 제어자 (public, protected, default, private)

해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 한다.

접근 범위

제어자같은 클래스같은 패키지자손 클래스전체
publicOOOO
protectedOOOX
(default)OOXX
privateOXXX

사용 대상

대상사용가능한 접근 제어자
클래스public, (default)
메서드public, protected, (default), private
멤버변수public, protected, (default), private
지역변수(없음)

사용 이유

  1. 외부로부터 데이터를 보호하기 위해 (캡슐화)
  2. 내부적으로만 사용되는(외부에는 불필요한) 부분을 감추기 위해서 (private)

만일 메서드 하나를 변경해야 한다고 가정했을 때 메서드의 접근 제어자가 다음과 같다면 변경한 후에 테스트해야 하는 범위가

  • public : 전체 확인
  • default : 패키지 내부만 확인
  • private : 클래스 하나만 살펴보면됨

제어자의 조합

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

0개의 댓글