[Java] 자바 - 캡슐화의 이해 및 예제
자바 - 캡슐화의 이해 및 예제
자바의 캡술화(Encapsulation)는 객체지향언어의 특징중 하나입니다. 자바는 클래스(class)안에 멤버변수와 멤버함수를 담아 캡슐처럼 보호하고 원하는 만큼만 외부에 오픈하여 사용할 수 있도록 합니다. 여기서는 캡슐화에 대한 개념과 예제를 간략히 살펴보도록 하겠습니다.
목차
- 캡슐화란?
- 사용예제
1. 캡슐화란? (Encapsulation)
캡슐화란 객체의 내부 구조 및 데이터를 캡슐처럼 감싸 외부에서 직접 볼 수 없게 은닉하여 보호하는 것을 말합니다.
하지만 객체들끼리의 상호작용을 위해서는 일정부분이 외부에 공개되어야 데이터를 주고 받을 수 있습니다.
이를 위해서 클래스와 멤버변수(필드), 멤버함수(메소드)는 외부에서 접근가능한 범위를 지정할 수 있는 접근제어자와 함께 사용됩니다.
2022.06.29 - [IT 개발/Java] - [Java] 자바 - 접근제어자 public, private, protected 및 default
멤버변수의 경우 보통 private키워드를 사용하여 외부로부터의 직접적인 접근을 막고, 흔히 getter/setter라 부르는 멤버함수(메소드)를 만들어 사용함으로써 내부 데이터에 제한적 접근을 할 수 있게 합니다.
- getter : 외부에서 변수의 데이터를 읽어올때 사용되는 메소드. ex) public int getAge( ) { ... }
- setter : 외부에서 변수에 데이터를 쓰고자 할 때 사용되는 메소드. ex) public void setAge(int age) { ... }
cf) 이클립스 getter/setter 자동생성 단축키 : Alt+Shift+S → Generate Getters and Setters... 선택
2. 사용예제
1) Person 클래스 정의
- 멤버변수 age에 private을 사용하여 외부에서의 직접 접근을 제한합니다.
- 대신 age에 데이터를 쓰고 읽기위해서, getter와 setter 메소드를 생성해줍니다.
- setter에서는 age에 데이터를 쓰기전, 데이터 유효성 검사 로직을 넣어줄수 있습니다.
public class Person {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
if (age >= 0) {
this.age = age;
}
}
}
2) 객체생성 및 실행
외부에서 Person의 인스턴스 p1의 age변수에 접근하기 위해서는 setter와 getter를 이용해서 접근할 수 있습니다.
private키워드와 함께 사용되었기 때문에 p1 변수를 외부에서 직접 접근하는 것은 불가능 합니다.
- setter사용 : p1.setAge(20);
- getter사용 : p1.getAge( );
public class HelloWorld {
public static void main(String[] args) {
Person p1 = new Person();
p1.setAge(20);
System.out.println(p1.getAge() + "살 입니다.");
}
}
3) 실행결과
20살 입니다.