[ 목차 ]
- 얻을 수 있는 지식
- 접근제어자의 종류 및 제한 범위
- 잘못된 코드 예시
- 개선된 코드 예시(안정성, 보안성, 가독성 강화)
얻을 수 있는 지식
접근 제어자를 활용하면 코드의 안정성, 보안성, 가독성을 높일 수 있음
접근제어자의 정의, 종류 및 제한 범위
중앙으로 갈수록 접근 제한 범위가 강화됨
접근 제어자
클래스에서 맴버들이 노출되는 것을 막기 위해 접근을 제어하는 제어자
접근 제어자 종류
- public : 해당 클래스를 사용하는 곳이면 어디든 접근 허용
- protected : 해당 클래스와 해당 클래스를 상속받는 자식 클래스 에서만 접근 허용
- private : 해당 클래스 내부에서만 접근 허용
잘못된 코드 예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#include <iostream>
using namespace std;
class BankAccount
{
public :
double balance; //외부에서 직접 접근가능
void Withdraw(double amount)//출금
{
balance -= amount;//음수 잔액이 될 수 있음
}
int main()
{
BankAccount account;
account.balance = 1000;//외부에서 집적 값 설정
account.Withdraw(2000);//잘못된 출금
cout << "잔액 : " << account.GetBalance() <<endl;//잘못된 결과
}
|
cs |
안정성 문제
외부에서 직접 값 설정
public double balance; //외부에서 직접 접근가능
account.balance = 1000;//불안전한 입금
보안성 문제
잘못된 값을 처리함
void Withdraw(double amount)//출금
{
balance -= amount;//음수 잔액이 될 수 있음
}
account.Withdraw(2000);//잘못된 출금
개선된 코드 예시
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
43
44
45
|
#include <iostream>
using namespace std;
class BankAccount
{
private :
double balance; //잔액 외부에서 접근 불가
public :
BankAccount(double initialBalance)//초기 잔액
{
if(initialBalance >= 0)
balance = initialBalance;
else
balance = 0;
}
double GetBalance() const
{
return balance;
}
void Deposit(double amount)//예금
{
if(amount >0)
balance += amount;
}
void Withdraw(double amount)//출금
{
if(amount > 0 && amount <= balance)
balance -= amount;
}
else
cout << "출금 금액이 잘못되었습니다!"<< endl;
}
int main()
{
BankAccount account(1000);
account.Deposit(500);//안전한 입금
account.Withdraw(2000);//잘못된 출금 방지
cout << "잔액 : " << account.GetBalance() <<endl;
}
|
cs |
안정성
외부에서의 직접 접근을 방지
private :
double balance; //잔액 외부에서 접근 불가
보안성
Withdraw , Deposit 에서 조건을 추가해 잘못된 값을 처리하지 않음
void Withdraw(double amount)//출금
{
if(amount > 0 && amount <= balance)
balance -= amount;
}
else
cout << "출금 금액이 잘못되었습니다!"<< endl;
}
void Deposit(double amount)//예금
{
if(amount >0)
balance += amount;
}
account.Deposit(500);//안전한 입금
account.Withdraw(2000);//잘못된 출금 방지
가독성
함수를 통해 명확하게 입금( Deposit )과 출금( Withdraw )을 처리하여 클래스의 역할을 이해하기 쉬움
'c++정리하기' 카테고리의 다른 글
enum, enum class (0) | 2024.12.10 |
---|