본문 바로가기

728x90

C++

[27] C++을 마치며... 템플릿 클래스를 공부하는 것을 마지막으로 C++을 공부를 마쳤습니다. 연산자 오버로드나 스트림에 관한 개념들도 있었지만, 현업에 있으신 분에게 여쭤보니 자주 사용하는 개념은 아니라고 하셔서 일단은 넘어가기로 했습니다. 혹시라도 나중에 공부를 하다가 필요하거나, 시간이 남으면 다시 돌아와 공부를 하도록 할 예정입니다. C++을 공부하기에 앞서 C를 공부했었고, C++을 배우면서 비슷한 개념이 많았기 때문에 금방 할 수 있었던 것 같습니다. 유니티에서 스크립트를 만질 때, 다른 스크립트에서 정의했던 무언가를 스크립트에서 이용하는 것이 헷갈리고, 클래스에 대한 개념이 없었기 때문에, 왜 이렇게 쓰는 것이고, 마치 마음대로 코딩하는 것처럼 느껴져서 어려움이 많았는데 확실히 클래스에 대한 개념을 짚고 넘어가니(그.. 더보기
[26] 클래스 템플릿 클래스 템플릿 앞서 설명했었던 함수 템플릿 처럼 클래스를 찍어내듯 생성하는 기능입니다. 템플릿 인수를 전달해 해당 타입을 다루는 클래스와 그 객체를 생성할 수 있습니다. 클래스 템플릿 사용하기 클래스 템플릿을 사용하기 위해 클래스 앞에 template 를 붙입니다. 이때, 전달 받은 타입으로 지정할 멤버들은 타입에 T를 붙입니다. 클래스 템플릿의 멤버 함수는 정의할 때 "클래스명"와 해결연산자를 붙여줍니다. 위의 결과처럼 전달된 타입에 따라 클래스가 만들어져 객체가 잘 생성된 것을 알 수 있습니다. 표준 템플릿 라이브러리 아래에서는 C++코딩을 좀 더 유연하게 만들어 줄 수 있는 라이브러리에 대해 간략하게 설명하고 넘어가겠습니다. C++의 표준 아리브러리에는 다수의 클래스 템플릿과 함수 템플릿이 마련되어.. 더보기
[25] 클래스 메모리 확보 & 해제 소멸자 클래스의 객체가 소멸될 때 자동으로 호출되는 함수입니다. 따라서, 객체가 소멸 시 실행되야 할 코드를 작성합니다. 소멸자는 인수와 리턴값이 없기 때문에, 오버로드를 할 수 없습니다. 클래스를 동적으로 메모리 확보를 하면 객체가 사라질 때 메모리를 해제해 줘야 합니다. 이때, 소멸자를 사용해서 객체의 소멸과 동시에 확보했던 메모리를 해제합니다. 소멸자 사용 방법 위와 같이 소멸자를 사용하면 객체가 소멸되는 순간에 소멸자가 호출되어 내용이 실행됩니다. 동적 메모리 확보 및 소멸자를 이용한 해제 이렇게 하면, 객체가 생성되면서 메모리를 동적으로 확보하고, 객체가 소멸하면서 메모리를 해제합니다. 객체가 소멸하는 시점은 언제일까? 소멸자는 객체가 소멸되면 호출되는 함수라고 했습니다. 그러면, 객체가 소멸하.. 더보기
[24] 예외 처리 예외처리 프로그램을 실행 시 발생하는 여러 가지 에러를 처리하는 기능을 말합니다. 예외처리 방법 먼저, try와 catch라는 블록이 필요하고, 에러가 발생할 수 있는 코드를 try안에서 실행시킵니다. 그다음, 에러로 처리할 경우를 throw 키워드를 사용해서 catch에 전달하고, catch는 인수의 타입과 던져진 숫자 또는 문자열이 타입이 맞는 경우 catch안에 있는 코드를 실행합니다. 여러 타입의 예외처리 throw를 할 때 타입이 다양한 경우 그에 맞는 타입을 가진 catch블록을 여러 개 작성함으로써, 세부적인 에러 처리를 할 수 있습니다. 함수를 이용한 예외처리 try, catch블록을 함수 안에 작성해서 try에서 함수를 실행시킴으로써 예외 처리를 할 수도 있습니다. 이렇게 코드를 함수로 .. 더보기
[23] 클래스 계층 클래스의 계층화 파생 클래스는 또 다른 파생크래스에서 상속을 받을 수 있습니다. 이렇게 가지를 계속 뻗어나가는 것을 클래스의 계층화라고 합니다. 직접 기본 클래스 파생 클래스의 계층화가 진행될 때, 직속으로 상속을 하는 기본 클래스를 말합니다. 간접 기본 클래스 파생 클래스의 기본 클래스의 기본 클래스를 말합니다. 다시 말해 기본 클래스로 상속을 한 클래스를 다시 상속하면, 처음 클래스가 마지막 파생한 클래스의 간접 기본 클래스입니다. 다중상속 파생 클래스가 한 번에 여러 기본 클래스를 상속 받는 것을 말합니다. 다중상속하기 다중 상속을 받는 방법은 아래와 같습니다. 두 기본 클래스를 적어서 상속합니다. 상속 받은 기본 클래스가 같은 이름의 함수를 가진 경우 모호성 해결 위에서 설명 했듯이 여러 개의 클.. 더보기
[22] 추상 클래스 순수 가상 함수 가상 함수의 끝을 다음과 같이 만드는 것입니다. 추상 클래스 순수 가상 함수를 갖고 있는 클래스를 말합니다. 추상 클래스는 본체가 없으며, 객체를 생성할 수도 없습니다. 하지만, 추상 클래스의 파생 클래스는 객체를 생성할 수 있습니다. 추상 클래스의 객체를 생성하려고 하면 오류가 발생합니다. 추상 클래스 사용이유 추상 클래스를 사용하면 반드시 파생 클래스에서 가상 함수의 정의를 해줘야 합니다. 이렇게 강제한 덕분에 함수호출 코드를 오류없이 하나로 통합해서 관리할 수 있게 됩니다. 이렇게 추상 클래스를 사용하면 이해하기 쉬운 코드를 만들 수 있습니다. 실시간 형식 정보 RRTI(RunTime Type Information)이라고 합니다. C++컴파일러에 포함된 기능으로, 런타임 시 객체의 .. 더보기
[21] 가상함수 오버라이드 파생 클래스에서 기본 클래스에 있는 함수와 이름, 인수 개수, 타입이 값은 함수를 정의하는 것을 말합니다. 이렇게 오버라이드를 한 뒤, 함수를 호출하면 기본 클래스가 아닌 파생 클래스의 멤버 함수가 호출됩니다. 클래스가 파생되면서 필요한 내용이 추가되고, 그에 맞는 함수의 필요성이 생깁니다. 같은 이름과 형식의 함수를 정의해서 사용하면 깔끔한 코드를 작성할 수 있고, 좀 더 직관적이기 때문에 오버라이드가 필요합니다. 기본 클래스형 포인터 기본 클래스형 포인터를 사용해 기본 클래스 객체 뿐만 아니라 파생 클래스 객체도 가리킬 수 있습니다. 이렇게 해서 함수를 호출하면, 포인터가 파생 클래스의 객체를 가리키고 있음에도 기본 클래스의 멤버함수가 호출됩니다. 이런 방식은 멤버 함수를 다룰때 직관적이지.. 더보기
[20] 상속 상속 새로 확장되는 클래스가 기존 클래스의 멤버를 물려받는 것을 말합니다. 이렇게 상속하는 행위를 "클래스를 파생한다."라고 합니다. 기본 클래스 상속을 다른 클래스에게 하는 클래스를 말합니다. 파생 클래스 다른 클래스로부터 상속을 받는 클래스를 말합니다. 파생 클래스 선언 클래스를 파생하는 방법은 아래와 같습니다. 이렇게 하면, Herbivore클래스는 Animal 클래스의 멤버를 상속받아서 자신의 멤버처럼 사용할 수 있습니다. 파생 클래스 객체 생성 파생 클래스의 객체를 생성하는 방법은 일반 클래스의 객체를 생성하는 것처럼 생성합니다. 위의 이미지처럼 파생 클래스에서도 기본 클래스의 멤버를 이용할 수 있습니다. 파생 클래스 객체 생성시 호출되는 기본 클래스 생성자 선택하기 위에서 클래스 Herbivo.. 더보기

728x90