본문 바로가기

언어/C++41

[C++ 기본 공부정리] 15-2. OOP 캡슐화 - static, const 멤버 공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다. 틀린 부분에 대한 지적은 감사합니다. 1. 정적(static) 멤버 변수 static(정적) 멤버 변수를 사용할 경우 기존의 멤버 변수와는 다르게 동작합니다. 일반적인 멤버 변수의 경우 인스턴스화를 거쳐 객체를 만들경우 해당 클래스를 통해 만든 여러 객체마다 멤버 변수의 메모리가 각자 할당되어 서로 영향을 주지 않지만 static 멤버 변수의 경우 해당 클래스를 통해 만든 모든 객체가 동일한 메모리를 공유하기 때문에 어떤 객체에서 static 멤버 변수의 값을 변경한다면 다른 객체에서도 같이 변경된다. 즉, 클래스 내의 전역변수라고 생각하면 된다. 문법) class 클래스명{ static 변수타입 변수명; }; static 멤버 변수의.. 2020. 1. 4.
[C++ 기본 공부정리] 15-1. OOP 캡슐화 - 프렌드(friend) 공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다. 틀린 부분에 대한 지적은 감사합니다. 공통의 속성이나 기능, 행동 등을 캡슐에 보관하는 것처럼 하나의 클래스로 묶는 것이 캡슐화라고 앞에서 정리했다. 또한 캡슐화에 속한 개념인 정보은닉을 수행하기 위해 접근 제어자를 사용하여 외부에서 접근할수 있는 클래스의 데이터를 제한하였다. 이번에 정리할 프렌드(friend) 키워드는 접근제어자에 관한 키워드이다. 1. friend 란? private 나 protected로 선언된 객체의 멤버에는 외부에서 직접적인 접근이 불가능하고 해당 객체의 public 멤버함수를 통해서만 접근할 수 있다. 만약 private 멤버에 접근해야 하는 경우가 생겨 그때마다 매번 새로운 public 멤버 함수를 생성해.. 2020. 1. 3.
[C++ 기본 공부정리] 14-6. OOP - 연산자 오버로딩(operator overloading) 공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다. 틀린 부분에 대한 지적은 감사합니다. 1. 연산자 오버로딩(operator overloading)이란? C++에서 함수의 오버로딩에 대해 정리했었다. 동일한 이름의 함수에 매개변수의 개수, 타입 등을 다르게 하여 여러 개를 정의할 수 있도록 해주는 것이었다. 이 오버 로딩이 연산자에도 적용되어 하나의 연산자를 다른 기능도 사용할 수 있도록 연산자를 사용자 정의 클래스로 사용한다. 다음과 같은 연산자 이외의 모든 연산자는 전역 함수 또는 클래스로 재정의 가능하다. ① :: 범위 지정 연산자 ② . 멤버 참조 연산자 ③ .* 멤버 포인터 연산자 ④ ? 삼항 연산자 ⑤ # 전처리기 변환 ⑥ ## 전처리기 연결 멤버 함수로만 오버로딩 가능한 .. 2020. 1. 2.
[C++ 기본 공부정리] 14-5. OOP - 소멸자(destructor) 공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다. 틀린 부분에 대한 지적은 감사합니다. 객체가 생성될 때 객체의 초기화를 위해 생성자를 사용하였다. 그렇다면 객체의 사용이 끝나서 객체가 소멸될 때 반대의 역할을 수행할 멤버 함수가 필요하다. 이 역할을 수행하는 것이 소멸자(destructor)이다. 1. 소멸자(destructor) 생성자가 객체가 생성될때 컴파일러가 자동으로 호출하는 함수라면 소멸자는 객체가 소멸될 때 객체를 정리하기 위해 자동으로 호출되는 함수이다. 주로 동적할당을 통해 할당받은 메모리를 반환하거나 열어 놓은 파일을 닫는 등 마무리 작업이 필요한 경우 소멸자를 생성한다. 문법) class 클래스명{ ~클래스명() }; 생성자 처럼 클래스명과 같은 이름을 가지며 이름.. 2020. 1. 1.
[C++ 기본 공부정리] 14-4. OOP - 생성자(constructor) 공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다. 틀린 부분에 대한 지적은 감사합니다. 1. 생성자(constructor) 클래스를 정의한 후 클래스 객체를 생성하게 되면 메모리에 할당된다. 이때 클래스의 멤버 변수는 초기화되지 않은 상태이므로 사용할 수 없다. 일일이 멤버 변수에 접근하여 초기화 후 사용해도 되지만 만약 private처럼 외부 접근이 불가능한 상태라면 불가능하고 public설정이 된 멤버 함수를 이용하여 초기화해야 할 것이다. 이럴 경우에는 객체를 사용하기 전에 무조건 해당 함수를 실행하고 객체를 사용해야 한다. 따라서 C++에서는 객체의 생성과 동시에 멤버 변수를 초기화해주는 멤버 함수인 생성자(constructor)를 제공한다. 생성자는 C++에서 제공하는 멤버 .. 2019. 12. 30.
[C++ 기본 공부정리] 14-3. OOP - this 포인터 공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다. 틀린 부분에 대한 지적은 감사합니다. this 포인터는 class의 특징 때문에 등장한 포인터이다. 동일 클래스를 이용해 여러개의 인스턴스가 생성될 때 멤버 변수의 경우 각각 메모리를 할당받아 동작하지만 멤버 함수의 경우 메모리 공간을 공유하기 때문에 이를 구분하기 위해 사용된다. 예를 들어 Test라는 클래스가 존재해서 test1, test2라는 두개의 클래스를 생성했다고 하면 멤버변수 num은 test1, test2 각각 독립된 메모리를 할당받지만 멤버 함수 printNum은 메모리 주소를 공유하고 있기 때문에 printNum을 호출할 경우 어떤 객체에서 호출하였는지 알기 힘들다. 이러한 문제를 해결하기 위해 등장한 것이 this .. 2019. 12. 29.