객체 지향 프로그래밍을 수행하게 되면 데이터와 기능을 유기적으로 연결하기 위해 클래스(class)를 사용하게 된다. 추상화를 통해 원하는 객체를 class 키워드를 통해 사용자 정의타입으로 생성하며 struct와 구조가 같다. 구조체와 다른 점은 접근제어자가 추가되었고 함수를 포함할 수 있게 된 점이다.
클래스 선언
class 클래스명 {
접근제어자:
멤버 변수1;
멤버 변수2;
...
멤버 함수1;
...
}
C++은 3가지 접근제어자를 제공한다.
① private (디폴트)
객체의 멤버를 외부에 공개하지 않고 직접적으로 접근할 수 없게 한다. 동일 클래스 내에 있는 멤버 또는 friend 함수만 접근 가능하기 때문에 필요 시 public으로 선언된 메소드를 이용하여 기능을 수행한다.
② public
멤버 변수 및 멤버 함수는 외부에 공개되어 아무 제약 없이 접근 가능하며 해당 객체를 사용하는 곳이면 어디서든 접근 가능하다.
③ protected
private의 기능을 수행하면서 상속한 하위 클래스에 대해서는 접근을 가능하도록 해주는 제어자이다. 즉, 상속된 하위 클래스에 대해서는 public 역할을 수행하나 그 외 외부 접근은 모두 private 역할을 수행하도록 하는 제어자이다.
클래스 생성
위의 경우 클래스에 대한 선언만 이루어진 것이며,
클래스명 클래스변수명;
을 통해 클래스타입 변수를 생성해야 클래스가 메모리에 할당된다. 클래스 변수를 정의하는 과정을 인스턴스화(instantiation)라고 하며 이 때 생성된 클래스 변수를 인스턴스(instance)라고 부른다.
멤버 함수
클래스 내부에서 멤버 변수를 이용해 기능을 구현하기 위해 만든 함수를 멤버 함수라고 하며 메소드라고 부르기도 한다. 2가지 정의 방법이 있다.
① 함수의 원형만 선언하고 클래스 외부에서 정의
② 클래스 내부에서 선언 및 정의
PrintVal() 함수는 클래스 내부에서 멤버 함수를 정의한 경우이고 Print_TypeVal() 함수는 클래스 내부에서 멤버함수의 원형만 선언하고 클래스 외부에서 멤버함수를 정의한 경우이다. 클래스 외부에서 멤버함수를 정의할 경우 어떤 클래스의 멤버함수인지 컴파일러에게 알려주어야 하기 때문에 범위지정연산자(::)를 사용해야 한다.
'Language > C++' 카테고리의 다른 글
[C++] OOP - 생성자와 소멸자 (0) | 2021.10.24 |
---|---|
[C++] OOP - this 포인터 (0) | 2021.10.24 |
[C++] <random> 라이브러리 (난수 생성) (0) | 2021.10.03 |
[C++] <string> 라이브러리 (0) | 2021.10.03 |
[C++] OOP - 생성자와 소멸자 (0) | 2021.07.09 |