All Development

C++) C++의 특징 Part 1

Todah 2024. 1. 8. 21:55
반응형

기본적으로 C++ 는 객체지향언어(OOP) 이다.

그렇다면 객체란 어떤 것을 뜻하는 것일까?


1. 객체(Object) 란 무엇인가?

- OOP환경에서 소프트웨어(소스코드)를 구성하는 단위 요소이다.

-  변수 및 그와 관련한 메서드(Method, 함수)가 모여서 이뤄진 하나의 집합체다. (C언어의 구조체)

-  C++에서는 클래스(Class)로 기술한다.

-  클래스는 C언어의 구조체와 유사하며 변수와 함수를 멤버로 갖는 하나의 틀이다.

C++ 스타일 C코드

-  제작자의 입장에서는 사용자가 선언하는 Instance의 주소값을 알 수가 없다.

-  이때 코드가 작성되는 현재시점에서 미래시점의 인스턴스 주소를 가리키는게 this 포인터다.

 

# 주의할점

- (객체) 사용자는 제작자가 만든 자료구조 및 멤버 구성에 대해 알고 사용해야 한다.

- 객체에 담긴 정보를 출력 할 때 사용자는 멤버에 접근해야 한다. (적절한 것인가?)

- 제작자가 객체 구성 변경 시 사용자 또한 자신의 코드를 반드시 수정해야 하는 의존성이 발생한다.

  (유지, 보수 효율 저하원인)

 


2. 클래스 기본 문법

-  관계에 관해 생각하지 않는다면 함수를 포함하는 구조체로 이해하면 된다.

-  생성자, 소멸자 등 문법 상 자동으로 호출되는 함수가 존재한다.

-  C++ 는 struct가 존재하지 않는 것으로 볼 수 있다,

-  구성요소 (변수나 함수) 를 멤버라 지칭한다.

-  시점이 중요하다. (어디서, 왜 Called by...)

 

#추가사항

-  함수는 클래스 인스턴스의 메모리 공간을 소모하지 않는다.

-  여러 인스턴스가 각각 함수코드를 별도로 갖는 것이 아니다.

-  클래스 멤버함수라 하더라도 결국 C언어의 함수처럼 존재한다. (Name mangling 을 통한 이름 변경)

 

Q. 만약 수천, 수만개의 인스턴스가 클래스 멤버함수를 호출한다면, 성능의 문제로 속도가 저하되는 문제는 있을 수 있어도 기능 자체에 대한 문제는 없는 것일까?

 

3. 디폴트 생성자, 소멸자

-  생성자는 객체가 생성되는 시점에 자동으로 호출 되는 멤버 함수이다.

-  객체의 생성은 인스턴스 선언 및 new 연산에 따른 동적 생성 두 경우로 나뉜다.

-  다중 정의가 가능하다.

-  전역 인스턴스가 존재할 경우 main() 함수보다 생성자가 먼저 호출된다.

-  소멸자는 객체가 소멸하는 시점에 자동으로 호출되는 함수이다.

 

#생성자 종류

-  디폴트 생성자 (이름 == class 이름)

-  매개변수를 갖는 다중 정의 생성자 (변환 생성자 포함)

-  복사 생성자

-  이동 생성자

 

#생성자/소멸자 함수 사용할때 주의점

-   두 함수 모두 반환 자료가 없으며 문법에 따라 자동으로 호출된다.

-   절대로 실패 할 수 없는 코드만 기술해야 한다.

-   메모리 동적 할당은 가급적 하지 말아야 한다.

-   객체 자체와 관련되지 않은 코드는 기술하지 말아야 한다.

 


4. 클래스 멤버 선언 및 초기화

- 참조자가 멤버일때 초기화하는 방법은 다중 정의를 주로 이용한다.

 


5. 접근 제어 지시자

 

-   C언어는 자유도기 높다 (= 버그가 많다).

-   C++에서 접근 제어 지시자를 사용하는 근본적인 이유 : 유지 보수의 원활성 때문이다.

 


 

#참조

https://www.inflearn.com/course/c%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A5%BC-%EC%9C%84%ED%95%9C-%EC%B5%9C%EC%86%8C%ED%95%9C%EC%9D%98-cpp/dashboard

 

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