C++의 추상 자료형

C++의 클래스는 무엇을 감추고 무엇을 내놓을까?

C++의 클래스

값과 기능을 한 덩어리로

C++의 클래스(class)는 C의 구조체와 Simula 67의 클래스를 바탕으로 합니다. 값을 담는 데이터 멤버와 그 값을 다루는 멤버 함수(member function)를 함께 묶습니다. 묶는 장치이면서 그 자체가 타입입니다.

구조체는 여러 값을 한 묶음으로 만든 타입입니다. Simula 67은 클래스 개념을 처음 들여온 1967년의 언어입니다. 캡슐화는 한데 묶는다는 뜻입니다.

private 절

private 아래는 잠깁니다

클래스 안에서 private 절에 적은 멤버는 밖에서 쓸 수 없습니다. 스택의 표현인 stackPtr, maxLen, topPtr이 여기에 들어갑니다. 2편에서 본 조건 ① '표현 감추기'가 이렇게 채워집니다.

절(clause)은 private: 이나 public: 으로 시작하는 구역입니다.

public 절

public 아래는 열립니다

public 절에 적은 멤버는 클라이언트(타입을 가져다 쓰는 코드)에게 내놓은 부분, 곧 인터페이스입니다. 스택의 연산 넷이 여기에 들어갑니다. 둘이 class 블록 하나에 있으니 조건 ② '한 단위에 담기'도 채워집니다.

protected 절은 상속에 쓰는 것이라 11강에서 다룹니다.

인스턴스

함수는 한 벌, 데이터는 각자

클래스로 만든 객체 하나하나가 인스턴스(instance)입니다. 인스턴스들은 멤버 함수 한 벌을 함께 쓰고, 데이터 멤버는 저마다 따로 가집니다. stackPtr은 배열의 위치를 담은 값, 곧 포인터입니다.

topPtr의 1과 4는 예시 값입니다.

friend

벽에 낸 예외의 문

클래스와 관련 없는 함수나 다른 클래스가 private 멤버에 닿아야 할 때가 있습니다. C++에서는 클래스가 그 상대를 friend로 지정해 주면 됩니다. 지정받은 쪽만 벽을 통과합니다.

연산자 오버로딩(+ 같은 연산자에 새 뜻을 주는 것)을 클래스 밖에서 정의할 때 이런 일이 생깁니다. 함수 A와 B는 예시입니다.

다음 편

객체가 생기고 사라질 때는 무슨 일이 일어날까요

4편객체는 어떻게 생기고 사라질까? 10강 목록