
Java는 객체 지향 프로그래밍(OOP) 언어로, OOP의 4가지 주요 요소인 추상화, 캡슐화, 다형성, 상속성을 중심으로 설계되었다. 이 글에서는 그 중 캡슐화(Encapsulation)**에 대해 자세히 알아보자.
캡슐화(Encapsulation)란?
객체의 상태(데이터)를 보호하고 외부에서 직접 접근하지 못하도록 제어하는 방법이다. 이를 통해 데이터의 무결성을 유지하고, 객체의 내부 구현을 숨겨 외부와의 인터페이스를 명확히 한다. 캡슐화는 주로 접근 제어자를 사용하여 구현된다.
접근 제어자
접근 제어자는 클래스, 메소드, 변수 등의 접근 범위를 제한하는 키워드다. 자세한 내용을 아래 글에 정리되어있다.
https://for-habit.tistory.com/18
Java의 접근 제어자
Java에서 접근 제어자는 클래스, 메소드, 변수 등의 접근 범위를 제한하는 키워드로, 객체 지향 프로그래밍의 캡슐화 원칙을 구현하는 데 중요한 역할을 한다. 접근 제어자의 종류Java에서는 네
for-habit.tistory.com
캡슐화의 장점
- 데이터 보호: 외부에서 객체의 내부 데이터를 직접 접근하지 못하도록 함으로써 데이터의 무결성을 유지할 수 있다.
- 유지보수성 향상: 내부 구현을 숨김으로써 변경이 필요할 때 외부 코드에 영향을 주지 않고 수정할 수 있다.
- 인터페이스 단순화: 객체의 사용 방법을 명확하게 정의하고, 불필요한 세부 사항을 숨김으로써 코드의 가독성을 높일 수 있다.
캡슐화 직접적 예시
public class Account {
private String accountNumber;
private double balance;
public Account(String accountNumber, double balance) {
this.accountNumber = accountNumber;
this.balance = balance;
}
public String getAccountNumber() {
return accountNumber;
}
public double getBalance() {
return balance;
}
public void deposit(double amount) {
if (amount > 0) {
balance += amount;
}
}
public void withdraw(double amount) {
if (amount > 0 && amount <= balance) {
balance -= amount;
}
}
}
위의 예시에서 Account 클래스는 accountNumber와 balance 변수를 private으로 선언하여 외부에서 직접 접근할 수 없게 했다. deposit과 withdraw 메소드를 통해서만 balance를 수정할 수 있으며, 이를 통해 잘못된 값이 설정되지 않도록 보호할 수 있다.
getter와 setter 메소드
캡슐화를 구현하는 주요 방법 중 하나는 getter와 setter 메소드를 사용하는 것이다. getter 메소드는 변수를 반환하고, setter 메소드는 변수의 값을 설정한다. 이를 통해 변수에 대한 간접 접근을 제공하고, 데이터의 무결성을 유지할 수 있다.
public class Student {
private String studentId;
private String name;
public String getStudentId() {
return studentId;
}
public void setStudentId(String studentId) {
this.studentId = studentId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
위의 예시에서 Student 클래스는 studentId와 name 변수를 private으로 선언하였으며, getter와 setter 메소드를 통해 변수에 접근할 수 있게 하였다. 이를 통해 외부에서는 Student 객체의 내부 데이터에 직접 접근하지 않고, 안전하게 값을 읽고 쓸 수 있다.
'java' 카테고리의 다른 글
| Java의 익명 클래스 (0) | 2024.07.12 |
|---|---|
| 객체지향 프로그래밍의 4가지 요소(3) 다형성 (0) | 2024.07.12 |
| Java의 주요 키워드: this, static, super, final (0) | 2024.07.11 |
| Localtime 클래스 Java 공식 문서를 통한 클래스에 대한 이해 (0) | 2024.07.10 |
| Java의 객체 참조 개념 (0) | 2024.07.02 |
