루리코딩 세상

C++ : 자료형, 연산자, 지정자, 생성자, 소멸자 관련 정보 정리 본문

이론/C++

C++ : 자료형, 연산자, 지정자, 생성자, 소멸자 관련 정보 정리

루리딩 2025. 5. 8. 13:06

 

추가하는 내용에 있어서 혼동이 되는 개념을 명확하게 정리하고자, 수정을 번복하고 있는 포스팅입니다.

자료형(type), 연산자(operator), 지정자(specifier)로 정확한 개념은 함수를 읽는데 더 많은 도움을 줄 것이다.


자료형 (Data Types)


자료형은 데이터의 크기와 종류를 정의한다. 변수는 메모리에서 어떤 형태로 저장되고 처리될지를 자료형으로 결정하는 것이다.

 

더보기

--25.05.30 이전에 작성한 내용, 틀린 내용은 다시 읽으면서 명확하게 개념을 정리하자.

자료형은 프로그래밍에서 변수가 저장할 수 있는 데이터의 종류를 나타낸다..

각 자료형은 데이터의 크기, 범위, 연산 방식 등을 정의하며, 이를 통해 프로그래밍 언어는

데이터를 효과적으로 처리 할 수 있다. 자료형의 종류는 정수형, 실수형, 문자형, 논리형이 존재한다.

 

변수는 무엇인가?


byte

비트 (bit)는 binary digit (2진법)으로 컴퓨터가 처리 할 수 있는 단위의 최소값을 의미한다.

0, 1로 이루어져 있고 참과 거짓으로 True / false로 볼 수 있다. 비트의 개념은 켜거나 끌 수 있는 전기 스위치를 연상하면 좋다.

전기가 켜진 상태는 값 1, 전기가 꺼진 상태는 0.

8비트는 2x 2x 2x 2x 2x 2x 2x 2 = 256의 경우의 수를 나타 낼 수 있음. 0~255/-128~127

 

자료형의 종류와 각 자료형들의 특징

 

데이터 형식과 크기 //특성?

종류 명령어 크기 설명
정수형 int 4 Byte  
  short 2 Byte  
  long 8 Byte  
실수형 float 4 Byte  
  double 8 Byte  
문자형 char 1 Byte  
       
논리형 boolean    
기타 배열/객체/구조체 등 복합적인 자료형도 존재함    
unsigned   부호없음

 

 

서식 지정자

format string
- String의 static 메서드인 format 메서드는 문자열의 형식을 설정하는 메서드
%d (10진수 형식)  int Integer Formatting 정수형 상수
%u Unsigned Unsigned 10진 정수로 출력한다.
%s String Formatting 문자 스트링
- 문자열을 출력한다.
%f Floating point Formatting 실수형 상수 float
고정 소수점 형식의 실수로 출력한다.
%if   실수형 상수 double
%t DateTime Formatting  
%c   문자형 char
%o,  %x(8진수, 16진수 형식) Octal, heXadecimal 8진 정수로 출력한다.
16진 정수로 출력한다. 대문자 X를 쓰면 A~F까지의 숫자도 대문자로 출력된다.
Locale 설정 String.format(포맷, 값)  
%%   %문자 자체를 출력한다.

 

- sizeof

 

이스케이프 시퀀스(escape sequence)
이스케이프 시퀀스 출력 내용  
\'    
\"    
\?    
\\    
\a    
\b    
\n    
\r    
\t    
\v    
\f 폼 피드(form feed) 다음 페이지로 출력

연산자 (Operators)


C언어에서 연산자는 데이터에 대해 어떤 작업을 수행할지 지정하는 기호이다.

다양한 종류의 연산자가 있으며, 각 연산자는 특정 기능을 수행한다. 주요 연산자 종류는

산술 연산자, 대입 연산자, 증갑 연산자, 관계 연산자, 논리 연산자 등이 있다.

산술 연산자
+ 더하기 두 연산자의 값을 더합니다.
- 빼기 두 연산자의 값을 뺍니다.
\* 곱하기 두 피연산자의 값을 곱합니다.
/ 나누기 두 연산자의 값을 나눕니다.
% 나머지 두 피연산자를 나눈 후 나머지를 구합니다.
+, - 단항 부호 연산자 피연산자의 부호를 나타냅니다.

 

대입 연산자
= 오른쪽에 있는 값을 왼쪽에 있는 변수에 대입합니다.
+=, -=, \*=, /=, %= 복합 대입 연산자 산술 연산과 대입을 동시에 수행합니다.
증감연산자
\++ 피연산자의 값을 1증가시킵니다.  
-- 피연산자의 값을 1 감소시킵니다.  
관계 연산자
==   두 피연산자가 같은지 비교합니다.
!=   두 피연산자가 다른지 비교합니다.
<   첫번째 피연산자가 두번째 피연산자보다
작은지 비교합니다.
<=   첫번째 피연산자가 두번째 피연산자보다
작거나 같은지 비교합니다.
>   첫번째 피연산자가 두번째 피연산자보다
큰지 비교합니다.
>=   첫번째 피연산자가 두번째 피연산자보다
크거나 같은지 비교한다.

생성자(Constructor)와 소멸자(Destructor)는 C++에서 클래스를 사용할 때 중요한 개념이다.

생성자는 클래스의 객체가 생성될 때 호출되는 함수로, 초기 값을 설정하는 등의 작업을 수행한다.

다양한 형태의 생정자를 제공함으로써 다양한 상황에 대응할 수 있다.

소멸자는 객체가 메모리에서 해제될 때 호출되는 함수로, 객체의 생명 주기가 끝나기 전에

마무리 작업을 수행한다. 이를 통해 메모리 누수와 같은 문제를 예방한다.

클래스의 안정성과 효율성을 보장하는 핵심 구성요소이다.


생성자는?


C++에서, 생성자는 클래스의 인스턴스가 생성될 때 자동으로 호출되는 특별한 함수다.

C언어와 달리 C++에서 클래스와 OOP의 핵심 구성요소이다. 클래스를 정의할 때 우리는 생성자를 이용해

객체가 어떻게 초기화되는 지 결정 할 수 있다.

 

"생성자는 클래스와 동일한 이름을 가지며, 리턴 타입을 명시하지 않는다."

다양한 형태의 생성자가 존재하는데, 다음과 같다.


- Default Constructor (기본 생성자) : 매개변수가 없는(인자가 없음) 생성자, 컴파일러가 자동으로 만듬

class A {
public:
    A() { } // ← 기본 생성자
};

- Defaulted Constructor (기본 정의 생성자) : 기본 생성자가 필요하지만, 다른 생성자를 정의하거나, 

클래스 내부 상황으로 컴파일러가 자동으로 생성해주지 않을때, 명시적으로 생성하는 문법

class A {
public:
    A() = default; // 기본 생성자를 명시적으로 지시
    A(int x) { this->x = x; }
};

- Parameterized Constructor (매개변수 생성자)

- Copy Constructor (복사 생성자)


- Move Constructor (이동 생성자) : C++11부터 도입된 생성자, 리소스를 복사하지 않는다. 기존 리소스의 소유권을 이동시켜 객체를 생성한다.

class MyClass {
public:
    int* data;
    MyClass(MyClass&& other) noexcept {
        data = other.data;
        other.data = nullptr;
    }
};

- Delegating Constructor (위임 생성자) : 자기 클래스의 다른 생성자를 호출하는 생성자이다.

class MyClass {
    int x, y;
public:
    MyClass(int a) : MyClass(a, 0) {}         // 위임
    MyClass(int a, int b) : x(a), y(b) {}     // 실제 초기화 수행
};

- Explicit Constructor (명시적 변환 생성자) : 자동 형 변환을 막기 위해 사용한다.

class MyClass {
public:
    explicit MyClass(int x) { /*...*/ }
};

MyClass a = 10;  // ❌ 오류: 암시적 변환 안 됨
MyClass b(10);   // ✅ 정상

- Conversion Constructor (암시적 변환 생성자) : 단 하나의 인자를 받는 생성자로, 다른 타입을 해당 클래스 객체로 암시적 변환 가능하다. 단 explicit 키워드가 없을 경우에만 암시적 변환 발생

class MyClass {
public:
    MyClass(int x) { /*...*/ }  // int → MyClass 암시적 변환 가능
};

void func(MyClass m) {}

func(5);  // 암시적으로 MyClass(5)로 변환

- Deleted Constructor (삭제된 생성자) : 해당 생성자의 사용을 금지하고 싶을 때 delete로 명시

class MyClass {
public:
    MyClass() = delete;   // 기본 생성자 금지
};

##기타 생성자 관련 개념##

- Templated Constructor (템플릿 생성자) : 다양한 타입에 대해 일반화된 생성자이다.

클래스 자체가 템플릿이 아니더라도 생성자만 템플릿으로 만들 수 있다.

class MyClass {
public:
    template <typename T>
    MyClass(T value) {
        // 다양한 타입을 받아 생성
    }
};

- Private Constructor (비공개 생성자) : 생성자를 private으로 선언해 외부에서 직접 객체 생성을 못하게 막는다.

주로 싱클톤 패턴, 정적 팩토리 사용시 활용한다.

class Singleton {
private:
    Singleton() {}  // 외부에서 new 불가

public:
    static Singleton& getInstance() {
        static Singleton instance;
        return instance;
    }
};

- Static Factory Constructor

생성자는 아니지만, 생성자 대신 정적 메서드로 객체를 생성하는 패턴이다

내부적으로는 생성자를 호출하지만, 사용자는 메서드만 접근한다

class User {
private:
    User(std::string name) : name(name) {}

public:
    static User create(std::string name) {
        return User(name);
    }
};

소멸자란?


C++에서 클래스의 객체가 메모리에서 제거될 때 자동으로 호출되는 함수이다. 클래스의 주기를 관리하는데 중요한 역할을 한다. 생성자와 같이 클래스의 동일한 이름을 가지지만, 호출하는 앞에 '~' 표시가 붙는다. 소멸자는 매개변수를 가질 수 없으며, 하나의 클래스 안에서 하나만 가질 수 있다. 


- 연산자 개념 모호한 부분 25.05.30 해당 내용 추가..

- 생성자와 소멸자 25.06.01 추가

'이론 > C++' 카테고리의 다른 글

STL (Standard Template Library)  (0) 2025.05.11
C++ 라이브러리  (0) 2025.05.09
string CLASS  (0) 2025.05.09
sizeof 연산자  (0) 2025.05.09
C++ : 단축키 모음  (0) 2025.05.08