본문 바로가기

Programming/C++

(8)
[C++] 상속(Inheritance) 이 포스팅은 윤성우님의 열혈 C++ 프로그래밍 책을 기반으로 작성되었습니다. 이번에는 포스팅을 시작하기 전에 하나의 문제점을 제안하고 그에 대한 답안을 찾아가보고자 한다. Class Student가 있다. 이 Student 클래스의 멤버변수로는 이름, 나이, 학번, 전화번호 등 다양한 정보가 저장되어 있다. 그런데 문제가 생겼다. 교육과정의 문제로 이 Student 클래스를 학부생과 대학원생으로 나눠서 정의를 해야하는 것이다. 그리고 그 학부생과 대학원생에 따라 추가해야하는 멤버변수들이 꽤 생겨난 것이다. 그러면 우리는 여기서 학부생, 즉 Undergraduate 클래스와 대학원생, Graduate 클래스를 재정의해야할 것이다. 하지만 이 두 클래스는 분명 Student라는 공통분모의 멤버변수들이 많이 ..
[C++] Static 정적 변수. 이 포스팅은 윤성우님의 열혈 C++ 프로그래밍 책을 기반으로 작성되었습니다. 오늘은 static에 대해서 한 번 얘기해볼까 합니다. static은 크게는 다음의 용도로 사용됩니다. 1. 전역변수에서 static 선언된 경우. (c/c++) 2. 함수 내에서 static 선언된 경우. (c/c++) 3. 멤버 변수로 static 선언된 경우. (c++) 4. 멤버 함수로 static 선언된 경우. (c++) 5. const static 멤버 먼저 첫 번째의 경우부터 볼게요. 이 경우에는 static이 외부 파일의 접근을 막는 정보은닉의 역할을 합니다. 좀 더 자세하게 말하자면, 전역변수에서 static으로 선언이 되면, 해당 파일 내에서는 자유롭게 참조가 가능하지만 외부 파일에서 해당 파일을 불러와서 사용..
[C++] 복사생성자 / 깊은복사와 얕은복사 이 포스팅은 윤성우님의 열혈 C++ 프로그래밍 책을 기반으로 작성되었습니다. 디폴트 복사생성자의 생성 Polygon이라는 클래스가 있고 Square라는 객체를 생성한 뒤 Square1에 복사하려한다면 어떻게 하면될까? 직관적으로는 Square1 = Square이라고 하면 될 것 같은데.. 실제로 된다. class Polygon { private: int NumOfLine; int NumOfDot; public: Polygon(int line, int dot); ... }; int main(){ Polygon Square(4,4); Polygon Square1=Square; Polygon Square2(Square1); return 0; } 위의 코드는 실제로 대입연산을 하는 것처럼 멤버대멤버 복사가 일어..
[C++] 5. 클래스의 완성 (정보은닉/캡슐화/생성자와 소멸자/클래스와 배열/This 포인터) 이 포스팅은 윤성우님의 열혈 C++ 프로그래밍 책을 기반으로 작성되었습니다. 정보 은닉 앞선 포스팅에서 설명하였듯이, C++부터는 접근제어지시자를 통해서 정보를 외부로부터 보호할 수 있게 되었고 이와 같이 멤버 변수의 외부접근을 막는 프로그래밍을 정보은닉이라고 한다. 이를 통해 우리는 객체 내의 멤버변수가 실수로나 아니면 외부 해커들로부터 조작되는 것을 막을 수 있다. 만약 private:이나 protected:를 통해서 정보은닉을 하였다면, 이와 관련하여 접근하기 위한 접근 함수들을 생성하게 될텐데 이를 잘 작성해주는 것이 정보은닉의 핵심이며, 한번만 잘 정의되면 잘못된 접근은 대부분 차단할 수 있다고 볼 수 있다. 또한 이러한 멤버함수들을 const로 선언함으로써, 해당 함수 내에서는 멤버변수의 값을..
[C++] 4. 클래스 맛보기 / 객체지향 프로그래밍 (class, OOP) 이 포스팅은 윤성우님의 열혈 C++ 프로그래밍 책을 기반으로 작성되었습니다. 클래스 도입의 핵심은 기존 C에서 struct 구조체에서 data들을 따로 모아 관리를 했다면 C++에서는 object를 중심으로 관련 있는 데이터와 함수들을 class라는 개념으로 묶는다는 것이다. 물론 여전히 C++에서도 C의 거의 모든 기능을 지원하기 때문에 struct를 이용할 수 있지만, 클래스 개념의 도입이 C에서 C++로의 확장의 핵심임을 누구도 부정할 수 없을 것이다. 우선 먼저 구조체 struct 사용법을 간단히 보고 class로 넘어가자. C++에서는 다음처럼 struct에서도 함수를 포함하는 것을 지원하고 있다. struct Student { int age; int grade; char name[]; ... ..
[C++] 3. 메모리관리 / 동적 할당 new & delete (malloc/free in C) 이 포스팅은 윤성우님의 열혈 C++ 프로그래밍 책을 기반으로 작성되었습니다. 메모리관리와 동적할당은 C++에서 매우 중요한 개념이다. 어떻게 보면 이 메모리관리를 효율적으로 잘하는 코드를 짜는 사람이 진정 프로그래밍을 잘하는 사람일 것이다. 하지만 우리는 C나 C++이 아닌 파이썬에서는 이 개념을 쉽게 간과하고 있다. 이유는 간단하다. 파이썬은 C로 만들어진 프로그래밍 언어이며, 개발자들의 효율을 위해 직접 레퍼런스 카운트와 가비지 콜렉션을 이용하여 메모리를 생성 및 해제하며 스스로 메모리를 관리해주기 때문이다. 때문에 파이썬으로 만들어진 프로그램들도 어떻게 코드를 이해하고 짜느냐에 따라 효율이 몇십프로까지 향상될 수 있다. 결론은 메모리관리는 아무리 강조해도 지나치지 않다! 그럼 이제 한번 포스팅을 시..
[C++] 2. const / 메모리 공간 / Reference 참조자 / 함수에서의 참조(Reference in function) 이 포스팅은 윤성우님의 열혈 C++ 프로그래밍 책을 기반으로 작성되었습니다. 먼저 시작 전에 헷갈리거나 중요한 개념을 몇개 잡고 시작해보고자 한다. Const는 어떤 의미를 가지는가? const는 말 그대로 상수화이다. 이렇게 보면 굉장히 쉬운 개념 같지만 쓰임새가 다양하면서 사람들에게 혼란을 주기도 하는데, 다음과 같이 깔끔하게 정리할 수 있다. const int num=10; //num이라는 변수는 10을 값으로 가지며 이를 변경할 수 없다. const int *ptr = # //ptr포인터는 변수 num을 가리키며 이 ptr을 이용해서 가리키는 변수의 값을 변경할 수 없다. int * const ptr = # //ptr포인터는 변수 num을 가리키며 이 ptr이 가리키는 변수를 변경할..
[C++] 1. 이름공간(Namespace), 인라인 함수(Inline function) 이 포스팅은 윤성우님의 열혈 C++ 프로그래밍 책을 기반으로 작성되었습니다. 유튜버 포프님의 영상을 보고 unmanaged 언어의 중요성을 느끼고, 이제부터 학부 초반에 배웠던 객체지향프로그래밍과 데이터구조의 기억을 되살려서 한번 C++을 공부해보고자 한다. 앞으로의 포스팅은 순전히 나를 위한, 내가 모르는 것들을 기반으로 기록하는 형태로 작성될 예정이다. 윤성우님은 C를 안다는 가정하에 C++책을 작성해나가셨고, 나는 C를 본 적이 없지만. 이전에 C++경험이 있고 파이썬을 계속 공부를 했으니 어느정도 괜찮지 않을까라는 믿음에서 출발해본다. Namespace란 무엇일까? A사 B사가 함께 개발 콜라보를 진행한다고 했을 때, 서로 분담을 한 후 만나서 합치려고 보니 함수의 이름이 양쪽이 똑같은 게 많다고..