본문 바로가기
언어/C++

[C++ 기본 공부정리] 14-1. OOP - 클래스(class) 기본

by 민-Zero 2019. 12. 26.

공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다.

틀린 부분에 대한 지적은 감사합니다.

1. 클래스(class)

객체 지향 프로그래밍을 수행하게 되면 데이터와 기능을 유기적으로 연결하기 위해 클래스(class)를 사용하게 된다. 추상화를 통해 원하는 객체를 class 키워드를 통해 사용자 정의타입으로 생성하며 struct와 구조는 같다. 차이점은 class라는 키워드와 접근제어자를 사용하는 것이다. 선언방법은 다음과 같다.

문법)

class 클래스명 {

접근제어자:

    멤버 변수1;

    멤버 변수2;

    ...

    멤버 함수1;

    ....

}

접근제어자에 대해 간단히 정리하면, class의 기본적으로 설정된 접근제어자는 private이므로 접근제어자를 입력하지 않으면 자동으로 private로 설정되고 다른 접근제어자로 설정하려면 public: 과 같이 사용하면 된다.

접근제어자는 정보은닉을 위해 사용하고 public은 모든 객체에서 접근 가능하도록 하며 private는 동일 객체에 속한 멤버 변수나 함수만 사용가능하도록 한다. 접근제어자에 대한 자세한 내용은 다음에 정리하자.

위의 경우 클래스에 대한 선언만 이루어진 것이기 때문에 메모리에 할당되지 않고 클래스의 생김새만 보여주는 것이다. 문법) 클래스명 클래스변수명;

을 통해 클래스타입 변수를 생성해야 클래스가 메모리에 할당되며, 클래스 변수를 정의하는 과정을 인스턴스화(instantiation) 라고 하며 이때 생성된 클래스 변수를 인스턴스(instance)라고 부른다.

객체(object)는 구현할 대상이고 인스턴스는 그 대상을 프로그램에서 실체화한것 이므로 인스턴스는 객체에 포함된다고 할 수 있다. 따라서 클래스 변수를 객체라고 부르는 것 또한 맞다.  

특이한 점은 인스턴스를 생성할 경우 멤버변수는 각 인스턴스마다 다른 메모리 공간에 생성되지만 멤버함수는 모든 인스턴스가 공유한다.

 

2. 멤버 함수(member function)

클래스 내부에서 멤버 변수를 이용해 기능을 구현하기 위해 만든 함수를 멤버 함수(member function)이라고 하며 메소드(method)라고 부르기도 한다. 멤버 함수의 경우 2가지 정의 방법이 있다.

① 함수의 원형만 선언하고 클래스 외부에서 정의

② 클래스 내부에서 선언 및 정의

PrintVal() 함수가 클래스 내부에서 멤버 함수를 정의한 경우이고 Print_TypeVal() 함수가 클래스 내부에서 멤버함수의 원형만 선언하고 클래스 외부에서 멤버함수를 정의한 경우이다.

방식의 차이일뿐 두개다 같은 동작을 한다. 클래스 외부에서 멤버함수를 정의할 경우 어떤 클래스의 멤버함수 인지를 컴파일러에게 알려주어야 하기 때문에 범위지정연산자(::)를 사용해야 한다.

 

3. 멤버 변수와 멤버 함수 호출

멤버 함수와 변수를 호출하는 방법은 구조체와 마찬가지로 참조 연산자(.)을 통해 호출할 수 있다.

이 예제에서 멤버 변수를 호출하려고 하면 에러가 발생하는대 private로 설정이 되어있어 외부 접근이 불가능하기 때문이다.

댓글