클래스 Point의 인스턴스 p1을 예시로 보면 아래와 같다.
p1.x=100;
p1.y=200;
// 위에서 쓰인 . 을 멤버 접근 연산자라고 한다.
public, private, protected, default.
클래스를 경계로 내부의 멤버(변수, 메서드)를 외부에 공개할지를 결정하는 보안 단계
클래스(객체)의 울타리를 경계로 외부에 멤버를 100% 공개
클래스(객체)의 울타리를 경계로 외부에 멤버를 100% 비공개. 외부에서 접근 불가능. 접근하면 위험한 중요정보를 보호하기 위해.
class Item{
public int a;
private int b; // 캡슐화되어 외부에 비공개된 상태
}
class Dog{
public String name;
public int age;
public String color;
}
이렇게 멤버변수를 전부 public으로 선언하면 잘못된 상황을 발생시킬 수 있기 때문에 주의를 요한다. 그렇기 때문에 변수는 private로 설정하고, public메서드를 통해 변수에 값을 넣는다. 감춰진 내부와 공개된 외부를 연결해주는 것이 인터페이스. 이 public메서드가 인터페이스역할을 하는 메서드이다. 변수를 설정하는 인터페이스 메서드를 setter라고도 한다. 이 메서드를 통해서 아래와 같이 유효하지 않은 값으로 변수를 설정하려고 할 때, 제어를 해줄 수 있다.
public void setAge(int age) {
if (age>=0 && age<=25) {
this.age=age;
}else {
System.out.println("강아지 나이로 올바르지 않습니다.");
}
}
변수를 설정할 때와 마찬가지로 getter를 통해 변수의 값을 가져올 수 있다.
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
public String getColor(){
return this.color;
멤버변수와 매개변수를 구분하기 위해(지역변수와 멤버변수의 충돌을 막기 위해) 사용. 객체 자신을 가리키는 연산자.
(같은 식별자가 충돌하면 항상 지역이 좁은 식별자가 우선한다.)
두 개 모두 구현되어있으면 읽기/쓰기 필드이고, setter만 있으면 쓰기 전용 필드, getter만 있으면 읽기 전용 필드.(getter는 설정은 못하기 때문에 기본값을 가지고 있는 경우 사용)
객체의 멤버 변수(데이터)와 setter, getter를 아울러 Property 혹은 Attribute이라고 한다.