..

Search

45) 클래스의 선언

45) 클래스의 선언

클래스의 선언


클래스의 선언

클래스란 객체 지향 프로그래밍의 특징 중 하나인 추상화(abstraction)를 사용자 정의 타입으로 구현한 것이라 할 수 있습니다.

C++에서 이러한 클래스를 선언하는 방법은 구조체를 선언하는 방법과 거의 같습니다.

구조체는 struct 키워드를 사용하지만, 클래스는 class 키워드와 접근 제어 지시자를 함께 사용합니다.

 

C++에서 클래스는 다음과 같이 정의합니다.

정의

class 클래스이름

{

접근제어지시자1:

    멤버변수1의타입 멤버변수1의이름;

    멤버변수2의타입 멤버변수2의이름;

    ...

    멤버함수1의 원형

    멤버함수2의 원형

    ...

};

 

다음은 Book이라는 이름의 클래스를 정의하는 그림입니다.


클래스 정의 예제

 

접근 제어 지시자는 객체 지향 프로그래밍의 특징 중 하나인 정보 은닉(data hiding)을 위한 키워드입니다.

public 영역은 모든 객체에서 접근할 수 있지만, private 영역은 해당 객체 내의 멤버 변수나 멤버 함수만이 접근할 수 있습니다.

 

접근 제어 지시자에 대한 더 자세한 사항은 C++ 접근 제어 수업에서 확인할 수 있습니다.

 

C++ 접근 제어 수업 확인 =>

 

이렇게 선언된 클래스의 정의를 가지고 다음과 같이 Book 객체를 선언할 수 있습니다.

선언

클래스이름 객체참조변수이름; Book web_book;

예제

Book web_book;


멤버 함수의 정의

클래스에서 멤버 함수를 정의하는 방법은 일반 함수의 정의와 크게 다르지 않습니다.

C++에서는 멤버 함수를 클래스의 선언 안이나 밖에서 모두 정의할 수 있도록 허용합니다.

 

클래스의 선언 밖에서 멤버 함수를 정의할 때에는 범위 지정 연산자(::)를 사용하여 해당 함수가 어느 클래스에 속하는지를 명시해야 합니다.

문법

반환타입 클래스이름::멤버함수이름(매개변수목록) { 함수의 몸체; }

 

다음 예제는 클래스 선언 밖에서 Book 클래스의 Move() 멤버 함수를 정의하는 예제입니다.

예제

void Book::Move(int page) { current_page_ = page; }

 

만약 멤버 함수가 클래스의 선언 안에서 정의되면, 이 함수는 인라인 함수로 처리되어 위와 같이 범위 지정 연산자를 사용하여 소속 클래스를 명시할 필요가 없게 됩니다.

또한, 클래스 선언 밖에서 정의된 멤버 함수도 inline 키워드를 사용하여 인라인 함수로 처리할 수 있습니다.

 

멤버 함수는 클래스의 선언 안이나 밖에서 모두 정의할 수 있지만, 클래스가 일단 선언된 후에 멤버 함수를 추가할 수는 없습니다.

 

이처럼 하나의 클래스에서 생성된 인스턴스는 각각 독립된 메모리 공간에 저장된 자신만의 멤버 변수를 가지지만, 멤버 함수는 모든 인스턴스가 공유하게 됩니다.


멤버 함수의 호출

C++에서 위와 같이 정의한 멤버 함수를 호출하는 방법은 구조체의 경우와 같습니다.

멤버 함수는 멤버 참조 연산자(.)를 사용하여 호출할 수 있습니다.

 

멤버 함수를 호출하는 방법은 다음과 같습니다.

문법

1. 객체이름.멤버함수이름();               // 매개변수가 없는 멤버 함수의 호출

2. 객체이름.멤버함수이름(전달할인수목록); // 매개변수가 있는 멤버 함수의 호출

예제

web_book.Move(30);


연습문제