수식자
'public', 'static'같이 클래스나 메서드, 필드 등에 대해 효과나 제약을 부여하는 수단
수식자의 종류 중
접근제어자
클래스나 메서드, 필드 등에 대해 어떤 범위에서 접근을 허가할지를 지정
왜해?
객체가 가진 고유의 멤버 변수값들이 외부에서 잘못 변경되는 것을 막기 위해서
public class Date {
public static void main(String[] args) {
//ClassNew 클래스에 대한 객체 object를 생성
ClassNew object = new ClassNew();
// ClassNew 클래스를 가진 객체의 멤버변수에 접근 , private 접근 제한자 때문에 접근 불가
System.out.println(object.one);
// ClassNew 클래스를 가진 객체의 멤버함수에 접근, public 접근 제한자니 접근 가능
System.out.println(object.getone());
}
}
class ClassNew{
private String one;
public String getone(){
one = "one";
return one;
}
}
접근 허용하는 정도
public > protected > default > private
l public : 접근 제한이 없음
l protected : 동일한 패키지 내에 존재하거나 상속받은 하위 클래스에서 사용할 수 있도록 지정하는 것, 상위 클래스에서 작성한 변수나 메서드 중 외부 클래스에서 사용할 수 없음
HousePark.java
package jump2java.house;
public class HousePark {
protected String lastname = "park";
}
EungYongPark.java
package jump2java.house.person;
import house.HousePark;
public class EungYongPark extends HousePark {
public static void main(String[] args) {
EungYongPark eyp = new EungYongPark();
System.out.println(eyp.lastname);
}
}
HousePark클래스를 상속받은(import) EungYongPark이라는 클래스의 패키지는 jump2java.house.person으로 HousePark의 패키지인 jump2java.house와 다르지만 HousePark의 lastname 변수가 protected로 설정되었기 때문에 eyp.lastname과 같은 접근이 가능하다.
→ 변수가 protected로 설정된 클래스를 import 받았다면 패키지가 달라도 사용 가능하다
만약 lastname의 접근제어자가 protected 가 아닌 default 접근제어자였다면 eyp.lastname 문장은 컴파일 에러를 유발 할 것이다.
l default : 아무런 접근 제한자를 명시하지 않으면 default 값이 되며, 동일한 패키지 내에서만 접근이 가능
l private : 자기 자신의 클래스 (private 변수가 선언된 클래스) 내에서만 접근이 가능
static 수식자
개념
"공유"의 의미를 담는 키워드
클래스가 인스턴스화되어 있지 않더라도(객체가 없더라도?...) 접근 가능하다는 표시
사용
static 필드 - 클래스 변수
메서드 또는 필드(클래스내부의 변수)에 지정할 수 있다.
클래스 변수 : 여러 객체들이 객체 밖에서도 공유하는 변수 ex) static int count = 0;
인스턴스 변수 : 객체 각각에서만 쓸 수 있는 객체 내부의 변수
유틸리티 메소드 = Static 메소드
객체의 생성 없이 사용가능한 메소드 ex) static void m1(){ }
ex) Math.random(); 이미 생성되있는 객체의 메소드
final 수식자
멤버의 변경을 금지한다. 상수화.
오버라이드 금지 : 지정한 클래스를 계승하여 서브클래스를 만드는 것을 금지한다.
필드에 지정 → 필드의 값이 변경되는 것을 금지
메서드에 지정 → 서브 클래스에서 메서드 변경을 금지
클래스에 지정 → 클래스의 서브 클래스화를 금지
'자바 Java' 카테고리의 다른 글
클래스와 객체 ( 배열 변수 / 객체 배열 / 접근 제어자 ) (0) | 2019.09.29 |
---|---|
예외처리 try, catch (0) | 2019.09.26 |
Static 키워드 (0) | 2019.09.25 |
출력 (0) | 2019.09.23 |
배열 (0) | 2019.09.23 |
댓글