헬린코린이
[JAVA] 접근 제어자, getter setter 본문
접근 제어자에 알아보겠다.
제어자란 클래스와 클래스 멤버의 선언 시 사용하여 부가적인 의미를 부여하는 키워드를 의미합니다.
자바에서 제어자는 접근 제어자와 기타 제어자로 구분할 수 있습니다.
기타 제어자는 여러 개를 함께 사용할 수 있지만 접근 제어자는 두 개 이상 사용할 수 없습니다.
자바에서는 4가지의 접근 제어자를 제공합니다.
1. public
2. protected
3. default
4. private
간단하게 설명하겠습니다.
public은 어디에서도 접근이 가능한 제어자이다.
protected는 패키지간의 접근이 불가능하지만 자식 클래스는 접근이 가능하다.
default의 접근 제어를 가지는 멤버는 같은 클래스의 멤버와 같은 패키지에 속하는 멤버에서만 접근할 수 있습니다.
default는 작성하지 않는 것이 작성한 것이다.
private은 자기 클래스말고는 다른 그 어떤 곳에서도 접근이 불가능하다.
접근하려면 getter setter로 접근이 가능하다.
예제를 보겠다
public class Test01 {
public static void main(String[] args) {
A a = new A();
}
}
class A{
private int a;
protected int b;
public int c;
void func() {
System.out.println(this.a);
System.out.println(this.b);
System.out.println(this.c);
}
}
class B extends A{
void func() {
//System.out.println(this.a);
System.out.println(this.b);
System.out.println(this.c);
}
}
우선 private의 접근 제어를 가진 a는 B클래스에서 출력하려고 하면 에러가 날것이다 private는 A클래스에서만 접근이 가능하기 때문이다.
protected의 접근 제어를 가진 b는 같은 패키지의 자식 클래스이기에 접근이 가능할 거고
public의 접근 제어를 가진 c는 어디서든 접근이 가능하다.
getter setter는 private의 접근 제어를 가진 변수의 접근하기 위해 작성하는 것이다.
main메서드에서 저 변수를 호출하면 에러가 날 것이다.
그래서 바로 호출하는 것이 아닌 우회해서 호출하는 것이다.
왜 이렇게 굳이 우회해서 하는 것인가 그냥 public이나 default로 쓰면 간단할 것을
예를 들어 은행 계좌의 돈을 가지고 있는 변수를 선언했다고 하자
그 변수의 제어자를 어디서든 접근 가능하게 만들어버리면 그 돈을 한순간에 사라질 것이다.
그래서 계좌의 돈을 private로 접근하게 만들고 그 계좌를 우회해서 이용하게 되면 계좌에 돈은 안전할 것이다.
그렇기에 private접근 제어자를 사용하는 것이다. 예제를 넣어 놓겠다.
class Student{
private String name;
private int score;
private char grade;
//getter : 데이터를 받아오고 싶어~~~
//정보를 받아오는 것에만 집중하는 친구
public String getName() {
return this.name;
}
//setter : 데이터를 설정해주고 싶어~~~
//받아노는 거에 관심
void setName(String name) {
this.name=name;
}
}