공부/OOP

캡슐화(Encapsulation)란?

셩잇님 2023. 1. 13. 15:10
반응형

 

 

캡슐화는 객체의 내부 상태와 동작을 외부 세계로부터 숨기고 대신 객체와의 상호 작용을 위한 공용 인터페이스를 노출하는 방법을 나타내는 객체 지향 프로그래밍의 특징 중 하나입니다.  이렇게 하면 객체가 사용되는 방식을 더 잘 제어할 수 있으며 개체의 내부 상태에 대한 의도하지 않은 변경을 방지할 수 있습니다. 

 

캡슐화는 객체의 내부 상태 및 메서드에 대한 액세스를 제한하기 위해 액세스 한정자(예: "private" 또는 "protected")를 사용하여 달성되는 경우가 많습니다.  객체의 내부 상태 및 동작을 비공개로 만들고 개체와의 상호 작용을 위한 공용 인터페이스만 노출함으로써 개발자는 객체가 올바르게 사용되고 내부 상태가 일관되게 유지되도록 할 수 있습니다.

 

아래 예제는 C언어로 작성한 캡슐화의 예제입니다.

#include <stdio.h>

// define a struct for a bank account
typedef struct {
    int account_number;
    float balance;
} Account;

// function to create a new account
Account create_account(int account_number, float initial_balance) {
    Account new_account;
    new_account.account_number = account_number;
    new_account.balance = initial_balance;
    return new_account;
}

// function to deposit money into an account
void deposit(Account* account, float amount) {
    account->balance += amount;
}

// function to withdraw money from an account
void withdraw(Account* account, float amount) {
    account->balance -= amount;
}

// function to check the balance of an account
float check_balance(Account* account) {
    return account->balance;
}

int main() {
    Account my_account = create_account(123456, 0);
    deposit(&my_account, 100);
    printf("Account balance: $%.2f\n", check_balance(&my_account));
    withdraw(&my_account, 25);
    printf("Account balance: $%.2f\n", check_balance(&my_account));
    return 0;
}

 

이 예에서 Account 구조체는 은행 계좌를 나타내며 account_number 및 balance라는 두 개의 객체가 있습니다. 이 필드는 외부 세계에서 숨겨져 있으며 제공된 함수 create_account, deposit, withdraw 및 check_balance를 통해서만 액세스할 수 있습니다. 이렇게 하면 계정의 내부 상태가 보호되고 사용자는 제공된 기능을 통해서만 계정과 상호 작용할 수 있으므로 계정 내부 상태의 일관성이 보장됩니다.

 

 

 

반응형