캡슐화(Encapsulation)는 데이터(멤버 필드)와 메서드를 하나의 단위(클래스)로 묶고, 외부에서의 직접 접근을 제한하는 객체 지향 프로그래밍(OOP)의 핵심 개념이다. 이를 통해 클래스의 내부 구현을 감추고, 외부에서는 제공된 메서드만으로 상호작용하게 하여 데이터 보호와 유효성 검증을 보장한다.
캡슐화는 주로 접근 제어자(private)와 Getter/Setter 메서드로 구현됩니다.
private
선언private
으로 선언하여, 외부에서 직접 접근을 차단한다. 이렇게 하면 외부 클래스가 객체의 상태를 직접 변경하지 못하게 할 수 있다.public
접근 제어자로 제공되는 Getter와 Setter 메서드를 통해 간접적으로 필드에 접근한다. 이렇게 함으로써 데이터의 안정성을 확보하고, 값의 유효성 검증을 할 수 있다.Getter 메서드는 private
필드에 저장된 값을 조회하는 역할을 한다. 데이터 타입과 동일한 반환값을 가지며, 메서드 이름은 get
+ 필드명 형식으로 작성한다.
예시코드:
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
Setter 메서드는 private
필드의 값을 변경할 때 사용된다. 매개변수로 새로운 값을 전달받아 필드에 할당하며, 유효성 검증을 통해 잘못된 값이 입력되지 않도록 할 수 있다. 메서드 이름은 set
+ 필드명 형식으로 작성한다.
예시코드:
public class Person {
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
if (age > 0) { // 유효성 검사
this.age = age;
}
}
}
class Modifier {
private String data;
// 데이터 입력용 Setter 메서드
public void setData(String data) {
this.data = data;
}
// 데이터 출력용 Getter 메서드
public String getData() {
return data;
}
}
public class Main {
public static void main(String[] args) {
Modifier m = new Modifier();
m.setData("테스트 데이터"); // Setter를 통해 데이터 설정
System.out.println(m.getData()); // Getter를 통해 데이터 조회
}
}
Getter/Setter는 단순히 데이터의 조회와 설정만 가능하게 할 뿐만 아니라, 생성자와 결합하여 객체가 생성될 때 필드를 초기화하고 유효성 검사를 할 수 있다. 특히 생성자 내부에서 Setter 메서드를 사용하면, 객체 생성 시에도 유효성 검증을 적용할 수 있다.
class Time {
private int hour;
private int minute;
private int second;
// 생성자: 유효성 검증을 포함한 필드 초기화
public Time(int hour, int minute, int second) {
this.setHour(hour); // Setter를 통해 유효성 검증 후 초기화
this.setMinute(minute);
this.setSecond(second);
}
// Getter / Setter 메서드
public int getHour() {
return hour;
}
public void setHour(int hour) {
if (hour < 0 || hour >= 24) {
hour = 0; // 유효성 검사
}
this.hour = hour;
}
public int getMinute() {
return minute;
}
public void setMinute(int minute) {
if (minute < 0 || minute >= 60) {
minute = 0;
}
this.minute = minute;
}
public int getSecond() {
return second;
}
public void setSecond(int second) {
if (second < 0 || second >= 60) {
second = 0;
}
this.second = second;
}
}
public class Main {
public static void main(String[] args) {
Time t = new Time(25, 61, 30); // 유효하지 않은 값 입력
System.out.println(t.getHour() + "시 " + t.getMinute() + "분 " + t.getSecond() + "초");
}
}
0시 0분 30초
캡슐화는 객체 지향 프로그래밍에서 데이터 보호와 유효성 검증을 구현하는 중요한 기법으로, 자바에서는 private
필드와 public
Getter/Setter 메서드를 통해 이를 구현한다. Getter/Setter를 사용하면 외부에서 객체의 내부 데이터를 안전하게 관리하고, 데이터 무결성을 유지할 수 있다.