1. 클래스란 ?
클래스는 멤버 변수와 멤버 함수를 묶어서 저장할 수 있는 틀, 단위이다.
1-1. 클래스 vs. 구조체
C | C++ | |
구조체가 포함 가능한 것 |
멤버 변수 | 멤버 변수 멤버 함수 |
C와 달리 C++의 구조체는 멤버 변수 뿐만 아니라 멤버 함수 또한 포함할 수 있는데, 이러한 점에서 C++의 클래스는 구조체의 상위 호환으로 설명된다. (구조체와 거의 동일한 개념!)
- Property : 클래스 내부 멤버 변수
- Method : 클래스 내부 멤버 함수
다만, C++에서 클래스와 구조체는 기본 접근 제어자에서 차이를 보인다.
- C++ 구조체 : 기본 접근 제어자 public
- C++ 클래스 : 기본 접근 제어자 private
1-2. 클래스 vs. 인스턴스
클래스 | 인스턴스 (=객체) |
인스턴스를 만들기 위한 틀 | 클래스를 바탕으로 만들어진 실제 객체 |
ex ) 초등학생 (학교, 학년, 반, 이름) | ex ) 학생1 (행복초, 1학년, 3반, 김해피) |
1-3. 클래스와 객체 지향 프로그래밍
- 객체 (Object) : 노트북, 마우스, 키보드 등 모든 물체
- 객체 = 상태 (state) + 행동 (behavior) = 변수 + 함수
- 객체 지향 프로그래밍 (Object Oriented Programming)
- 프로그램을 여러 독립된 객체들의 모임으로 해석하는 개념
- 객체의 상태와 행동을 구체화하는 형식으로 코드를 구성함
OOP를 위해 객체를 만들어내는 틀이 바로 클래스이다.
2. 클래스의 사용
2-1. 클래스 구성
선언부 | 구현부 |
클래스의 틀을 정의 | 클래스의 멤버 함수를 구체적으로 구현 |
틀 : 클래스명, 멤버 변수, 멤버 함수 원형 (리턴 타입, 매개 변수 등) | 범위 지정 연산자 :: 사용 |
// 선언부
class Person {
private :
char *name;
int age;
public:
int birth();
};
// 구현부
int Person::birth() {
return 2022-age+1;
}
int main() {
Person p1;
p1.name = "Kim";
p1.age = 20;
cout << "출생 연도는 " << p1.birth() << endl;
return 0;
}
2-2. 생성자
생성자는 클래스를 바탕으로 객체를 생성할 때 수행하는 초기 작업을 미리 설정해 놓은 함수이다.
- 변수 값을 설정하기
- 메모리 동적 할당 받기
▷ 생성자의 특성
- 객체 생성 시점에 한번만 실행됨 (자동으로 실행)
- 생성자명은 클래스명과 동일해야 함
- 별도의 리턴 타입을 가지지 않음
- 생성자는 중복이 가능하지만, 매개변수의 타입이나 개수에 차이가 있어야 함
- 만약 아무런 생성자도 정의하지 않으면, 컴파일러가 자동으로 기본 생성자를 삽입한다.
- 기본 생성자 : 매개변수가 없는 생성자
- 객체의 생성을 위해서는 반드시 생성자가 존재해야 하기 때문이다.
// 선언부
class Person {
private :
char *name;
int age;
public:
int birth();
};
// 구현부 (생성자)
Person::Person() {
int age = 20;
cout << "생성자1 실행됨" << endl;
};
Person::Person(int a) {
int age = a;
cout << "생성자2 실행됨" << endl;
};
// 구현부 (멤버 함수 구현)
int Person::birth() {
return 2022-age+1;
}
int main() {
Person p1; // 매개변수 없는 생성자1 실행됨
p1.name = "Kim";
Person p2(30); // 매개변수 있는 생성자2 실행됨
return 0;
}
2-3. 접근 지정자
public < protected < private
public | protected | private |
모든 함수에서 접근 가능 (클래스 내/외) |
클래스 내 모든 멤버 함수와 이 클래스를 상속받는 자녀 클래스의 멤버 함수에서 접근 가능 |
클래스 내 모든 멤버 함수에서 접근 가능 |
'Coding Test > C++ 기초' 카테고리의 다른 글
[C++ 기초] 오버로딩 (0) | 2022.08.11 |
---|---|
[C++ 기초] 상속 (0) | 2022.08.03 |
[C++ 기초] 포인터 (0) | 2022.07.20 |
[C++ 기초] 배열 (0) | 2022.07.20 |
[C++ 기초] 조건문, 반복문 (0) | 2022.07.13 |