안녕하세요! 오늘은 자바 프로그래밍에서 중요한 개념인 '캡슐화'에 대해 알아보겠습니다.
캡슐화는 객체 지향 프로그래밍의 핵심 원칙 중 하나로, 데이터와 데이터를 다루는 메소드를 하나의 '캡슐'로 묶는 것을 말합니다. 이를 통해 코드의 재사용성, 유지 보수성 등을 높일 수 있습니다.
실생활 예시를 통해 캡슐화를 자세하고 쉽게 이해해봅시다.
1. 캡슐화란 무엇인가?
캡슐화는 클래스의 속성(멤버 변수)과 행동(메소드)을 하나의 단위로 묶어 외부에서의 접근을 제한하는 것을 말합니다.
캡슐화를 통해 클래스를 사용하는 사용자가 클래스 내부의 구현을 알 필요 없이 인터페이스만으로 클래스를 사용할 수 있게 되며, 이를 통해 코드의 재사용성과 유지 보수성을 높일 수 있습니다.
캡슐화를 구현하기 위해서는 주로 다음과 같은 방법을 사용합니다.
- 접근 제어자(access modifier): 클래스의 속성과 메소드에 접근 제한을 설정하는 키워드
- 게터(getter)와 세터(setter): 속성에 대한 외부 접근을 제어하는 메소드
예시: 은행 계좌 클래스와 캡슐화 사용하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
public class BankAccount {
// 속성 (멤버 변수)
private String accountNumber;
private double balance;
// 생성자
public BankAccount(String accountNumber, double balance) {
this.accountNumber = accountNumber;
this.balance = balance;
}
// 게터 (getter)
public String getAccountNumber() {
return accountNumber;
}
public double getBalance() {
return balance;
}
// 세터 (setter)
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}
public void setBalance(double balance) {
this.balance = balance;
}
// 행동 (메소드)
public void deposit(double amount) {
balance += amount;
}
public void withdraw(double amount) {
if (balance >= amount) {
balance -= amount;
} else {
System.out.println("Insufficient balance");
}
}
}
|
cs |
위의 예시에서는 은행 계좌를 나타내는 BankAccount 클래스를 생성했습니다. 이 클래스는 계좌 번호(accountNumber)와 잔액(balance) 등의 속성을 갖고 있으며, 입금(deposit)과 출금(withdraw) 등의 행동을 정의하고 있습니다. 이 때 캡슐화를 구현하기 위해 다음과 같은 방법을 사용했습니다.
접근 제어자를 사용해 속성에 대한 접근 제한: 속성 accountNumber와 balance에 private 접근 제어자를 사용하여 외부에서 직접 접근하는 것을 막았습니다. 이를 통해 BankAccount 클래스의 내부 데이터를 보호할 수 있습니다.
게터(getter)와 세터(setter)를 사용해 속성에 대한 외부 접근 제어: 외부에서 accountNumber와 balance에 접근하거나 수정할 수 있도록 게터와 세터 메소드를 사용했습니다. 이를 통해 클래스 사용자가 속성에 안전하게 접근할 수 있으며, 필요한 경우 로직을 변경하거나 유효성 검사를 추가할 수 있습니다.
이렇게 캡슐화를 적용한 BankAccount 클래스를 사용하면,
클래스 사용자는 내부 구현에 대해 알 필요 없이 인터페이스만으로 클래스를 사용할 수 있습니다.
예를 들어, 다음과 같이 BankAccount 인스턴스를 생성하고 입금, 출금 등의 작업을 수행할 수 있습니다.
1
2
3
4
5
6
7
8
|
public class Main {
public static void main(String[] args) {
BankAccount account = new BankAccount("123456", 1000);
account.deposit(500);
account.withdraw(300);
System.out.println("Account number: " + account.getAccountNumber() + ", Balance: " + account.getBalance());
}
}
|
cs |
이상으로 자바의 캡슐화에 대한 설명을 마칩니다.
캡슐화는 객체 지향 프로그래밍의 핵심 원칙 중 하나이므로 이를 이해하고 활용하면 코드의 재사용성과 유지 보수성을 높일 수 있습니다.
감사합니다!
'[JAVA] > ┃ⓑ KEYWORDS' 카테고리의 다른 글
[JAVA] 오버로딩(Overloading) vs 오버라이딩(Overriding) (0) | 2023.03.19 |
---|---|
[JAVA] 상속 (Inheritance) (0) | 2023.03.19 |
[JAVA] this (0) | 2023.03.18 |
[JAVA] 생성자(Constructor) (0) | 2023.03.18 |
[JAVA] 인스턴스 (Instance) (0) | 2023.03.18 |