//접근 지정자(제어자), Access Modifier
- 클래스 멤버 변수에 붙여서 사용한다.
- 클래스 멤버 메서드에 붙여서 사용한다.
- 클래스 자체에 붙여서 사용한다.
- 멤버를 외부에 공개할지 말지 결정하는 역할 > 클래스가 경계선 역할
> 멤버 노출 수위를 조절하는 역할
> 외부에 멤버 공개 유무 조절하는 역할
1. public: 어디서든 접근 가능
2. protected: 동일 패키지나 상속관계의 클래스에서만 접근 가능
3. 생략 가능 => default private(생략된 것: 패키지 접근은 가능하다.)
4. private: 같은 클래스 내부에서만 접근 가능(외부, 상속 관계 클래스에서도 접근 불가!)
- 은닉화(자바의 장점)
- Getter(get()) 및Setter(set())을 이용하여 멤버 변수의 값을 변경하거나 값을 가져옴.
// 클래스의 멤버 변수 접근 지정자
1. private으로 지정 > 유효하지 않은 값이 들어갈까봐...
2. public 메서드 선언 > private 변수 접근
- Setter : set변수명();
~ public void setModel(String model) {
this.model = model;
}
※ this : 객체 접근(지정) 연산자 > 객체 자신을 가리키는 표현
- Getter : 자료형 get변수명();
~ public String getModel(); {
return this.model;
}
※ 만약 영어로 입력 받고 한글로 값을 돌려줘야 한다면 Getter에서 작업(데이터 가공)
- 필드 vs 프로퍼티 (자바에서)
~ c1.type > public 변수 > field(필드)
~ c1.getType > private 변수 통제 > property(프로퍼티)
a. 읽기 쓰기 가능한 멤버(읽기 쓰기 가능한 프로퍼티)
~ c1.setColor("white");
~ System.out.println(c1.getColor());
b. 쓰기 전용 멤버(쓰기 전용 프로퍼티)
~ c1.setWeight(500);
c. 읽기 전용 멤버(읽기 전용 프로퍼티)
~ System.out.println(c1.getPrice());
d. 계산된 프로퍼티 (사용자 입장에서는 level이라는 변수가 있다고 생각하게끔..)
~ System.out.println(c1.getLevel());
//Setter
public void setFieldName(타입 fieldName) {
this.fieldName = fieldName;
}
public void setAge(int age) {
this.age = age;
}
// Getter
public 타입 getFieldName() {
return fieldName;
}
public int getAge() {
return age;
}
package exam01.sample01;
public class Car {
// 필드 선언
private int speed;
private boolean stop;
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
if(speed < 0) {
this.speed = speed;
return;
}
else {
this.speed = speed;
}
}
public boolean isStop() {
return stop;
}
public void setStop(boolean stop) {
this.stop = stop;
}
}
package exam01.sample01;
public class CarTest {
public static void main(String[] args) {
Car myCar = new Car();
myCar.setSpeed(-50);
System.out.println("현재 속도는 : " + myCar.getSpeed());
myCar.setSpeed(70);
System.out.println("현재 속도는 : " + myCar.getSpeed());
if(myCar.isStop()) {
myCar.setStop(true);
}
System.out.println("현재 속도는 : " + myCar.getSpeed());
}
}
** 타입이 boolean인 경우 Getter에서 getFieldName()이 아니라 isFieldName()으로 사용한다.
//접근제어지시자
public class C1 { //Package p1
public int x;
protected int y;
private int u;
int z; // private 생략(패키지 접근 가능)
protected void m() {}
}
public class C2 { //Package p1
C1 o = new C1();
can access o.x;
can access o.y;
cannot access o.u; //private
can access o.z;
can access o.m();
}
public class C3 extends C1 { //상속 관계 //Package p1
can access x;
can access y;
can access z;
cannot access u;
can invoke m();
}
public class C4 extends C1 { //Package p2
can access x;
can access y;
cannot access z;
cannot access u;
can invoke m();
}
public class C5 { //Package p2
C1 o = new C1();
can access o.x;
cannot access o.y;
cannot access o.z;
cannot access o.u;
cannot invoke o.m();
}
// class() 앞에 접근 제어 지시자 private 선언 ==> 싱글 패턴 ==> new 연산자로 생성자를 호출(X)
- private class() {} ==> 외부에서 마음대로 객체를 생성할 수 없다.
'자바(JAVA)' 카테고리의 다른 글
[자바(Java)] 임의의 정수 만들기(난수) (0) | 2022.10.25 |
---|---|
[자바(Java)] 중첩 클래스, 익명 클래스 (0) | 2022.10.20 |
[자바(Java)] GUI (0) | 2022.10.13 |
[자바(Java)] 추상 클래스, 인터페이스 (0) | 2022.10.13 |
이클립스 단축키 (0) | 2022.10.11 |