관련된 데이터와 기능을 하나의 단위로 묶어서 외부로부터의 접근을 제한하는 것
내부 - 객체의 필드와 메서드
외부 - 캡슐의 인터페이스(메서드)를 통해 객체와 상호작용
- 객체의 내부 구현이 외부에 노출되지 않는다
- 객체 간의 결합도를 낮추고 유연성과 확장성을 높일 수 있다
객체의 내부 데이터와 구현 세부 사항을 외부에 노출하지 않고, 객체의 인터페이스(메서드)를 통해만 접근 가능하도록 제한하는 것
정보 은닉을 통해 객체 간의 결합도를 낮출 수 있다.
객체의 내부 데이터와 구현 세부 사항을 숨기고, 외부에서는 객체의 인터페이스를 통해서만 접근할 수 있으므로 코드 재사용성을 높일 수 있음
캡슐화를 구현하기 위해 Java에서는 네 가지 접근 제어자를 제공한다
접근 제어자 | 접근 제한 범위 |
---|---|
private | 동일 클래스 |
default | 동일 패키지 |
protected | 동일 패키지 + 상속받은 하위 클래스 |
public | 접근 제한 없음 |
접근 제어자를 이용하여 적절히 캡슐화를 구현하면 객체의 내부 데이터와 기능을 외부에 노출하지 않아도 되므로, 객체 간의 결합도를 낮출 수 있다.
Getter과 Setter 메서드를 통해서 객체의 인스턴스 변수에 직접 접근하는 것을 막고, 캡슐화를 구현할 수 있다.
객체의 인스턴스 변수를 반환하는 메서드로, 메서드의 이름은 get으로 시작한다
인스턴스 변수로 name이 있다면, name 변수의 Getter 메서드는 getName()
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
객체의 인스턴스 변수에 값을 할당하는 메서드로, 메서드의 이름은 set으로 시작한다
public class Person {
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
}