티스토리 뷰
캡슐화의 목적
- 객체 보호, 보안
- 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++ 프로그래밍 / 황기태
※
본 게시물은 개인적인 용도로 작성된 게시물입니다. 이후 포트폴리오로 사용될 정리 자료이니 불펌과 무단도용은 하지 말아주시고 개인 공부 목적으로만 이용해주시기 바랍니다.
※
'객체 지향 프로그래밍 > 이론 정리' 카테고리의 다른 글
[C++]this 포인터, string 클래스 (0) | 2017.10.18 |
---|---|
[C++]객체 포인터, 객체 배열,동적 메모리 할당 (0) | 2017.10.11 |
[C++]기본생성자 예제, 생성자의 특징, 소멸자 (0) | 2017.09.21 |
[C++]클래스와 객체, 생성자 (1) | 2017.09.20 |
[C++] C++ 문자열 처리 (0) | 2017.09.13 |
- Total
- Today
- Yesterday
- 백준 10451
- 파이썬 클래스
- 파이썬
- 자바 에센셜 실습문제
- css
- 파이썬 객체
- 파이썬 리스트
- 파이썬 선택문
- 자바스크립트 자료구조
- 자바
- 백준 11501
- 파이썬 if문
- 파이썬 터틀
- 백준
- 자료구조
- css 그리드
- 파이썬 while
- 자바스크립트 그래프
- 명품 c++ 실습
- 파이썬 문자열
- 파이썬 진수 변환
- css 박스
- 웹
- 파이썬 함수
- 파이썬 for
- 백준 1874
- 파이썬 연산자
- 파이썬 단계적 개선
- 버츄어박스
- 파이썬 예제
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |