Cpp module00 - 클래스(class)

Park Sejin·2021년 9월 7일
0

CppModule

목록 보기
2/2

클래스(class)

클래스의 탄생

C++의 구조체는 멤버 함수를 포함할 수 있다는 면에서 C의 구조체보다 의미가 확장되었다. 이형 타입 변수의 집합인 구조체가 스스로의 동작을 정의할 수 있다는 것은 객체 지향 구현 측면에서 매우 중요한 의미가 있다.

C의 전통적인 구조체와 C++에서 확장된 구조체의 차이를 구분하기 위해 확장된 의미의 구조체에 클래스라는 새로운 이름 붙혔다.

구조체 선언문에서 struct 키워드를 class라는 키워드로 바꾸기만 하면 클래스가 된다. C의 구조체와 다르게 C++의 구조체는 멤버 함수, 생성자, 파괴자를 가질 수 있고 상속도 가능하며 클래스가 쓰이는 모든 곳에 사용할 수 있다. C++에서 구조체와 클래스의 유일한 차이점은 멤버에 대한 디폴트 접근 지정뿐이다.

struct S
{
    int x;      // 구조체의 디폴트접근지정은 public
}
S s;
s.x = 1234;     // 구조체 외부에서 접근 가능.

class C
{
    int x;      // 클래스의 디폴트접근지정은 private
}
C c;
c.x = 1234;     // 클래스 외부에서 접근 불가능.

구조체의 디폴트 접근 지정은 public이고 클래스의 디폴트 접근 지정은 private이다. 클래스는 객체의 안정성을 위해 외부에서 멤버 데이터를 함부로 접근하지 못하게 멤버를 숨기는 것을 지향한다. 하지만 C++의 구조체는 C언어와의 호환성을 위해 디폴트 접근 지정이 public일 수 밖에 없다.


클래스의 선언

class ClassName
{
public:
    멤버 변수;
    멤버 함수;
private:
    멤버 변수;
    멤버 함수;
};              // 세미콜론 반드시 필요하다.

구조체와 마찬가지로 멤버 개수에 제한이 없다. int, long, double 등의 기본 자료형은 물론이고 배열, 구조체 등의 유도형과 다른 클래스형의 변수까지 멤버로 포함할 수 있다.
구조체와 동일하게 중첩이 가능하다.


클래스는 타입이다.

C++에서는 구조체의 태그가 타입으로 승격되어 태그만으로 구조체 변수를 선언할 수 있다. C와 C++ 구조체의 차이
마찬가지로 C++에서 클래스는 int, double, char와 같은 기본형 타입과 동일한 하나의 타입으로 취급된다. 클래스가 완전한 타입으로 취급될 수 있도록 C++은 여러가지 언어적 장치(생성자, 연산자 오버로딩 등)를 제공한다.

정수형클래스C++의 관련 문법
int i;Complex C;클래스의 이름이 타입과 같은 자격을 가진다.
int i = 3;Complex C(1.0, 2.0);생성자를 사용하여 선언과 동시에 초기화 할 수 있다.
int i = j;Complex D = C;복사 생성자를 사용하여 같은 타입의 다른 객체로부터 생성된다.
i = j;D = C;대입 연산자
i + j;D + C;연산자 오버로딩
i = 3.14;Complex C(1.2);변환 생성자, 변환 함수
3 + i;1.0 + C;전역 연산자 함수와 프렌드

C++이 클래스를 완전한 타입으로 취급하므로 클래스로부터 유도형 타입(기본형 타입으로 부터 만들어지는 타입. 예: 배열, 구조체, 공용체, 포인터, 함수형 포인터)을 만들 수 있다. 그러므로 클래스의 배열이나 클래스형 변수를 가리키는 포인터도 만들 수 있다.


인스턴스

클래스는 타입일 뿐 그 자체가 정보를 저장하는 변수는 아니다. 클래스를 선언한다고 해서 실제로 값을 기억할 수 있는 메모리가 할당되지 않는다. 클래스형의 변수를 선언해야 실제 메모리가 할당된다.

Position Here;
Complex C;

클래스 변수 선언문에 의해 생성된 변수를 인스턴스(Instance)라고 한다. 인스턴스는 클래스가 메모리에 구현된 실체이며 우리가 지금까지 변수라고 불러왔던 개념과 동일하다.
프로그래밍 대상은 클래스가 아니라 인스턴스이고 한 클래스에 대해 여러 개의 인스턴스를 동시에 생성할 수 있다.

Position A, B, C;

위 선언에 의해 Position 형의 인스턴스 A, B, C가 메모리에 각각 생성된다. int i, j, k; 선언에 의해 세 개의 정수형 변수가 동시에 생성되는 것과 같다.

개별 인스턴스가 독립적인 정보를 저장할 수 있어야 하기 때문에 각 인스턴스들은 클래스에 선언된 멤버 변수를 각각 따로 가진다. 그런 이유 인스턴스의 실제 크기는 클래스에 선언된 모든 멤버 변수의 총 크기와 같다.

인스턴스의 상태(멤버 변수)는 달라질 수 있지만 동작(멤버 함수)은 모두 동일하기 때문에 멤버 함수는 클래스에 속한 모든 인스턴스들이 공유한다.

인스턴스의 다른 표현은 오브젝트(Object)이다.

영어번역의미
인스턴스(Instance)실체메모리에 구현되어있다.
오브젝트(Object)객체독립성을 가진 부품이다.

출처

http://soen.kr/lecture/ccpp/cpp3/25-4-1.htm
http://soen.kr/lecture/ccpp/cpp3/25-4-2.htm
http://soen.kr/lecture/ccpp/cpp3/25-4-3.htm

0개의 댓글