
기본적으로 C++ 는 객체지향언어(OOP) 이다.
그렇다면 객체란 어떤 것을 뜻하는 것일까?
1. 객체(Object) 란 무엇인가?
- OOP환경에서 소프트웨어(소스코드)를 구성하는 단위 요소이다.
- 변수 및 그와 관련한 메서드(Method, 함수)가 모여서 이뤄진 하나의 집합체다. (C언어의 구조체)
- C++에서는 클래스(Class)로 기술한다.
- 클래스는 C언어의 구조체와 유사하며 변수와 함수를 멤버로 갖는 하나의 틀이다.


- 제작자의 입장에서는 사용자가 선언하는 Instance의 주소값을 알 수가 없다.
- 이때 코드가 작성되는 현재시점에서 미래시점의 인스턴스 주소를 가리키는게 this 포인터다.
# 주의할점
- (객체) 사용자는 제작자가 만든 자료구조 및 멤버 구성에 대해 알고 사용해야 한다.
- 객체에 담긴 정보를 출력 할 때 사용자는 멤버에 접근해야 한다. (적절한 것인가?)
- 제작자가 객체 구성 변경 시 사용자 또한 자신의 코드를 반드시 수정해야 하는 의존성이 발생한다.
(유지, 보수 효율 저하원인)
2. 클래스 기본 문법
- 관계에 관해 생각하지 않는다면 함수를 포함하는 구조체로 이해하면 된다.
- 생성자, 소멸자 등 문법 상 자동으로 호출되는 함수가 존재한다.
- C++ 는 struct가 존재하지 않는 것으로 볼 수 있다,
- 구성요소 (변수나 함수) 를 멤버라 지칭한다.
- 시점이 중요하다. (어디서, 왜 Called by...)

#추가사항
- 함수는 클래스 인스턴스의 메모리 공간을 소모하지 않는다.
- 여러 인스턴스가 각각 함수코드를 별도로 갖는 것이 아니다.
- 클래스 멤버함수라 하더라도 결국 C언어의 함수처럼 존재한다. (Name mangling 을 통한 이름 변경)
Q. 만약 수천, 수만개의 인스턴스가 클래스 멤버함수를 호출한다면, 성능의 문제로 속도가 저하되는 문제는 있을 수 있어도 기능 자체에 대한 문제는 없는 것일까?
3. 디폴트 생성자, 소멸자
- 생성자는 객체가 생성되는 시점에 자동으로 호출 되는 멤버 함수이다.
- 객체의 생성은 인스턴스 선언 및 new 연산에 따른 동적 생성 두 경우로 나뉜다.
- 다중 정의가 가능하다.
- 전역 인스턴스가 존재할 경우 main() 함수보다 생성자가 먼저 호출된다.
- 소멸자는 객체가 소멸하는 시점에 자동으로 호출되는 함수이다.

#생성자 종류
- 디폴트 생성자 (이름 == class 이름)
- 매개변수를 갖는 다중 정의 생성자 (변환 생성자 포함)
- 복사 생성자
- 이동 생성자
#생성자/소멸자 함수 사용할때 주의점
- 두 함수 모두 반환 자료가 없으며 문법에 따라 자동으로 호출된다.
- 절대로 실패 할 수 없는 코드만 기술해야 한다.
- 메모리 동적 할당은 가급적 하지 말아야 한다.
- 객체 자체와 관련되지 않은 코드는 기술하지 말아야 한다.
4. 클래스 멤버 선언 및 초기화
- 참조자가 멤버일때 초기화하는 방법은 다중 정의를 주로 이용한다.


5. 접근 제어 지시자

- C언어는 자유도기 높다 (= 버그가 많다).
- C++에서 접근 제어 지시자를 사용하는 근본적인 이유 : 유지 보수의 원활성 때문이다.

#참조
C개발자를 위한 최소한의 C++ 강의 - 인프런
C언어를 독하게 제대로 공부하고 선형 자료구조까지 공부했다면 이제는 C++로 객체지향의 세계를 경험 할 시간입니다!, C개발자들을 위해 최소한의 C++문법이 아니라 프로그래밍 기법을 알려드립
www.inflearn.com
'All Development' 카테고리의 다른 글
| C++) 객체 간 관계와 상속 (0) | 2024.03.21 |
|---|---|
| C++) C++의 특징 Part 2 (0) | 2024.01.09 |
| C++) C와 C++ 의 차이점 Part 2 (1) | 2024.01.05 |
| C++) C와 C++ 의 차이점 Part 1 (2) | 2024.01.04 |
| Unity) Lerp 의 사용법 (0) | 2023.10.28 |