제어자, 지정자
:클래스, 클래스멤버(변수,메서드선언부)에 사용되어 부가적 의미 부여함.
접근 지정자 : public, protected, (default), private //넷 중 하나만 선택가능
그외 지정자 : static, final, abstract, native, transient, synchronized, volatile, strictfp //복수선택 가능
접근지정자(Access Modifier)
:사용(접근) 권한 지정
- 기준 : 패키지, 클래스
- 선언 : 클래스, 멤버변수, 멤버메서드, 생성자
4가지 중에서 한개만 선언 가능(중복 선언 불가)
1. public
- 제한x, 어디에서든 사용 가능
2. protected
- 같은 패키지 내에서만 사용 가능
- 단, 상속 관계에서는 다른 패키지의 자손클래스 접근 가능
3. default
- 같은 패키지 내에서만 사용 가능
- Java 내에서는 생략
4. private
- 같은 클래스 내에서만 사용 가능
▸접근 지정자 사용 이유
1. 외부로부터 데이터 보호 -> 캡슐화
2. 내부에만 사용, 굳이 외출 노출 필요x (필요부분만 쓰니 범위 좁혀줄 수 있음)
캡슐화
: 외부로 부터 클래스 내부 선언된 데이터를 보호하기위함.
외부에서 접근하는데 정보를 은닉하고 내부 데이터를 보호 메서드를 통해서만 접근.
public class Test{
Public int score; //1~100점까지 여야함.
}
//but,
Test t = new Test();
t.score = 199; //이런식 직접 접근은 잘못된 값 막을 방법이 없음
public class Test{
private int score; //접근지정자 private로 외부 접근 막음.
//메서드 통해 간접접근 (Sourse- Generate getters and setters 쓰면 간단)
public int getScore() {
return score;
}
public void setScore(int score) {
if(score<0 || score>100) return;
this.score = score;
}
}
public class Main {
public static void main(String[] args) {
Test t = new Test();
t.score = 92; //에러. 접근지정자 private로 접근 불가.
t.setScore(92);
System.out.println(t.getScore()); //92
}
}
그외 지정자
- 부가적인 의미
1. static
: 공통의, 클래스의
- 객체를 생성하지 않고 사용 가능
- 하나의 프로그램내에서 공통으로 사용 할 때
- 선언위치
▸멤버변수 : 클래스변수,static 변수 (cv)
클래스명.클래스변수명
▸멤버메서드 : 클래스메서드 (cm)
클래스명.메서드명();
public class Test {
static int score; //클래스 변수 cv
static { //클래스 초기화 블럭
}
static int add(..) { //클래스 메서드, iv,im 사용불가
...
}
}
2. final
: 마지막의 , 변경할 수 없는
- 선언위치
▸ 클래스 : 상속(extends) 금지, 조상될 수 x
▸ 메서드 : 오버라이딩 금지
▸ 멤버변수 : 상수
▸ 지역변수 : 상수
final class Test {//상속x
final int SCORE = 1; //상수
final void add() { //오버라이딩x
final int X =10; //상수
...
}
}
3. abstract
: 추상적인, 미완성의 -> 객체생성 불가
- 선언위치
▸ 클래스 : 추상 클래스(추상메서드 포함한 클래스), 상속(extends) 해서 사용
-> 객체생성 불가
-> 데이터타입으로 선언은 가능
- 일반(구현) 클래스 처럼 멤버변수, 멤버메서드, 생성자, 추상메서드를 가질 수 있음
접근지정자 abstract 클래스명 {}
▸ 메서드 : 추상 메서드(구현부{} 없는 메서드), 오버라이딩 해서 사용
접근지정자 abstract 메서드명() ;
-그 외 지정자는 의미만 맞으면 두개 이상 가능
public static final int NUM=5; //Ok
public final abstract test(){} //Error
'Java' 카테고리의 다른 글
| [Java] 매개변수의 다형성 (0) | 2023.12.23 |
|---|---|
| [Java] 다형성(Polymophism), 참조변수 형변환, instanceof연산자 (0) | 2023.12.23 |
| [Java] Object 클래스, super, super() (0) | 2023.12.20 |
| [Java] 오버라이딩(OverRiding) (0) | 2023.12.20 |
| [Java] 상속(Inheritance), 포함(composite) (0) | 2023.12.20 |