JAVA 제어자

Dev.Shinny·2022년 9월 23일
0

자바의 정석

목록 보기
6/18

제어자(modifier)란?

제어자는 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다. 제어자의 종류는 크게 접근 제어자와 그 외 제어자로 나눌 수 있다.

접근 제어자   public, protected, default, private
그   외  static, final, abstract, native, transient, synchornized, volatile, stricffp

제어자는 클래스나 멤버변수와 메서드에 주로 사용되며, 하나의 대상에 대해서 여러 제어자를 조합하여 사용하는 것이 가능하다. 단, 접근 제어자는 한 번에 네 가지 중 하나만 선택해서 사용할 수 있다.

final

final은 '마지막의' 또는 '변경될 수 없는'의 의미를 가지고 있으며 거의 모든 대상에 사용될 수 있다.

변수에 사용되면 값을 변경할 수 없는 상수가 되며, 메서드에 사용되면 오버라이딩을 할 수 없게 되고 클래스에 사용되면 자신을 확장하는 자손클래스를 정의하지 못하게 된다.

abstract

abstract는 '미완성'의 의미를 가진다. 메서드의 선언부만 작성하고 실제 수행 내용은 구현되지 않은 추상 메서드를 선언하는데 사용한다.

추상 클래스는 아직 완성되지 않은 메서드가 존재하는 '미완성' 상태임으로 인스턴스를 생성할 수 없다.

이 자체로는 쓸모가 없지만, 다른 클래스(구상 클래스)가 이 클래스를 상속받아서 일부의 원하는 메서드만 오버라이딩해도 된다는 장점이 있다.

//추상 클래스 안 추상 메서드 
abstract class AbstractTest {
	abstract void move();
}

접근 제어자(acess modifier)

public > protected > (default) > private

접근 제어자 사용 이유

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

두 가지 이유 모두 객체지향 개념의 캡슐화(encapsulation)에 해당한다.

외부에서 직접 접근을 막고, 메소드(getter, setter)를 통한 간접 접근을 허용하도록 코드를 짜야한다.

만일 메서드 하나를 변경해야 한다고 가정했을 때, 이메서드의 접근 제어자가 public이라면 메서드를 변경한 후에 오류가 없는지 테스트해야하는 범위가 넓다. 그러나 접근 제어가 default라면 패키지 내부만 확인해 보면 되고, private이면 클래스 하나만 살펴보면 된다.

접근제어자를 적절히 선택해서 접근 범위를 최소화 하는 것이 중요하다.

생정자의 접근 제어자

생성자에 접근 제어자를 사용함으로써 인스턴스 생성을 제한할 수 있다. 보통 생성자의 접근 제어자는 클래스이 접근 제어자와 같지만, 다르게 지정도 가능하다.

제어자의 조합

제어자 조합시 주의사항

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







혼공_'자바의 정석'을 요약

profile
Hello I'm Shinny. A developer who try to enjoy the challenge.

0개의 댓글