본문 바로가기
c++정리하기

접근 제어자

by seizetheda 2024. 12. 22.

[ 목차 ]

  • 얻을 수 있는 지식
  • 접근제어자의 종류 및 제한 범위
  • 잘못된 코드 예시
  • 개선된 코드 예시(안정성, 보안성, 가독성 강화)

 

얻을 수 있는 지식

 

접근 제어자를 활용하면 코드의 안정성, 보안성, 가독성을 높일 수 있음

 

접근제어자의 정의, 종류 및 제한 범위

중앙으로 갈수록 접근 제한 범위가 강화됨

접근 제어자

클래스에서 맴버들이 노출되는 것을 막기 위해 접근을 제어하는 제어자

 

접근 제어자 종류

  • 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