제어자(Modifier)

김호준·2021년 10월 26일
0
post-custom-banner

1. 접근 제어자(Access Modifier)

  • private -> default -> protected -> public 순으로 보다 많은 접근을 허용한다
  • 접근제어자는 생략가능하며 생략했을 때는 자동으로 default 임을 뜻하게 된다. 따라서 default 일경우에는 접근제어자를 지정하지 않는다.
  • 접근제어자가 사용될 수 있는 곳 : 클래스, 멤버변수, 메서드, 생성자

1. public

  • 접근 제한이 전혀 없다.
  • 접근제어자가 public으로 설정되었다면 public 접근제어자가 붙은 변수, 메소드는 어떤 클래스에서라도 접근이 가능하다.

2. protected

  • 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근 가능하다.
  • 접근제어자가 protected로 설정되었다면 protected가 붙은 변수, 메소드는 동일 패키지내의 클래스 또는 해당 클래스를 상속받은 외부 패키지의 클래스에서 접근이 가능하다.

3. default

  • 같은 패키지 내에서만 접근 가능하다.
  • 접근제어자를 별도로 설정하지 않는다면 접근제어자가 없는 변수, 메소드는 default 접근제어자가 되어 해당 패키지 내에서만 접근이 가능하다.

4. private

  • 같은 클래스 내에서만 접근 가능하다.
  • 접근제어자가 private으로 설정되었다면 private 이 붙은 변수, 메소드는 해당 클래스에서만 접근이 가능하다.

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

  • 접근 제어자를 사용하는 이유는 클래스의 내부에 선언된 데이터를 보호하기 위해서이다. 데이터가 유효한 값을 유지하도록 또는 비밀번호와 같은 데이터를 외부에서 함부로 변경하지 못하도록 하기 위해서는 외부로부터의 접근을 제한하는 것이 필요하다

  • 이것을 데이터 감추기라고 하며 객체지향개념에선 캡슐화(encapsulation)이라 한다.

2. 제어자(Modifier)

# 제어자를 사용하는 이유

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

1. static (클래스의, 공통적인)

  • 클래스변수(static 멤버변수)는 인스턴스에 관계없이 같은 값을 갖는다.
  • static이 붙은 멤버변수와 메서드 그리고 초기화 블럭은 인스턴스가 아닌 클래스에 관계된 것이기 때문에 인스턴스를 생성하지 않고도 사용할 수 있다.
  • 클래스가 메모리에 로드될 때 멤버변수가 생성된다.
  • static이 사용될 수 있는 곳 : 멤버변수, 메서드, 초기화 블럭

2. final (마지막의, 변경될 수 없는)

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

3. abstract (추상의, 미완성의)

  • 메서드의 선언부만 작성하고 실제 수행내용은 구현하지 않은 추상 메서드를 선언하는데 사용된다.
  • 클래스에 사용되어 클래스 내에 추상메서드가 존재한다는 것을 쉽게 알 수 있게 한다.
  • 추상 클래스는 아직 완성되지 않은 메서드가 존재하는 '미완성 설계도'이므로 인스턴스를 생성할 수 없다.
profile
Go-getter Developer
post-custom-banner

0개의 댓글