클래스

Ryan Ham·2024년 5월 24일
0

C++

목록 보기
13/26

절차 지향(Procedural Oriented) vs 객체 지향(Object Oriented)

CPP 클래스에 대해서 접해 본 사람이라면 encapsulation, polymorphism, inheritance에 대해서 들어보았을 것이다. 지금까지 이 다양한 클래스 기능들을 당연하게 주어진 것처럼 사용하고 있었을 수도 있다.

하지만 C와 같은 절차 지향 프로그램들은 이러한 기능이 들어있지 않다. 예를 들어서 CPP에서는 클래스 안에 멤버 함수를 구현하여서 인스턴스를 생성 후 거기서 그 인스턴스를 통해 멤버 함수를 실행시킬 수 있다. C는 멤버 함수라는 개념이 없기 때문에 따로 그 기능을 하는 함수를 구현하여야 한다.

요즘은 함수형 프로그래밍을 제외하면 Object Oriented 철학을 사용하지 않는 언어를 찾아보기가 힘들다. Object Oriented를 이해하려면 객체를 만들어주는 클래스라는 것의 정체에 대해 알아야 한다.


CPP 클래스의 선언 및 사용


#include <iostream>
#include <string>

using namespace std;

class Person {

private:
	int age;
	string name;
	string job;
	char sex;

public : 
	Person(int _age, string _name, string _job, char _sex) {
		this->age = _age;
		this->name = _name;
		this->job = _job;
		this->sex = _sex;
	}

};

int main() {

	Person person = Person(20, "Bob", "dentist", 'm');

}

CPP 클래스의 은닉성

CPP 클래스는 기본적으로 맴버 변수와 함수들에 대해서 사용자의 접근을 막는다. 왜 그럴까? 이는 우리가 const를 쓰는 이유와 비슷하다. 코드를 협업하는 과정에서 누가 어떤 부분을 바꿀지 모르고 바꾸면 안되는 부분을 건드리면 엄청난 파국을 불러 올 수 있기 때문이다. CPP에는 접근 지정자(Access Specifiers)라는 것이 존재하는데 개방성의 기준에 따라 큰 것부터 public / protected / private로 나열할 수 있다. 대조적으로 CPP의 클래스는 멤버 변수 및 함수들이 default로 private로 설정되어 있는 반면, struct는 public으로 설정되어 있다.

Getter & Setter

CPP의 getter와 setter는 CPP 클래스의 은닉성에 결을 같이 한다. 사용자는 클래스의 private으로 되어 있는 멤버들에 대해 직접 접근이 불가능한데 어떻게


생성자

클래스를 통해 객체를 생성하기 위해서는 "무조건" 생성자가 필요하다. 생성자는 클래스 내부에 구현되어 있는데 신기한 것은 생성자의 이름이랑 클래스의 이름이 같다는 사실이다.

코드를 입력하세요

생성자 Initializer

복사 생성자

소멸자

profile
🏦KAIST EE | 🏦SNU AI(빅데이터 핀테크 전문가 과정) | 📙CryptoHipsters 저자

0개의 댓글