C++ Chapter 8.1 : 객체 지향 프로그래밍과 클래스

Date:     Updated:

카테고리:

태그:

인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!


chapter 8. 객체 지향의 기초 : 객체 지향 프로그래밍과 클래스

🔔 클래스와 객체

image

클래스 (Class)

클래스 : 비슷한 데이터(멤버 변수), 기능(멤버 함수)들을 묶어 그룹화 한 것을 클래스라고 한다.

친구라는 클래스가 있다면 친구의 공통적인 특성을 나타내는 데이터기능이 있을 것이다. 데이터라면 친구가 가지는 공통적인 특성, 즉 이름, 주소, 나이, 키, 몸무게 등이 있을 테고 기능이라면 자기 소개하기, 전화 걸기 등등 이런게 있을 것이다. 그런 공통적인 데이터와 기능들을 모아 추상화 한 것을 클래스라고 한다. 클래스는 추상화 해놓은 것이고 아직 구체화 되어 메모리 상에 실존하는 것이 아니기 때문에 주소를 찍어볼 수 없다.

객체 (Object)

객체 : 이 클래스를 마치 틀로 찍어내어져서 메모리 상에 실존하게 한 것

클래스가 붕어빵 틀이라면 객체는 붕어빵 틀로 찍어내는 각각의 독립적인 붕어빵들이다. 친구 클래스에서 “레이첼”, “모니카”, “챈들러”, “피비”라는 실존하는 객체를 찍어낼 수 있다. 객체마다 각각의 데이터 값은 모두 다르다. 친구들 마다 이름, 키, 나이가 다 다르듯이! 또한 각 객체는 서로 독립적이다. 객체는 메모리 상에 실존하는 것이므로 메모리 주소를 찍어볼 수 잇다.


🔔 클래스를 사용하는 이유

구조체와 마찬가지로 함수 사용시 매개변수를 많이 넘겨줄 필요가 없다. 객체를 생성한 후 클래스에 묶여있던 그 함수를 호출하면 객체 각각의 멤버 변수를 그대로 사용할 수 있기 때문에 함수에 매개변수를 많이 넘길 필요가 없다.

클래스 & 객체를 쓰지 않을 떈 다음과 같이 코딩했어야 했는데

void print(const string &name, const string &address,
	const int &age, const double &height, const double &weight)
{
	cout << name << " " << address << " " << age << " " << height << " "
		<< weight << endl;
}

int main()
{
	print("Rachel", "Seoul", 2, 30, 10);  // 매개변수 많~~~다 
	return 0;
}

print 함수를 Friend 라는 이름의 클래스에 넣어주면 매개변수가 많이 필요 없다. 멤버 변수들을 그대로 가져와 사용하면 되니까! 아래와 같이 훨씬 깔끔해진다.

class Friend
{
public:
	string _name;
	string _address;
	int _age;
	double _height;
	double _weight;

	void print()
	{
		cout << _name << " " << _address << " " << _age << " " << _height << " "
			<< _weight << endl;
	}
};


int main()
{
	Friend rachel;

    rachel.name = "Rachel";
    rachel.name = "Seoul";
    rachel.name = 2;
    rachel.name = 30;
    rachel.name = 10;


	rachel.print();   // 깔끔! 

	return 0;
}


🔔 클래스와 구조체의 차이점

  • 둘 다 공통된, 연관된 것들을 묶어놓은 틀이라는 점에서 비슷하지만
  • Structure
    • 주로 데이터(멤버 변수)만 넣는다.
    • C++에서는 구조체에도 함수를 넣을 수 있긴 하지만 C에서는 안된다.
  • Class
    • 접근 지정자를 가진다.
      • public, private 같이 멤버 변수와 함수에 접근 가능 정도를 설정할 수 있다.
    • 데이터(멤버변수)와 기능(멤버함수)을 가진다.


🔔 Java 와 다른점

Java 에선 객체 생성시 new를 썼어야 했는데 C++의 경우에는 매개변수 없는 기본 생성자를 소환한다면 그냥 Friend f; 이렇게만 써도 객체 생성이 된다. new가 없어서 헷갈렸음(은 내 얘기)



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Cpp 카테고리 내 다른 글 보러가기

댓글 남기기