티스토리 뷰

캡슐화의 목적
- 객체 보호, 보안
- C++에서 객체의 캡슐화 전략
- 객체의 상태를 나타내는 데이터 멤버(멤버 변수)에 대한 보호
- 중요한 멤버는 다른 클래스나 객체에서 접근할 수 없도록 보호
- 외부와의 인터페이스를 위해서 일부 멤버는 외부에 접근 허용

 

* 멤버에 대한 3가지 접근 지정자

- private : 동일한 클래스의 멤버 함수에만 접근 가능

- public : 모든 다른 클래스간 접근 가능

- protected : 클래스 자신과 자기 자식에게만 접근 가능

 

*중복 접근 지정과 디폴트 접근 지정

- 접근 지정은 중복해서 지정 가능하다.

class Sample {

private

//private 멤버 선언

public:

// public 멤버 선언

private:

// private 멤버 선언

};

 

- 디폴트 접근 지정은 private 이다.

class Circle {
    int radius; //접근 지정이 private 이다.
public:
    Circle();
    Circle(int r);
    double getArea();
};

 

- 멤버 변수는 private로 지정하는 것이 바람직하다.

 

 

 

인라인 함수

- 짧은 코드로 구성된 함수에 대해, 함수 호출 오버헤드로 인한 프로그램의 실행 속도 저하를 막기 위해 도입된 방법이다.

- inline 키워드로 함수를 선언한다.

- 컴파일러는 인라인 함수를 호출하는 곳인라인 함수의 코드그대로 삽입하여 함수 호출이 일어나지 않게 한다.

- 인라인 함수를 이용하면 C++ 프로그램의 실행 속도를 향상시킬 수 있다.

- 하지만 인라인 함수를 호출하는 곳에 인라인 함수의 코드를 단순 삽인 하는 것이기 때문에 그 만큼 코드의 크기가 늘어난다는 단점이 있다.

 

*inline 함수 형식

inline int odd(int x){

return (x%2);

}

- inline 강제명령이 아니며, 일종의 요청이다.

- 그래서 컴파일러는 효율을 따져 inline 선언을 무시할 수도 있다.

 

 

 



 

 

C++ 구조체

- 상속, 멤버, 접근 지정 등 모든 것이 클래스와 동일하다.

- 클래스와 유일하게 다른 점디폴트 접근 지정이다.

구조체의 디폴트 접근 지정 – public
클래스의 디폴트 접근 지정 – private

 

- 생성 방법은 c와 다르게 struct 키워드를 생략한다.

structName stObj;          (o) 

struct structName stObj;  (x)

 

 

 

파일 분리

- C++ 프로그램을 작성할 때에는 클래스헤더파일(.h)cpp파일분리하여 작성하는 것이 바람직하다.

- 클래스 선언부헤더 파일(.h)에 저장.

- 클래스 구현부cpp파일에 저장하고, 클래스가 선언된 파일을 include 하는 것이 바람직하다.

- 이러면 클래스의 재사용성이 높아져 프로그램을 좀 더 효율적으로 작성 할 수 있다.

 

*헤더 파일의 중복 include

- 헤더 파일을 중복으로 include 하면 오류가 발생한다.

- 오류가 발생하지 않도록 하기 위해 조건 컴파일문을 사용하면 된다.

 

*조건 컴파일문 형식

#ifndef CLASSNAME

#define CLASSNAME

 

.....

#endif

 

* 파일 분리 예제 

- Adder.h

1
2
3
4
5
6
7
8
9
10
11
#ifndef ADDER_H
#define ADDER_H
 
class Adder {
    int op1, op2;
public:
    Adder(int a, int b);
    int process();
};
 
#endif
cs

 

- Adder.cpp

1
2
3
4
5
6
7
8
9
#include "Adder.h"
 
Adder::Adder(int a, int b) {
    op1 = a; op2 = b;
}
 
int Adder::process() {
    return op1 + op2;
}
cs

 

- Calculator.h

1
2
3
4
5
6
7
8
9
#ifndef CALCULATOR_H
#define CALCULATOR_H
 
class Calculator {
public:
    void run();
};
 
#endif
cs

 

- Calculator.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
using namespace std;
 
#include "Calculator.h"
#include "Adder.h"
 
void Calculator :: run() {
    cout << "두 개의 수를 입력하세요.";
    int a, b;
 
    cin >> a >> b;
    Adder adder(a,b);
    cout << adder.process();
}
cs

 

- main.cpp

1
2
3
4
5
6
7
8
9
#include "Calculator.h"
 
using namespace std;
 
int main() {
    Calculator calc;
    calc.run();
    return 0;
}
cs

 

 

참고 문헌 : 명품 C++ 프로그래밍 / 황기태



본 게시물은 개인적인 용도로 작성된 게시물입니다. 이후 포트폴리오로 사용될 정리 자료이니 불펌과 무단도용은 하지 말아주시고 개인 공부 목적으로만 이용해주시기 바랍니다.
 

댓글