전체 글

전체 글

    프랜드 선언

    프랜드 선언

    ▶프랜드 클래스(friend class) C++은 캡슐화의 은닉성으로 접근 지정자들을 제공합니다. public 멤버들은 클래스의 외부에서도 접근이 가능하지만 private나 protected는 멤버에 대한 접근을 제한합니다. 그러나 어떤 경우에는 다른 클래스에서는 말고 친구(friend)에게만 클래스가 외부에 자신의 내부 데이터까지 사용할 수 있도록 허용하고 싶은 경우가 있습니다. 이 때. C++은 friend 키워드를 제공합니다. 선언하는 방법은 아래와 같습니다. class 허용해주는_클래스명 { friend class 허용받는_클래스명; ... }; 특징으로는 4가지가 있습니다. friend 선언은 클래스 내의 어떤 위치도 상관없다. 허용 받는 클래스는 허용해주는 클래스의 모든 멤버를 접근할 수 있다..

    다형성-순수 가상 함수와 추상 클래스

    다형성-순수 가상 함수와 추상 클래스

    ▶순수 가상 함수 2022.08.12 - [C++ 프로그래밍/클래스] - 다형성-가상 함수와 동적 바인딩의 의미 다형성-가상 함수와 동적 바인딩의 의미 가상(virtual) 함수는 실제로는 어떤 함수가 실행될지 결정되기도 전에 미리 사용되었다고 해서 가상이라는 이름을 얻었습니다. 가상 함수는 실행시간 다형성을 구현하는 방법으로, 소프트웨어의 onesside-world.tistory.com 여기서 구현한 그래픽 에디터의 객체들은 화면에 그리는 방법이 각기 다릅니다. 사각형이나 원을 그리는 알고리즘은 각기 다릅니다. 그렇기 때문에 draw() 함수에서 어떤 일을 해야 할지가 명확합니다. 그런데, Shape 부모 클래스는 좀 다릅니다. 모든 자식 클래스들이 draw()라는 동작을 가져야 하므로 부모 클래스에서..

    다형성-가상 함수와 객체의 크기

    다형성-가상 함수와 객체의 크기

    ▶상속에서의 객체 크기 상속을 하면 객체들의 크기는 어떻게 될까요? 모든 자식 클래스의 객체에는 상속받은 부모의 영역이 있습니다. 따라서 자식 클래스의 크기는 부모의 크기에 자신이 추가한 데이터 멤버의 크기가 더해질 것입니다. 자식 클래스의 크기 = 부모 클래스의 크기 + 자신이 추가한 데이터의 크기 여기서 클래스의 멤버 함수들이나 정적 멤버 변수, 함수들은 당연히 다른 공간에 저장되는 건 알 겁니다. ▶가상 함수와 객체의 크기 가상 함수를 사용하기 위해 컴파일러가 정확히 어떻게 동작하는지 우리가 정확히 알 필요는 없습니다. 이것도 정보 은닉의 장접입니다. 가상 함수를 처리하는 방법만 간단히 알아봅시다. 가상 함수(virtual)가 클래스에 하나라도 있으면 컴파일러는 그 클래스에 대해 가상 함수 테이블(..

    다형성-가상 함수와 동적 바인딩의 의미

    다형성-가상 함수와 동적 바인딩의 의미

    가상(virtual) 함수는 실제로는 어떤 함수가 실행될지 결정되기도 전에 미리 사용되었다고 해서 가상이라는 이름을 얻었습니다. 가상 함수는 실행시간 다형성을 구현하는 방법으로, 소프트웨어의 재사용을 위한 중요한 도구입니다. 함수를 가상으로 선언하는 것은 개발자가 컴파일러에게 "나는 어떤 함수가 호출되어야 할지 모르겠으니 함수 결정을 미루어라. 실행시간에 실제로 객체가 만들어지고 난 다음 결정하라"라고 알려주는 것입니다. 2022.08.12 - [C++ 프로그래밍/클래스] - 다형성-상속에서의 형 변환 다형성-상속에서의 형 변환 1. 기본 자료형에 대한 형 변환 형 변환이란 특정한 자료형에 속하는 값을 다른 자료형의 값으로 변환하는 것을 말합니다. 다음은 int 값을 double로 변환하는 형 변환이 이..

    다형성-다형성이란?

    다형성-다형성이란?

    개인적으로다형성이란 객체지향의 꽃이라고 할 수도 있다고 생각합니다. 상속을 완벽하게 하기 위해 다형성을 사용해야하니까요. 다형성(Polymorphism)이란 프로그래밍에서는 다양한 종류의 객체에게 동일한 메시지를 보내더라도 각 객체들이 서로 다르게 동작을 하는 특성을 말합니다. 예를 들어, 동일한 이름의 함수를 호출하더라도 매개변수에 따라 다른 함수가 실행되는 함수 중복(Function Overloading => 보통 오버로딩이라고 부름)도 다형성의 일종입니다. 상속 관계에서 함수 재정의(Function Overriding => 보통 오버라이딩이라고 부름)의도 다형성을 보여주는데, 함수의 이름과 매개변수가 같더라도 메시지를 보내는 객체의 타입에 따라 다른 동작이 가능하도록 허용합니다. 이러한 다형성은 매..

    다형성-상속에서의 형 변환

    다형성-상속에서의 형 변환

    1. 기본 자료형에 대한 형 변환 형 변환이란 특정한 자료형에 속하는 값을 다른 자료형의 값으로 변환하는 것을 말합니다. 다음은 int 값을 double로 변환하는 형 변환이 이루어지는 문장입니다. int x = 10; double y = 10; // 자동 형 변환 int 형 자료가 double로 문제없이 복사되고 컴파일이나 실행에 문제가 없습니다. 만약 반대가 되면 어떨까? 다음 문장을 보면 double y = 3.14; int x = y; // 문제가 있는 형 변환 원인은 자료형의 크기와 관려이 있습니다. 보통 int는 4바이트 double은 8바이트를 사용하는데 4바이트로 8바이트를 표현하기에 부리가 있기 때문에 짤려서 나타납니다. 2. 포인터의 형 변환 포인터에서도 형 변환이 사용됩니다. 그전에 ..

    상속

    상속

    상속이란? 현실의 금수저가 부모에게 많은 재산을 물려받아 금방 안정된 생활을 누릴 수 있고, 이에 비해 흙수저는 물려받은 것이 거의 없어 모든 것을 자신이 노력해서 얻어야 합니다. 상속도 이와 비슷한 개념입니다. 기존에 어떤 클래스가 잘 만들어져 있으면 이를 상속받아 새로운 클래스를 만드는 것입니다. 이때, 상속을 해준 클래스를 부모(parent), 슈퍼(super), 기반(base) 클래스라고 합니다. 상속받아서 만든 새로운 클래스는 자식(child), 서브(sub), 파생(derived) 클래스라고 합니다. 만약 , 부모 클래스가 많은 기능을 갖고 있다면 이를 상속한 자식들은 많은 코드를 넣지 않아도 금방 강력한 기능을 가진 클래스가 됩니다. 금수저 클래스입니다. 이와 반대로 부모 클래스가 빈약하고,..

    누가 함수와 메서드의 차이를 물어보거든 이렇게 답하라

    누가 함수와 메서드의 차이를 물어보거든 이렇게 답하라

    보통 함수라고 부르는 function은 '이름으로 불려지는 특정 코드의 집합'을 의미합니다. 메서드라고 부르는 method는 '특정 객체에 포함된 이름으로 불려지는 특정 코드의 집합'이다. 간단하게 '멤버 함수' == '메서드' 라고 볼 수 있습니다. 함수가 메서드보다 더 큰 범위라고 할 수 있다. 앞으로 메서드는 객체에 포함된 멤버 함수를 바로 떠올리면 됩니다.

    .과 ->의 쓰는 용도

    .과 ->의 쓰는 용도

    둘 다 클래스의 멤버 함수와 멤버 변수에 접근한다는 의미는 동일합니다. 그러나. 연산자는 클래스 인스턴스 객체에 접근하고, ->연산자는 클래스 포인터 객체에 접근한다는 게 다릅니다. 이걸 보고 무슨 소리야 하겠지만 둘은 쓰는 용도의 차이가 명확하기 때문에 이 차이만 알면 쉽습니다. 결론은 동적 생성한 객체에 접근하려면 ->연산자, 아니면. 연산자를 쓴다고 생각하면 됩니다. 처음 프로그램을 시작할 때 미리 크기를 알 수 있으면 좋겠지만, 만약 예를 들어, 게임 플레이 중에 몬스터 나타나야 되거나 소멸되어야 하는 상황이면 프로그램 실행 중 생성되거나 소멸 되는 오브젝트들은 동적 생성하게 됩니다. 그러면 동적생성은 new 연산자로 만들어지는데 new 연산자는 객체의 주소 값을 반환해줍니다. 그렇기 때문에 포인..