java 키워드(접근 제한자)
final
final은 클래스, 멤버변수, 메소드에 모두 사용할 수 있는 지정어 이다.
final class
클래스에 final이 사용될 경우, 해당 클래스를 다른 클래스가 상속 할 수 없다. 이를 사용하는 가장 큰 이유는 보안을 위해서 사용하고 API에 정의 되어 있는 대부분의 클래스들은 final로 선언이 되어 있다.
final 변수
변수에 final이 사용이 되면 C 언어에서의 상수(static)와 같은 목적으로 사용할 때, 선언한다. 상수는 변수와 달리 다시 변할 수 없는 값이지만 변수명을 통해 정의 함으로써 의미를 내포 할 수 있다. 예를들어 원주율을 구하는 데 필요한 파이(PI)의 경우 3.14를 갖는 상수 값으로 선언하고 싶을 때, 이와 같이 표현할 수 있겠다. ex) final double PI = 3.14;
final 메소드
final 메소드로 선언된 경우 재정의가 불가능하다. 예를들어 자식 클래스가 부모 클래스의 특정 메소드를 재정의 하려고 하는데, final로 선언이 되어 있으면 에러가 발생하게 된다. 이를 사용하는 경우는 특정 메소드의 변경을 제한해야 하는 경우에 유용하게 사용될 수 있겠다.
접근자
대부분의 객체 지향언어의 특징인 캡슐화와 모듈성, 정보은닉 등을 위해 외부 클래스에서의 접근을 제한 한다든지 등의 접근 제한을 설정할 수가 있다. 자바에서도 4가지의 접근자를 제공해주는데, 이는 다음과 같다.
protected
클래스들의 모음인 패키지 내에서만 접근이 가능한 변수 혹은 메소드를 설정할 때, protected라는 접근자를 설정한다. 이를 사용하면 같은 클래스, 하위 클래스, 또는 같은 패키지 내의 모든 클래스에서 접근이 가능하다.
public
같은 클래스, 하위 클래스, 같은 패키지, world(다른패키지) 에 있는 모든 클래스에서 접근할 수 있다. 일반적으로 이는 외부 인터페이스를 제공할 때 주로 사용한다.
private
같은 클래스 내에서만 접근이 가능하다, 자바에서 제공하는 접근 영역중에 가장 폐쇄적인 접근자라고 할 수 있다. 예를들어 private로 선언된 변수에 대해서는 외부에서 변경이 불가능하고, setXXX()와 같은 내부 함수들을 이용해 변경하거나, getXXX()와 같은 내부 함수를 통해 참조할 수 있다.
default
위와 같이 특별한 접근자를 선언하지 않는 경우가 이에 해당하는데, protected와 동일하지만 다른 점은 하위 클래스에서는 접근이 불가능하다.
final은 클래스, 멤버변수, 메소드에 모두 사용할 수 있는 지정어 이다.
final class
클래스에 final이 사용될 경우, 해당 클래스를 다른 클래스가 상속 할 수 없다. 이를 사용하는 가장 큰 이유는 보안을 위해서 사용하고 API에 정의 되어 있는 대부분의 클래스들은 final로 선언이 되어 있다.
final 변수
변수에 final이 사용이 되면 C 언어에서의 상수(static)와 같은 목적으로 사용할 때, 선언한다. 상수는 변수와 달리 다시 변할 수 없는 값이지만 변수명을 통해 정의 함으로써 의미를 내포 할 수 있다. 예를들어 원주율을 구하는 데 필요한 파이(PI)의 경우 3.14를 갖는 상수 값으로 선언하고 싶을 때, 이와 같이 표현할 수 있겠다. ex) final double PI = 3.14;
final 메소드
final 메소드로 선언된 경우 재정의가 불가능하다. 예를들어 자식 클래스가 부모 클래스의 특정 메소드를 재정의 하려고 하는데, final로 선언이 되어 있으면 에러가 발생하게 된다. 이를 사용하는 경우는 특정 메소드의 변경을 제한해야 하는 경우에 유용하게 사용될 수 있겠다.
접근자
대부분의 객체 지향언어의 특징인 캡슐화와 모듈성, 정보은닉 등을 위해 외부 클래스에서의 접근을 제한 한다든지 등의 접근 제한을 설정할 수가 있다. 자바에서도 4가지의 접근자를 제공해주는데, 이는 다음과 같다.
protected
클래스들의 모음인 패키지 내에서만 접근이 가능한 변수 혹은 메소드를 설정할 때, protected라는 접근자를 설정한다. 이를 사용하면 같은 클래스, 하위 클래스, 또는 같은 패키지 내의 모든 클래스에서 접근이 가능하다.
public
같은 클래스, 하위 클래스, 같은 패키지, world(다른패키지) 에 있는 모든 클래스에서 접근할 수 있다. 일반적으로 이는 외부 인터페이스를 제공할 때 주로 사용한다.
private
같은 클래스 내에서만 접근이 가능하다, 자바에서 제공하는 접근 영역중에 가장 폐쇄적인 접근자라고 할 수 있다. 예를들어 private로 선언된 변수에 대해서는 외부에서 변경이 불가능하고, setXXX()와 같은 내부 함수들을 이용해 변경하거나, getXXX()와 같은 내부 함수를 통해 참조할 수 있다.
default
위와 같이 특별한 접근자를 선언하지 않는 경우가 이에 해당하는데, protected와 동일하지만 다른 점은 하위 클래스에서는 접근이 불가능하다.
. | class | Package | Subclass | World |
---|---|---|---|---|
public | O | O | O | O |
protected | O | O | O | X |
default | O | O | X | X |
private | O | X | X | X |
스태틱 메소드 안에서는 인스턴스 변수 접근이 불가능 하다. static 변수는 스태틱 메소드(static method)에서 접근이 가능하다. dijkstra method 가 static 변수 mid1, mid2를 매개변수를 사용하기 때문에
method 이름 앞에 static을 떼면 오류발생
보통 스태틱 메소드는 유틸리티 성 메소드를 작성할 때 많이 사용된다.
예를 들어 "오늘의 날짜 구하기", "숫자에 콤마 추가하기"등의 메소드를 작성할 때에는 클래스 메소드를 사용하는 것이 유리하다.
댓글
댓글 쓰기