1. 정보 은닉 (Information Hiding)
1) 개념 정리
· 정보 은닉은 클래스 내부의 불필요하거나 민감한 데이터 또는 구현 세부사항을 외부에서 숨기는 것을 의미한다.
· 외부에서 직접 멤버 변수나 멤버 함수에 접근하지 못하도록 접근 제한자 private을 사용한다.
· 외부에서 멤버 변수의 값을 가져오거나 수정하려면 공개된 함수(public)를 통해 접근한다.
⭕ 일반적으로 다음과 같이 사용한다:
1️⃣ 값을 읽는 함수는 Get변수명() 형태로 작성한다.
2️⃣ 값을 수정하는 함수는 Set변수명() 형태로 작성한다.
3️⃣ 이런 함수를 액세스 함수(Access Function) 또는 Getter/Setter라고 부른다.
✅ 이렇게 하면 데이터 보호와 무결성 유지에 유리하다.
2. const 함수
1) 개념 정리
· const 함수는 객체 상태를 변경하지 않는 멤버 함수이다.
· 함수 정의에서 함수명 뒤에 const 키워드를 붙여 사용한다.
void showName() const; // const 멤버 함수 선언
⭕ const 함수의 특징:
1️⃣ 멤버 변수를 변경할 수 없다.
2️⃣ 다른 const 함수만 호출 가능하다.
3️⃣ 함수 호출 시, 객체가 const로 선언되었을 경우에도 호출할 수 있다.
⚠️ const 객체에서는 const 함수만 호출 가능하다.
⚠️ const 함수에서 비-const 함수를 호출하면 컴파일 오류가 발생한다.
3. 캡슐화 (Encapsulation)
1) 개념 정리
· 캡슐화는 서로 관련된 속성과 기능을 하나의 단위(클래스)로 묶는 것이다.
· 캡슐화는 정보 은닉을 포함하는 상위 개념이다.
· 캡슐화된 클래스는 내부 데이터가 외부로부터 보호되고, 인터페이스만 공개된다.
⭕ 캡슐화의 장점:
1️⃣ 보안성 향상 – 외부에서 직접 접근이 불가능해 의도치 않은 변경 방지
2️⃣ 유지보수 용이 – 내부 구조 변경 시, 외부 코드에 영향을 최소화
3️⃣ 모듈화 – 기능 단위로 클래스화되어 코드 조직이 명확해짐
✳️ 클래스는 캡슐화를 위한 기본 단위이며, 안전한 설계를 위해 접근 제한자와 함께 사용한다.
💻 예제 코드 (정보 은닉 + const 함수 + 캡슐화 포함 예제)
#include <iostream>
#include <string>
class Student {
private:
std::string name; // 이름 (은닉된 정보)
int score; // 점수 (은닉된 정보)
public:
// 생성자
Student(const std::string& name, int score) : name(name), score(score) {}
// Getter (정보 읽기 함수) - const 함수
std::string getName() const {
return name;
}
int getScore() const {
return score;
}
// Setter (정보 수정 함수)
void setScore(int newScore) {
if (newScore >= 0 && newScore <= 100) {
score = newScore;
} else {
std::cout << "⚠️ 유효하지 않은 점수입니다." << std::endl;
}
}
// 출력 함수 (const 함수)
void printInfo() const {
std::cout << "이름: " << name << ", 점수: " << score << std::endl;
}
};
int main() {
Student s("홍길동", 85);
s.printInfo(); // 정보 출력
s.setScore(95); // 점수 변경
std::cout << "점수: " << s.getScore() << std::endl;
// const 객체 선언
const Student cs("이순신", 100);
cs.printInfo(); // ✅ const 객체이므로 const 함수만 호출 가능
// cs.setScore(80); // ⚠️ 오류: const 객체는 setScore() 호출 불가
return 0;
}
🖥️ 실행 결과:
이름: 홍길동, 점수: 85
점수: 95
이름: 이순신, 점수: 100
✅ 마무리 정리
1️⃣ 정보 은닉은 멤버를 private으로 숨기고, 접근 함수로 제어한다.
2️⃣ Get/Set 함수는 데이터를 안전하게 조회하고 수정하기 위해 사용한다.
3️⃣ const 함수는 멤버 데이터를 변경하지 않으며, const 객체에서도 사용 가능하다.
4️⃣ const 함수 내에서는 const 함수만 호출 가능하다.
5️⃣ 캡슐화는 정보 은닉을 포함하는 더 큰 개념이며, 클래스 설계의 핵심이다.
6️⃣ 안전한 객체 설계를 위해 정보 은닉 + const + 캡슐화를 함께 사용한다.
✳️ 객체지향에서 캡슐화와 정보 은닉은 코드 품질을 높이는 핵심 개념이다.
⚠️ const의 역할을 제대로 이해하지 않으면 함수 설계에서 오류가 자주 발생한다.
✅ 멤버 보호, 유지보수성, 코드 안정성 향상을 위해 반드시 활용해야 할 패턴이다.
'Language > C++' 카테고리의 다른 글
| 📌 Chapter 05 - 복사 생성자(Copy Constructor) (2) | 2025.08.11 |
|---|---|
| 📌 Chapter 04 - 클래스 고급 개념 - 02 (4) | 2025.08.09 |
| 📌 Chapter 03 – 클래스 기초 (2) | 2025.08.06 |
| 📌 Chapter 02 - C와 비교하는 C++ 2 (0) | 2025.07.15 |
| 📌 Chapter 02 - C와 비교하는 C++ 1 (0) | 2025.07.15 |