제어자(modifier)

정순동·2023년 12월 6일
0

자바기초

목록 보기
32/89

제어자

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

접근제어자

  • public, protected, (default), private
    그외
  • static, final, abstract, native, transient, synchronized, volatile, strictfp

제어자는 클래스나 멤버변수와 메서드에 주로 사용되며, 하나의 대상에 대해서 여러 제어자를 조합하여 사용하는것이 가능하나 접근제어자는 한 개로 제한된다.

제어자들 간의 순서는 상관이 없지만 주로 접근 제어자를 맨 앞에 놓는 경향이있다.

static

static은 '클래스의' 또는 '공통적인'의 의미를 가지고 있다. 인스턴스 변수는 하나의 클래스로부터 생성되었더라도 각기 다른 값을 유지하지만, 클래스 변수(static멤버변수)는 인스턴스에 관계없이 같은 값을 갖는다. 그 이유는 하나의 변수를 모든 인스턴스가 공유하기 때문이다.

static이 붙은 멤버변수와 메서드, 그리고 초기화 블럭은 인스턴스가 아닌 클래스에 관계된것이기 때문에 인스턴스를 생성하지 않고도 사용할 수 있다.

static이 사용될 수 있는 곳

  • 멤버변수, 메서드, 초기화 블럭

final

final은 '마지막의'또는 '변경될 수 없는'의 의미를 가지고 있으며 거의 모든 대상에 사용될 수 있다.
변수에 사용되면 상수가 되며, 메서드에 사용되면 오버라이딩을 할 수 없게 되고, 클래스에 사용하면 상속할수 없는 클래스가 된다.

final이 사용될 수 있는 곳

  • 클래스, 메서드, 멤버변수, 지역변수

abstract

abtsract는 '미완성'혹은 '추상'이라는 의미를 가지고 있다. 메서드의 선언부만 작성하고 실제 수행내용은 구현하지 않은 추상 메서드를 선언하는데 사용한다.
그리고 클래스에 사용하면 클래스 내에 추상메서드가 존재한다는 것을 쉽게 알 수 잇게 한다.

abstract가 사용될 수 있는곳

  • 클래스, 메서드

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

	AbstractTest a = new AbstractTest(); // 에러. 추상 클래스의 인스턴스 생성불가.

접근제어자

접근 제어자란? 멤버 또는 클래스에 사용되어, 해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 한다.
접근 제어자가 default인 경우는 코드를 작성할 때 따로 붙히지 않는다.

접근 제어자가 사용될 수 있는 곳 - 클래스, 멤버변수, 메서드, 생성자

  • private 같은 클래스 내에서만 접근이 가능하다.
  • (default) 같은 패키지 내에서만 접근이 가능하다.
  • protected 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능하다.
  • public 접근 제한이 전혀 없다.

캡슐화와 접근 제어자

클래스나 멤버, 주로 멤버에 접근 제어자를 사용하는 이유는 클래스의 내부에 선언된 데이터를 보호하기 위해서이다. 다른 객체가 해당 클래스에서 지원하지 않는 값 변경 시도등을 막을수 있어야 객체지향적 코딩이 가능하기 때문이다. 이것을 데이터 감추기(data hiding)라고 하며, 객체지향개념의 캡슐화에 해당한다.
또한 외부에서 접근할 필요가 없는 멤버들을 private로 숨겨 외부에 노출하지 않음으로써 복잡성을 줄일 수도 있다.

접근 제어자를 사용하는 이유

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

0개의 댓글