πŸ‘©‍πŸ’» ν”„λ‘œκ·Έλž˜λ°/🎠 C++

[C++] 정보 은닉 | μΊ‘μŠν™”

peewoong 2024. 4. 17. 23:06

λ©€λ²„λ³€μˆ˜μ˜ 외뢀접근을 ν—ˆμš©ν•˜λ©΄(public μ‚¬μš©), 잘λͺ»λœ 값이 μ €μž₯λ˜λŠ” λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€.

λ”°λΌμ„œ, λ©€λ²„λ³€μˆ˜μ˜ 외뢀접근을 λ§‰κ²Œ λ˜λŠ”λ°, 이λ₯Ό κ°€λ¦¬μΌœ 정보 은닉이라 ν•œλ‹€.

 

EX) public int x; // 0이상 100μ΄ν•˜

쑰건에 λ§žλŠ” 값이 λ“€μ–΄μ˜¨λ‹€λŠ” 법이 μ—†λ‹€.

 

πŸ‘‰ 클래슀의 λ©€λ²„λ³€μˆ˜λ₯Ό private으둜 μ„ μ–Έν•˜κ³ , ν•΄λ‹Ή λ³€μˆ˜μ— μ ‘κ·Όν•˜λŠ” ν•¨μˆ˜λ₯Ό λ³„λ„λ‘œ μ •μ˜ν•΄μ„œ, μ•ˆμ „ν•œ ν˜•νƒœλ‘œ λ©€λ²„λ³€μˆ˜μ˜ 접근을 μœ λ„ν•˜λŠ” 것이 λ°”λ‘œ '정보 은닉'이며, μ΄λŠ” 쒋은 ν΄λž˜μŠ€κ°€ 되기 μœ„ν•œ κΈ°λ³Έ 쑰건이닀.

πŸ‘‰ λ³„λ„λ‘œ μ •μ˜λœ ν•¨μˆ˜μ—μ„œ 쑰건에 λ§žλŠ” 값을 λΆˆλŸ¬μ˜€λ„λ‘ 쑰건을 μ„€μ •ν•  수 μžˆλ‹€.

πŸ‘‰ ν•¨μˆ˜λ§Œ ν•œ 번 잘 μ •μ˜λ˜λ©΄ 잘λͺ»λœ 접근은 μ›μ²œμ μœΌλ‘œ μ°¨λ‹¨λœλ‹€.

 

🟩 const ν•¨μˆ˜

const ν•¨μˆ˜ λ‚΄μ—μ„œλŠ” 동일 ν΄λž˜μŠ€μ— μ„ μ–Έλœ λ©€λ²„λ³€μˆ˜μ˜ 값을 λ³€κ²½ν•˜μ§€ λͺ»ν•œλ‹€.

int GetX() const;
int GetY() const;
void ShowRecInfo() const;

멀버 ν•¨μˆ˜

const ν•¨μˆ˜λŠ” constκ°€ μ•„λ‹Œ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ§€ λͺ»ν•œλ‹€. 간접적인 λ©€λ²„μ˜ λ³€κ²½ κ°€λŠ₯μ„±κΉŒμ§€ μ™„μ „νžˆ 차단

int GetNum() {
	return num;
}

void ShowNum() const {
	cout << GetNum() << endl; // 컴파일 μ—λŸ¬ λ°œμƒ
}

const둜 μƒμˆ˜ν™”λœ 객체λ₯Ό λŒ€μƒμœΌλ‘œλŠ” const λ©€λ²„ν•¨μˆ˜λ§Œ 호좜이 κ°€λŠ₯ν•˜λ‹€.

// GetNum이 const μ„ μ–Έλ˜μ§€ μ•Šμ•˜λ‹€κ³  κ°€μ •
void InitNum(const EasyClass &easy) {
	num = easy.GetNum(); // 컴파일 μ—λŸ¬ λ°œμƒ
}

🟩 μΊ‘μŠν™”

κ΄€λ ¨ μžˆλŠ” λͺ¨λ“  것을 ν•˜λ‚˜μ˜ 클래슀 μ•ˆμ— λ¬ΆλŠ” 것

A ν΄λž˜μŠ€κ°€ μΊ‘μŠν™”κ°€ 잘 λ˜μ–΄μžˆλ‹€λ©΄, A ν΄λž˜μŠ€κ°€ λ³€κ²½λ˜λ”λΌλ„, A와 μ—°κ΄€λœ B, C, D ν΄λž˜μŠ€λŠ” λ³€κ²½λ˜μ§€ μ•Šκ±°λ‚˜ λ³€κ²½λ˜λ”λΌλ„ κ·Έ λ²ˆμœ„κ°€ 맀우 μ΅œμ†Œν™”λœλ‹€.