경일게임아카데미 프로그래밍반 28기 7일차 수업 (2021. 04. 16)
클래스란?
클래스는 객체라고 생각하면 된다.
클래스를 생성하는 방법 (Visual Studio 기준)
- 본인이 생성한 솔루션 및 프로젝트에서 우클릭 하여 추가를 선택한다음 클래스를 클릭하여 준다.
- 생성하고자 하는 클래스 명을 작성하고 클래스를 생성해준다.
- 클래스를 생성하면 작성한 클래스 명으로 헤더파일에 폴더에 헤더파일과, 소스 파일 폴더에 소스파일이 생성 된다.
예를 들어보자.
사용자는 오늘 날짜인 210416.cpp 라는 소스 파일을 만들고, 위에 클래스를 생성하는 방법을 참고하여 mainGame 이라는 클래스를 만들었다. 그렇다면 소스 파일 폴더 내부에 mainGame.cpp와, 헤더 파일 내부에 mainGame.h 파일이 생성된다.
헤더파일 (mainGame.h)
헤더파일에서는 기본적으로 생성자와 소멸자가 있다.
위 사진에서 주석을 달아놓은 것처럼 생성자는 클래스의 생성과 동시에 자동 실행되며, 소멸자는 클래스가 종료됨과 동시에 자동 실행된다.
그렇다면 헤더 파일에서 위와 같이 함수를 선언하면 사용자는 원하고자 하는 기능을 코드에 어디에 추가하면 좋을까?
답은 mainGame.cpp에 추가해주면 된다. 헤더파일에서는 mainGame() 함수를 단순히 호출만 해줄뿐 해당 기능을 구현하지 않았다. 그러므로 mainGame.cpp 소스 파일 내부에 해당 기능을 추가해 주면 된다.
참고 사항!
pragma once는 무엇인가?
컴파일러에게 해당 헤더 파일이 한번만 빌드되도록 하는 기능을 한다. 왜일까?
정답은 여러곳에서 include 되면 그때마가 각각 정의가 추가되어 중첩되는 경우가 생기기 때문에, 여러번 빌드되는 것을 막기 위해 #pragma once를 사용한다
소스 파일 (mainGame.cpp)
헤더파일에서 생성한 생성자와 소멸자가 무슨 기능을 할지 소스 파일에서 작성한다.
위 사진에서는 간략한 테스트를 위해 생성자와 소멸자에서 문구 출력하도록 추가했다.
당연하게도 .cpp 파일에서는 생성자와 소멸자가 무엇인지 모르기 때문에 #include "mainGame.h"파일을 include 해준다.
참고 사항!
라이브러리를 추가 할 때에는 공용 라이브러리는 < >를 사용하고, 사용자가 만든 라이브러리는 " "를 사용한다.
그러므로 위 사진에서 #include "mainGame.h"는 사용자가 만든 라이브러리이므로 < >가 아닌 " "를 사용해야 한다.
프로그램 실행
그렇다면 프로그램을 실행시켜보자. 210416.cpp 파일 메인함수에 우리가 생성한 클래스를 mg라는 이름으로 만들어 실행해보자. 마찬가지로 210416.cpp 파일에서는 어떤 클래스가 있는지 모르기 때문에 #include "mainGame.h"파일을 include 해준다.
실행 결과는 아래와 같다.
프로그램의 흐름도는 아래와 같다.
실습
지난번에 제작한 빙고게임과 카드게임을 클래스로 선언하여 210416 함수에서 실행시키도록 하자.
단, switch 문을 이용하여 게임을 고를 수 있게 하자.
정적할당과 동적할당
// 정적할당 - 메모리가 스택 영역에 잡힌다
// 컴파일 이전단계에서부터 메모리 공간을 확보하고 들어온다.
// 런타임(실행도중) 중에 삭제가 불가능하다
// 선언방법은 아래와 같다.
mainGame mg2;
// 동적할당 - 메모리가 힙(heap) 영역에 잡힌다.
// 컴파일 이후에 메모리 공간을 대여한다.
// 그렇게 때문에 런타임 중에 삭제가 가능하다.
mainGame* mg3 = new mainGame;
delete mg3;
'학원 > 경일게임아카데미' 카테고리의 다른 글
12. 아홉번째 수업 (0) | 2022.12.12 |
---|---|
11. 여덟번째 수업 (0) | 2022.12.12 |
9. 여섯번째 수업과제 [0을 움직여라 게임 제작] (0) | 2022.12.04 |
8. 여섯번째 수업 (1) | 2022.12.03 |
7. 다섯번째 수업 과제 [카드게임 제작] (0) | 2022.12.02 |