반응형

과거 안드로이드 스튜디오에서 java로 앱 개발할 때 생성자를 생성해줘야 한다는 말이 기억나는데 이번에 와서 제대로 배우게 되었다. (제대로 알려준다고 해서 내가 제대로 아는 것은 아니지만...)

그리고 인강은 아니지만 [이 동영상]을 보고 하루동안 공부했다. 아직은 잘 모르지만 C++는 C랑 거의 비슷한 것 같은 느낌이다.

 


 

*Class

C언어에서 배웠던 structure가 확장되어 Class로 변했다. OOP(Object Oriented Programming, 객체지향프로그래밍)의 꽃이라고 할 수 있지 않을까 싶다. OOP 언어 중 하나인 자바와 파이썬을 수박 겉핥기식으로 공부했었는데, 부모 클래스로부터 많은 좋은 함수들을 받아오면서 코딩이 조금 편해졌다. 하지만 이런 점에서 나쁜 점들도 있다고 알고 있는데, 이는 쓸데 없는 함수들까지 가져오게 되면서 프로그램이 무거워진다는 것이라고 한다. 아무튼 편하긴 하다.

 "Class가 어떤 것이다"라고 설명하기 보다 아래의 코드를 통해 예제를 보면 조금 더 빠른 이해가 될 것 같다.

#include <iostream>
#include <string>
using namespace std;

class Book {
	public:
		string title;
		string author;
		int pages;
		
};

int main() {
	Book book1;
	book1.title = "Harry Potter";
	book1.author = "JK Rowling";
	book1.pages = 500;

	cout << book1.title << "\n" << book1.author << "\n" << book1.pages;
}

 먼저 Book이라는 클래스를 통해서 title, author, pages를 public으로 선언해준다. 그리고 메인함수에서 book1에 대한 title과 author, 그리고 pages를 선언해주고, 마지막으로 출력한다. 이게 다다. 

 

 또 다른 예로 우리는 기존에 main함수에서 int age;라는 형식으로 나이를 입력받고는 했었다. 그러나 왜 꼭 나이만 입력받을 수 있어야하는 것인가? 나는 int 대신에 book이라는 것을 만들어줌으로 책과 관련된 변수도 선언해주고 싶은데? 이러면 위의 class를 사용하면 좋다.

 

 Class명에서 제일 첫 글자는 대문자로 사용한다. 그리고 main함수에서 해당 클래스로 만든 변수의 첫글자는 그냥 소문자로 해주면 된다.

 

자 그래도 나는 여기서 불편함을 느낀다.

book1.title~~~, book1.author~~~언제 이렇게 다 선언해주나?(생각하면 할수록 우리의 프로그래머들은 정말 귀찮은 것을 싫어한다.)

 

그래서 바로 생성자라는 개념이 나오게 된다. 

 

또 다시 예제 코드를 보면서 이해해 보자.

 

#include <iostream>
#include <string>
#include <cmath>
using namespace std;

class Book {
	public :
		string title;
		string author;
		int pages;
		Book(string aTitle, string aAuthor, int aPages) {//a stands for agument
			title = aTitle;
			author = aAuthor;
			pages = aPages;
		}//Constructor를 사용하면 이런 장점이 있다. 일일히 다 만들어주지 않아도됨.
		//예를 들면 원래는 Book book1이렇게 만들어주고 book1.author = "JK~"이렇게 해줘야 했었는데
		//위에처럼만 해준다면 Book book1("Harry Potter", "JK Rowling", 500); 이렇게 해줘도 된다는거
		//코드가 굉장히 많이 줄어들게 된다.

		Book() {
			title = "no title";
			author = "no author";
			pages = 0;
		}
};

int main() {
	Book book1("Harry Potter", "JK Rowling", 500);
	Book book2("Lord of the Rings", "Tolkein", 400);

	cout << book1.title;

	Book book3;

	cout << book3.title;

	return 0;
}

Book이라는 클래스 안에 또 다시 Book이라는 constructor(생성자)를 생성해주었다. 

 

굳이 왜 귀찮게 이렇게 해주냐하면 이렇게 한 번만 선언해주면 main함수에서 선언할 때 굉장히 편리하기 때문이다

 

위의 방법대로 하면 쉽게 선언할 수 있으니 앞으로 많이 쓰일 것 같다.

반응형

+ Recent posts