[C++] - 1일차(클래스)

Jun·2026년 2월 17일

c++

목록 보기
1/6

클래스와 객체지향

C++에 처음 입문하며 가장 먼저 마주하게 되는 벽이자 핵심인
클래스(Class)객체(Object)에 대해 정리해 보겠습니다.


1. C에서 C++로: 변화의 시작

C언어에 익숙하다면 가장 먼저 달라지는 입출력 방식부터 손에 익혀야 합니다.

  • 헤더파일: #include <stdio.h> → #include <iostream>
  • 출력: printf("내용"); → cout << "내용" << endl;
  • 입력: scanf("%d", &var); → cin >> var;

2. 클래스(Class)와 객체(Instance)

흔히 붕어빵에 비유하면 이해가 빠릅니다.

  • 클래스(Class): 붕어빵을 만들기 위한 설계도 혹은 . 객체를 만들어 내는 도구입니다.
  • 객체(Object/Instance): 틀에 반죽을 부어 만들어진 실제 붕어빵. 설계도를 바탕으로 메모리에 실제로 구현된 결과물입니다.

구조체 vs 클래스

  • 구조체: 간단한 데이터의 묶음. 멤버 변수만 선언 가능(함수는 불가능)
  • 클래스: 데이터(변수) 보호와 복잡한 기능(함수)을 포함하는 상위 개념.

3. 객체지향의 4대 핵심 원칙

  1. 캡슐화 (Encapsulation)
    변수(데이터)와 함수(기능)를 하나의 캡슐 안에 넣어 보호합니다. 외부에서 함부로 접근하지 못하게 '자물쇠(접근 제어자)'를 채우는 과정이 포함됩니다.

  2. 추상화 (Abstraction)
    내부의 복잡한 로직은 숨기고, 사용자에게 꼭 필요한 인터페이스(버튼/함수)만 노출하는 것입니다.

  3. 상속 (Inheritance)
    이미 만들어진 부모 클래스의 기능을 그대로 물려받아 새로운 자식 클래스를 만드는 것입니다. (예: 붕어빵 틀을 기반으로 '슈크림' 기능만 추가해 슈크림 붕어빵 틀 만들기)

  4. 다형성 (Polymorphism)
    이름은 같은 함수라도 객체에 따라 다르게 동작하는 성질입니다. (예: '공격' 버튼을 눌렀을 때 전사는 '칼질', 마법사는 '파이어볼')


4. 클래스 구조와 생성자(Constructor)

클래스 이름은 관례적으로 첫 글자를 대문자로 시작합니다 (예: Student).

생성자란?

객체가 생성되는 순간(태어나자마자) 자동으로 호출되는 특수한 함수입니다.

  • 클래스 이름과 동일하며, 반환 타입(int, void 등)이 없습니다.
  • 멤버 변수를 안전하게 초기화하는 역할을 합니다.
    class Student {
    public: // 밖에서 쓰려면 public이 필요해요!
        string name;
        int score;

        // 1. 기본 생성자 (매개변수가 없을 때, 객체를 초기화하는 함수) 
        Student() {
            name = "미등록";
            score = 0;
        }

        // 2. 매개변수가 있는 생성자 (원하는 정보를 넣을 때)
        Student(string n) {
            name = n;
            score = 0;
        }
    };

    // 사용 예시
    Student std1;           // 기본 생성자 호출
    Student std2("철수");    // 매개변수 생성자 호출

비유를 하면
우리가 게임 캐릭터를 새로 만들 때, 레벨은 1이어야 하고 아이템은 초보자 칼 하나는 들고 있어야 합니다.
캐릭터가 태어나자마자(메모리에 올라오자마자) 이런 기본값들을 세팅해 주는 기능이 바로 생성자입니다.

  • 기본 생성자: "도시락 하나 주세요" 하면 미리 정해진 구성(제육볶음, 밥, 김치)으로 딱 나오죠? 이게 기본 생성자입니다.

  • 매개변수가 있는 생성자: "제육볶음 말고 불고기 넣은 도시락으로 주세요"라고 주문하는 거예요. 내가 원하는 정보를 넣어서 객체를 만들 수 있습니다.


5. 정보 은닉과 접근 제어 지시자

객체지향의 핵심은 "데이터(변수)는 숨기고(private), 기능(함수)은 연다(public)"는 것입니다.

  • private: 클래스 내부에서만 접근 가능 (데이터 보호)
  • public: 클래스 외부 어디서든 접근 가능 (인터페이스)

Getter와 Setter

private으로 숨겨진 변수에 안전하게 접근하기 위해 사용하는 함수입니다.

 #include <iostream>
using namespace std; //std를 쓰지 않으면, 출력에 문제 생김
 	
    class Tv {
    private:
        int channel; // 외부에서 직접 수정 불가!

    public:
        // Setter: 값을 검사하며 안전하게 변경
        void setChannel(int ch) {
            if (ch >= 1 && ch <= 999) {
                channel = ch;
            }
        }

        // Getter: 값을 안전하게 읽어옴
        int getChannel() {
            return channel;
        }
    };

6. 전체 코드 예시 (TV 제어)

    #include <iostream>
    using namespace std;

    class Tv {
    // 필드(멤버 변수)를 private으로 설정하여 보호!
    private:
        bool powerOn;
        int channel;
        int volume;

    public:
        // 생성자를 통한 초기화
        Tv() {
            powerOn = false;
            channel = 1;
            volume = 10;
        }
        
		// 외부에서 사용할 수 있는 public 기능(함수)들
        void on() { powerOn = true; }
        void off() { powerOn = false; }
		
        // 직접 변수를 건드리지 않고 '함수'를 통해서만 값을 바꿉니다. (Setter)
        void setChannel(int ch) {
            if (ch >= 1 && ch <= 999) channel = ch;
        }
        
        // 숨겨진 변수 값을 안전하게 읽어옵니다. (Getter)
        int getChannel() { return channel; }

        void setVolume(int vol) {
            if (vol >= 0 && vol <= 100) volume = vol;
        }
        
        int getVolume() { return volume; }
   
   	};

    int main() {
        Tv myTv; // Tv 클래스의 인스턴스(객체) 생성
        
        myTv.on(); // 전원 켜기
        myTv.setChannel(5);  // 채널 설정
   		myTv.setVolume(25);  // 볼륨 설정

    	cout << "현재 채널은 " << myTv.getChannel() << endl;
    	cout << "현재 볼륨은 " << myTv.getVolume() << endl;

    	return 0;
    }

요약: 클래스는 객체를 만들기 위한 대장(설계도)이며, 캡슐화와 생성자를 통해 데이터를 안전하고 편리하게 관리하는 것이 C++ 프로그래밍의 핵심입니다!

profile
Hard Trying

0개의 댓글