2. 구조체
C++의 구조체는 Class의 일종
연관 있는 데이터를 묶을 수 있는 문법적 장치
struct Car basicCar;
struct Car simpleCar;
3. 구조체 내 선언
함수 선언
C++안에서는 구조체 안에 함수를 삽입하는 것을 허용.
함수가 구조체 내에 삽입되면 구조체 내에 선언된 변수에 직접접근이 가능해진다.
함수 정의를 구조체 밖에서 할 수 있다.(원형 선언을 구조체 내부, 정의를 구조체 밖)
Enum 선언
구조체 내에서만 유효한 상수를 정의
4. 클래스(Class)
키워드 Class를 사용하여 클래스 선언.
클래스 내에 선언된 변수는 클래스 내에 선언된 함수에서만 접근이 가능
접근 제어 지시자
public : 어디서든 접근 허용
protected : 상속 관계에 놓여있을 때, 유도 클래스에서의 접근 허용
Private : 클래스 내에서만 접근 허용
5. 객체(object), 맴버변수, 맴버함수
객체(Object)
클래스의 실체화
하나 이상의 데이터와 하나 이상의 함수로 구성된다.
맴버 변수
클래스를 구성하는(클래스 내에 선언된) 변수를 가리킨다.
맴버 함수
클래스를 구성하는(클래스 내에 정의된) 함수를 가리킨다.
6. 객체 간 Message Passing 방법
관계를 형성하는 둘 이상의 클래스가 필요하다.
함수 호출을 기반으로 하여 하나의 객체가 다른 하나의 객체에게 메시지를 전달
한다.
7. 정보 은닉
제한된 방법으로의 접근만 허용을 해서 잘못된 값이 저장되지 않도록 도와야 한
다. (실수 시, 실수가 쉽게 발견 되도록 해야 한다.)
멤버 변수를 private으로 선언하고, 해당 변수에 접근하는 함수를 별도로 정의하
여 안전한 형태로 멤버 변수의 접근을 유도하는 것
Access Function
멤버변수를 private으로 선언하면서, 클래스 외부에서의 멤버변수 접근을 목적으로
정의되는 함수
8. const 함수
멤버변수에 저장된 값을 변경하지 않겠다는 선언이다.
const 선언이 추가된 멤버함수 내에서 멤버변수의 값을 변경하는 코드가 삽입되
면, 컴파일 에러가 발생한다.
const 함수 내에서는 const가 아닌 함수의 호출이 제한된다.
const 참조자를 대상으로 값의 변경 능력을 가진 함수의 호출을 허용하지 않는다.
9. 생성자(Constructor)&소멸자
(Destructor)
생성자
객체 생성과 동시에 초기화를 한다.
객체 생성시 딱 한 번 호출 된다.
클래스 이름이 함수 이름과 동일, 반환형이 선언되어 있지 않다.
오버로딩 및 매개변수에 ‘디폴트 값‘ 설정이 가능하다.
소멸자
객체소멸 시 반드시 호출되는 것.
반환형이 선언되어 있지 않고, 실제로 반환하지 않는다.
오버로딩 및 디폴트 값 설정도 불가능하다.
10. this 포인터
객체 자신을 가르키는 용도
this=객체자신의 주소 값
this 포인터는 그 주소 값과 자료형이 정해져 있지 않은 포인터이다.
11. 깊은 복사와 얕은 복사
얕은 복사(복사 생성자)
멤버 대 멤버의 복사를 진행
Heap의 메모리 공간을 참조하는 경우 문제가 생김
name
age
A 객체
name
age
B 객체
문자열
참조
참조
문제의 경우
12. 깊은 복사와 얕은 복사
깊은 복사
멤버뿐만 아니라, 포인터로 참조하는 대상까지 깊게 복사한다.
멤버 대 멤버 복사
메모리 공간 할당 후 문자열 복사
name
age
A 객체
name
age
B 객체
문자열
참조
참조
문자열
13. 복사 상생자 호출 시기?
1. 기존에 생성된 객체를 이용해서 새로운 객체를 초기화하는 경우
2. Call-by-value 방식의 함수 호출 과정에서 객체를 인자로 전달하는 경우
3. 객체를 반환하되, 참조형으로 반환하지 않는 경우
Editor's Notes
클래스와 구조체 모두 접근 제어 지시자를 사용할 수 있지만 사용하지 않을 경우
클래스는 private, 구조체는 public으로 선언한다.
Cf) 캡슐화 – 둘 이상의 기능이 모여서 하나의 기능을 달성함.
본 경우는 문자열을 두 개의 객체가 동시에 참조한다. B객체가 소멸하게 되면 A 객체는 참조할 수 있는 문자열이 사라져버리게 된다.