hoon's bLog

Java public, protected, private, static, final 제어자 본문

IT/Java

Java public, protected, private, static, final 제어자

개발한기발자 2021. 1. 6. 14:35
반응형

안녕하세요! 오늘은 제어자에 대해서 포스팅을 해보도록 하겠습니다.

제어자란?

제어자(modifier)는 클래스, 변수 또는 매서드의 선언부에 함께 사용되어 부가적인 의미를 부여합니다.

주로 사용하는 접근제어자로는 public, protected, default, private, static, final, abstract 가 있고,

그 외 natvie, transient, synchronized, vloatile, strictfp 등이 있습니다.

Static이란?

- static 은 '클래스의' 또는 '공통적인'의 의미를 가지고 있습니다.

- 인스턴스 변수는 하나의 클래스로부터 생성되었더라도 각기 다른 값을 유지하지만,

  클래스변수(static 멤버 변수)는 인스턴스에 관계없이 같은 값을 갖습니다.

  (그 이유는 하나의 변수를 모든 인스턴스가 공유하기 때문!!)

- static이 붙은 멤버변수와 메서드, 그리고 초기화 블록은 인스턴스가 아닌,

  클래스에 관계 된 것이기 때문에 인스턴스를 생성하지 않고도 사용할 수 있습니다.

- static이 사용될 수 있는 곳 : 멤버변수, 메서드, 초기화 블록

대상 의미
멤버변수 - 모든 인스턴스에 공통적으로 사용되는 클래스 변수가 됩니다
- 클래스 변수는 인스턴스를 생성하지 않고도 사용 가능합니다.
- 클래스가 메모리에 로드될 때 생성됩니다.
메서드 - 인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 됩니다
- static 메서드 내에서는 인스턴스 멤버들을 직접 사용할 수 없습니다.
class StaticTest {
      static int width = 200; //클래스 변수
      static int height = 120; //클래스 변수

      static {
            //static 변수의 복잡한 초기화 수행 (초기화 블록)
      }

      static int max(int a, int b) {
            //클래스 메서드 return a > b ? a : b;
      }
}

final이란?

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

- 변수에 사용하면 값을 변경할 수 없는 상수가 되며, 메서드에 사용하면 오버라이딩을 할 수 없게 되고,

  클래스에 사용되면 자신을 확장하는 자손 클래스를 정의하지 못하게 됩니다.

- final이 사용될 수 있는 곳 : 클래스, 메서드, 멤버변수, 지역변수

 

대상 의미
클래스 - 변경될 수 없는 클래스, 확장할 수 없는 클래스가 됩니다.
- final로 지정된 클래스는 다른 클래스의 조상이 될 수 없습니다
메서드 - 변경될 수 없는 메서드, final로 지정된 메서드는 오버라이딩을 통해 재정의 될 수 없다.
멤버변수
지역변수
변수 앞에 final 이 붙으면, 값을 변경할 수 없는 상수가 된다

 

abstract란?

- abstract는 '미완성'의 의미를 가지고 있습니다.

- 메서드의 선언 부만 작성하고 실제 수행 내용은 구현하지 않은 추상메서드를 선언하는 데 사용합니다

- abstract가 사용될 수 있는 곳 : 클래스, 메서드

대상 의미
클래스 - 클래스 내에 추상메서드가 선언되어 있음을 의미
메서드 - 선언 부만 작성하고 구현부는 작성하지 않은 추상메서드임을 알립니다

 

접근제어자

접근제어자가 사용 가능한 곳 : 클래스, 멤버변수, 메서드, 생성자

접근제어자는 외부로부터 데이터를 보호하기 위해서,

외부에 불필요한, 내부적으로 사용되는 부분을 감추기 위해서 사용됩니다!

이게 바로 우리가 앞에서 배웠던 캡슐화이죠!

접근제어자 사용 범위를 정리하면 다음과 같습니다.

public : 접근 제한 없음
protected : 동일한 패키지 내의 클래스 또는 해당 클래스를 상속받은 외부의 클래스에서 접근 가능.
default : 동일한 패키지 내의 클래스에서 접근 가능.
private : 동일한 클래스에서만 접근 가능.

이렇게 접근자에 대해서 정리해봤습니다.

 

오늘도 긴 글 읽어주셔서 감사하고,

이만 포스팅 마무리하겠습니다:)

 

출처 : 자바의 정석 3rd Edition 내용 정리

728x90
반응형