<\n", this->name); this->isStudying = true; // 사후 조건 : isStudying = true } void TakeRest() { printf("%s 힝~\n", name); } // 등교한다. -> 집에서 학원으로 오는 거니까 학원에 있을 때는 등교 한다는 건 말이 안됨. void GoToSchool() { // 사전 조건 : 학원이면 안된다. if (this->isAtHome == false) { return; } printf("%s 등교중 ><\n", this->name); this->isAtHome = false; } // 잔다 -> 잠을 자는 건 집에서만 잔다. void Sleep() { // 사전 조건 : 집이어야 한다. if (this->isAtHome == false) { return; } printf("%s 잘꼬얌\n", this->name); this->isSleeping = true; } voi"> <\n", this->name); this->isStudying = true; // 사후 조건 : isStudying = true } void TakeRest() { printf("%s 힝~\n", name); } // 등교한다. -> 집에서 학원으로 오는 거니까 학원에 있을 때는 등교 한다는 건 말이 안됨. void GoToSchool() { // 사전 조건 : 학원이면 안된다. if (this->isAtHome == false) { return; } printf("%s 등교중 ><\n", this->name); this->isAtHome = false; } // 잔다 -> 잠을 자는 건 집에서만 잔다. void Sleep() { // 사전 조건 : 집이어야 한다. if (this->isAtHome == false) { return; } printf("%s 잘꼬얌\n", this->name); this->isSleeping = true; } voi"> <\n", this->name); this->isStudying = true; // 사후 조건 : isStudying = true } void TakeRest() { printf("%s 힝~\n", name); } // 등교한다. -> 집에서 학원으로 오는 거니까 학원에 있을 때는 등교 한다는 건 말이 안됨. void GoToSchool() { // 사전 조건 : 학원이면 안된다. if (this->isAtHome == false) { return; } printf("%s 등교중 ><\n", this->name); this->isAtHome = false; } // 잔다 -> 잠을 자는 건 집에서만 잔다. void Sleep() { // 사전 조건 : 집이어야 한다. if (this->isAtHome == false) { return; } printf("%s 잘꼬얌\n", this->name); this->isSleeping = true; } voi">
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//데이터와 데이터를 다루는 알고리즘 분리

// 캡슐화 : 데이터랑 알고리즘을 같이 작성
// 추상화 : 세부 구현을 숨기고, 사용하기 위한 일반적인 인터페이스를 정의

struct Student
{
public:
	// 초기화하는 함수가 필요하다.
	Student(const char* name)
	{
		this->name = name;
	}

	// 공부한다.	-> 잠에서 깨어 있어야 하고, 장소는 어디에서나, 밥 먹을 땐 안함.
	void Study()
	{
		// 사전 조건 : 잠에서 꺠어 있어야 하고, 밥먹고 있지 말아야 한다.
		if (this->isSleeping == true || this->isEating == true)
		{
			return;
		}

		printf("%s 공부중 ><\\n", this->name);
		this->isStudying = true;

		// 사후 조건 : isStudying = true
	}
	void TakeRest()
	{
		printf("%s 힝~\\n", name);
	}

	// 등교한다.	-> 집에서 학원으로 오는 거니까 학원에 있을 때는 등교 한다는 건 말이 안됨.
	void GoToSchool()
	{
		// 사전 조건 : 학원이면 안된다.
		if (this->isAtHome == false)
		{
			return;
		}

		printf("%s 등교중 ><\\n", this->name);
		this->isAtHome = false;
	}

	// 잔다			-> 잠을 자는 건 집에서만 잔다.
	void Sleep()
	{
		// 사전 조건 : 집이어야 한다.
		if (this->isAtHome == false)
		{
			return;
		}

		printf("%s 잘꼬얌\\n", this->name);
		this->isSleeping = true;
	}

	void Wakeup()
	{
		printf("%s 헤으응 ><\\n", name);
	}

	// 하교한다.	-> 학원에서 집을 가는 거니까 집에 이미 도착했을 때는 하교한다는 건 말이 안됨.
	void GoHome()
	{
		if (this->isAtHome == true)
		{
			return;
		}

		printf("%s 힘들어썽 힝 ㅜ\\n", this->name);
		this->isAtHome = true;

	}

	// 먹는다.		-> 집에서는 학원에서는 쌉가능
	void Eat(const char* food)
	{
		printf("아 %s 살찌는뎅 ㅜ 조금만 먹을게. (우걱우걱 소리를 내며 %s를 먹는다.)\\n", this->name, food);
		this->isEating = true;
	}

private:
	const char* name = NULL;
	bool isAtHome = false;
	bool isSleeping = false;
	bool isEating = false;
	bool isStudying = false;

};

int main()
{
	Student babyWoojin("아기우진");

	babyWoojin.Sleep();
	babyWoojin.Wakeup();

	babyWoojin.GoToSchool();

	babyWoojin.Study();
	babyWoojin.TakeRest();

	babyWoojin.GoHome();
	babyWoojin.GoToSchool();

	babyWoojin.Eat("라면");

}