본문 바로가기

C++

[15] 클래스

728x90

클래스

클래스는 사용자 정의형의 한 종류이며, 어떤 대상의 성질이나 기능을 프로그램으로 표현하기 위해 사용하는 개념입니다.

 

클래스 선언

클래스를 작성하는 작업을 말합니다.

 

데이터 멤버와 멤버함수

클래스 내부에 선언된 변수를 "데이터 멤버", 함수를 "멤버 함수"라고 부릅니다.

 

 

범위 결정 연산자 & 멤버 함수 정의

멤버 함수는 클래스 내부가 아닌 바깥에 작성합니다. 이때, 정의하면서 다른 일반 함수의 정의와 헷갈릴 수 있기 때문에, 범위 결정 연산자를 붙여 어떤 클래스의 멤버 함수인지 나타냅니다.

 

객체 또는 인스턴스

구조체처럼 클래스도 클래스형 변수를 선언할 수 있습니다. 이때 선언된 변수를 객체 또는 인스턴스라고 합니다.

 

 

멤버 접근

클래스의 멤버에 접근할 때는 도트 연산자(.)를 사용합니다.

 

 

동적 생성

클래스의 객체를 저장하기 위해 메모리를 확보하는 작업(클래스형 변수를 선언하는 것)을 "객체를 생성한다."라고 하고, 사용후 메모리를 해제하는 것을 "객체를 소멸시킨다."라고 합니다.

일반적으로 클래스의 객체는 프로그램이 시작되면서 생성되고, 프로그램이 끝날 때 소멸됩니다. 하지만, 동적으로 객체를 생성할 수 있습니다.

동적으로 객체를 생성하기 위해서 포인터 변수를 사용합니다. 선언된 포인터 변수에 클래스형을 new를 사용해 생성하고 화살표 연산자를 사용해서 멤버에 접근합니다. 물론 사용이 끝난 후에는 수동으로 delete를 사용해 메모리를 해제해 줍니다.

 

뒤에서 설명이 나오겠지만, 클래스는 기본적으로 private이라는 형식으로 지정되며, private상태인 경우는 외부에서 값을 바꾸거나 할 수 없으므로 public: 으로 고쳐준 뒤 진행했습니다.

 

 

다수의 객체 생성하기

클래스는 구조체와 마찬가지로 생성된 객체(클래스형 변수)끼리는 독립적이므로, 서로 영향을 미치지 않습니다.

 

 

객체에 객체 대입

클래스도 구조체와 같이 객체끼리 대입을 할 수 있는지 실험을 해보았습니다. 그 결과, 잘 대입되는 것을 알 수 있었습니다.

그리고, 원래 객체와 대입된 객체는 값을 바꿔도 서로 영향을 주지 않는 독립적인 객체입니다.

 

 

구조체가 아닌 클래스를 사용하는 이유는 뭘까?

뒤의 접근 제한에서 배울 내용인것 같은데, 구조체는 기본적으로 public이고, 클래스는 private이기 때문에 접근성 문제이지 않을까 생각합니다. 이후 공부와 고민을 개인적으로 좀 더 해본 뒤 다시 정리하도록 하겠습니다.

728x90

'C++' 카테고리의 다른 글

[17] 인수와 객체  (0) 2021.05.02
[16] 접근 제한  (0) 2021.05.02
[14] typedef, 구조체, 공용체  (0) 2021.05.01
[13] 파일 분할  (0) 2021.05.01
[12] 동적 메모리 확보  (0) 2021.05.01