자바 접근제어자 및 기타제어자

박종현·2022년 5월 15일

자바(Java) 기본

목록 보기
4/8

제어자 (Modifier)

  • 제어자는 클래스와 클래스 멤버의 선언시 사용하며 부가적인 의미를 부여하는 키워드를 의미한다.
  • 자바에서는 접근제어자와 기타제어자로 구분
  • 접근제어자는 두개 이상 함께 사용하는 것이 불가
  • 기타제어자는 경우에 따라 여러개 함께 사용 가능

제어자를 사용하는 이유?

  • 클래스 내부에 언언된 데이터를 보호하기 위함 → 정보은닉(data hiding)

    유효한 데이터 값을 유지하기 위해 외부에서 함부로 변경하지 못하도록 접근을 제어하는것

    • 사용자가 알 필요가 없는 정보는 숨겨야 한다는 개념
    • 접근제어자를 통해 클래스 외부의 접근의 정도를 설정함으로싸 정보 은닉을 구체화 할 수 있다.

접근제어자

아래로 내려갈수록 접근이 용이해짐

  • private

    • 해당 클래스 내에서만 접근가능한 접근제어자.
    • 같은 패키지에 포함되어 있는 다른 클래스나 자신을 상속하는 다른 클래스에서 조차 접근이 불가능.
    • 가장 작은 범위에서만 접근을 허용한다.
  • default

    • default는 아무런 접근제어자가 붙어있지 않은 경우이다.
    • 같은 패키지에 포함되어 있는 다른 클래스에서만 접근을 허용한다.
  • protected

    • 같은 패키지에 포함되어 있는 다른 클래스와 자기를 상속하는 다른 클래스에서 접근할 수 있다.
  • public

    • 어떤 클래스에서도 접근가능한 접근제어자.
    • 이 접근제어자를 사용하면 프로그램은 잘 돌아가겠지만 최대한 지양하는 것이 좋다. 정보은닉의 목적성이 떨어지고 코드의 유지보수성이 낮아지기 때문이다.

기타 제어자(final, static, abstract ...)

public class 클래스이름 {

	//필드선언
	int a;  

	//메소드
	public void method(){

	 	//지역변수
		int a; 

	}
}
  • final
    • 자바에서 final 제어자는 '변경할 수 없다'는 의미로 사용된다
    • 즉, 필드나 지역 변수에 사용하면 값을 변경할 수 없는 상수(constant)가 된다
    • 클래스에 사용하면 해당 클래스는 다른 클래스가 상속받을 수 없게 됩니다.
    • 메소드에 사용하면 해당 메소드는 오버라이딩(overriding)을 통한 재정의를 할 수 없음
      final class Car {                    // 이 클래스는 상속을 통해 서브 클래스를 생성할 수 없음.
      
          final int VAR;                   // 이 필드는 상수화되어 값을 변경할 수 없음.
      
          final void brake() {             // 이 메소드는 오버라이딩을 통해 재정의할 수 없음.
      
              final double MAX_NUM = 10.2; // 이 지역 변수는 상수화되어 값을 변경할 수 없음.
          }
      }
  • static
    • 프로그램 시작시 최초에 단 한 번만 생성되고 초기화된다.
    • 인스턴스를 생성하지 않고도 바로 사용가능
    • 해당 클래스의 모든 인스턴스가 공유
  • abstaract
    • 선언부만 있고 구현부가 없는 메소드를 추상 메소드라 하며, abstract 제어자를 붙여야 한다.
    • 추상 메소드가 포함하고 있는 추상 클래스도 반드시 abstract 제어자를 붙여야 한다.
    • 자바에서 abstract 제어자를 사용할 수 있는 대상 - 클래스, 메소드

0개의 댓글