IT 프로그래밍/자료구조

[자료구조] 클래스

기술1 2024. 10. 15. 19:46
반응형

C++ 클래스와 추상 데이터 타입

클래스는 사용자 정의 데이터 유형으로, 데이터 멤버와멤버 함수를 가집니다. 데이터 멤버는 데이터를 저장하는 필드이고, 멤버 함수는 이러한 변수를 조작하는 함수입니다. 

 

class Person
{
public:
	string name;
	int age;

	void print()
	{
		cout << "Hi, my name is " << name << "and i am " << age
			<< "years old." << endl;
	}
};

int main()
{
	Person person1;
	person1.name = "Alice";
	person1.age = 30;

	person1.print();

	Person* ptr_person = new Person;
	ptr_person->name = "Bob";
	ptr_person->age = 24;

	ptr_person->print();

	return 0;
}

c언어의 struct와 class는 데이터 멤버의 포함이었지만 c++은 멤버 함수 또한 포함할 수 있습니다. 

 

클래스가 멤버 함수를 가지고 있고 이 멤버 함수또한 데이터처럼 호출을 할 수 있습니다. 

 

그리고 Person 객체를 동적 생성하고 객체의 주소를 저장하는 포인터 변수이기 대문에 포인터 변수를 통해서 객체 안에 있는 멤버를 엑세스할때는 -> 를 통해서 엑세스를 해줍니다.

생성자

class Person
{
public:
	string name;
	int age;

	Person() {}
	Person(string name, int age): name(name), age(age) {}

	void print()
	{
		cout << "Hi my name is" << name << "and I am " << age
			<< "years old" << endl;
	}
};

int main()
{
	Person person1("Alice", 30);
	person1.print();

	Person* ptr_person = new Person("Bob", 24);
	ptr_person->print();

	return 0;
}

 

접근 지정자 : public/private

class Person
{
private:
	string name;
	int age;

public:
	Person() {}
	Person(string name, int age): name(name), age(age) {}

	void print()
	{
		cout << "Hi, my name is " << name << "and I am " << age
			<< "years old." << endl;
	}
};

int main()
{
	Person person1("Alice", 30);
	person1.age = 20; //wrong
	person1.print();

	Person* ptr_person = new Person("Bob", 24);
	ptr_person->name = "Hnery"; //wrong
	ptr_person->print();

	return 0;
}

private는 외부에서 사용할 수 없도록 막습니다. 그래서  int main에서 age와 name을 사용 못하기 때문에 int main에서 사용된 age와 name은 실행이 안되는 오류구문입니다.

 

데이터 타입에 대해 생각해보기

int a;

변수 a의 타입은 int입니다. 이것이 내포하는 의미는?

 

데이터 유형, 크기, 구조

  • a에는 하나의 정수가 저장될 수 있습니다.
  • 변수 a는 메모리에서 4바이트를 차지합니다.
  • 첫 비트는 부호를 표현합니다.

이 데이터가 지원하는 연산과 그 의미

  • a에 다른 정수를 +,-,*,/ 연산을 할 수 있습니다.
  • >> << 연산자로 스트림으로 입출력할 수 있습니다.
  • = 연산자로 복사하고, >, <, == 등으로 비교할 수 있습니다.

데이터 타입이란 데이터의 유형/구조/크기 등과 함게 그 데이터가 지원하는 연산을 정의하는 것입니다.

 

추상 데이터 타입

추상 데이터 타입(ADT)은 사용자의 관점에서 정의된 데이터 타입에 대한 수학적 모델로, 가능한 값, 가능한 연산 및 그 연산의 의미에 의해서 정의됩니다. 

 

예를 들어 스택은 push/pop 연산을 지원하는 리스트(list)이며 하나의 ADT로 볼 수 있습니다. 객체지향언어의 클래스(class)는 ADT를 표현하는데 적합한 도구입니다.

 

 

 

 

 

반응형