본문 바로가기

Study

[C++] Static Static 전역변수에 선언된 static의 의미는 선언된 파일 내에서만 참조를 허용하겠다는 의미이다. 함수 내에 선언된 static의 의미는 한번만 초기화되고, 지역변수와 달리, 함수를 빠져나가도 소멸되지 않는다. 이러한 static 선언은 공유 변수의 민감도를 낮추기 위해 자주 사용되어 왔다. 특히, static이 선언된 멤버변수는 static 멤버변수, 클래스 변수라고도 한다. 이러한 static 변수는 전역변수처럼 사용도며, 생성된 객체 모두에서 접근이 가능하다. 이러한 static 변수는 생성자에서 초기화 하면 안되는데, 그 이유는 객체가 생성될때마다 해당 static 변수가 할당된 메모리에 그 값이 할당되기 때문이다. 즉, staitc 멤버변수는 어디서든 접근이 가능한 변수이다. 물론, sta.. 더보기
[C++] Friend Friend 한 클래스가 다른 클래스 내부의 private 멤버에 접근하기 위해서 사용하는 방법이다. A와 B 클래스가 있다고 가정할 때, A 클래스가 B 클래스를 대상으로 friend 선언을 하면, B 클래스는 A클래스의 private 멤버에 직접 접근이 가능하다. 단, 역도 성립하기 위해서는 B 클래스가 A 클래스를 대상으로 friend 선언을 해줘야 한다. 또한 함수도 선언이 가능하다. class Girl { private: friend class Boy; ... public: ... } class Boy { private: friend class Girl; ... public: ... } SomeClass { ... public: friend SonmeFunc(...); ... } SomeClas.. 더보기
[C++] Init 초기화 앞선 참조자와 생성자의 내용을 복습해본다면, C++는 다음과 같은 초기화를 지원한다는 것을 할 수 있다. int num = 20 -> int num(20) int &ref = num -> int &ref(num) 즉, 이러한 초기화를 응용해본다면, class 선언 시 class의 객체 또한 복사가 가능하다는 점을 유추할 수 있다. int main(void) { SoSimple sim1(10, 100); SoSimple sim2 = sim1; SoSimple sim3(sim1); } 이러한 별도의 생성자가 존재하는 것이 아닌, 객체를 복제하는 경우의 생성자를 '복사 생성자'라고 부른다. 또한 앞선 생성자와 마찬가지로, 복사 생성자를 정의하지 않으면, 멤버 대 멤버의 복사를 진행한느 디폴트 복사 생성.. 더보기
[C++] Class, Array and this pointer Class, Array and this pointer 객체 또한 배열의 선언이 가능하나, 배열의 선언과정에서는 호출할 생성자를 별도로 명시하지 못한다. 즉, 배열 생성을 위해서는 반드시 생성자가 정의되어 있어야 한다. 배열 선언 시, '객체 배열'과 '객체 포인터 배열'의 차이점을 정확히 이해해야한다. 저장의 대상을 객체로 하고 싶다면 '객체 배열'을 사용하고, 객체의 주소 값으로 할 경우 '객체 포인터 배열'을 사용한다. 맴버함수 내에서는 this라는 이름의 포인터를 사용할 수 있다. 이는, 객체 자신을 가리키는 용도로 사용된다. this는 객체자신의 주소 값을 의미한다. 즉, this 포인터는 그 주소 값과 자료형이 정해져 있지 않은 포인터이다. this는 객체 자신의 변수 접근에도 도움을 준다. 가.. 더보기
[C++] Constructor & Destructor 생성자(Constructor)와 소멸자(Destructor) 생성자는 다음과 같은 특징을 가지고 있다. 클래스의 이름과 함수의 이름이 동일하다. 반환형이 선언되어 있지 않으며, 실제로 반환하지 않는다. 객체 생성시 딱 한번 호출된다. 함수의 일종으로, 오버로딩이 가능하다. 함수의 일종으로, 매개변수에 디폴트 값 설정이 가능하다. 이러한 생성자를 이용하면, 객체 생성과 동시에 초기화가 가능하다. #includes using namespace std; class SimpleClass { private: int num1; int num2; public: SimpleClass() { num1 = 0; num2 = 0; } SimpleClass(int n) { num1 = n; num2 = 0; } SimpleC.. 더보기
[C++] Information Hiding 정보 은닉 프로그래머는, 제한된 방법으로의 접근만을 허용하여 잘못된 값이 젖아되지 않도록 도와야 하고, 실수를 했을 때 실수가 쉽게 발견되어야 한다. 보통 멤버변수를 Private로 선언하고, 해당 변수에 접근하는 함수를 별도로 정의하여 안전한 형태로 멤버변수의 접근을 유도한다. 이러한 접근 함수는 GetXXX/SetXXX로 정의되어 있는데, 이러한 함수를 엑세스 함수(access function)라한다. 이들은 멤버변수를 private로 선언, 클래스 외부에서의 멤버변수 접근을 목적으로 정의되는 함수이다. 맴버함수에 const를 선언할 경우, 해당 함수 내에서는 멤버변수에 저장된 값을 변경하지 않겠다는 말이다. int GetX() const; int GetY() const; void ShowRecInf.. 더보기
[C++] OOP; Object-Oriented Programming OOP; Object-Oriented Programming 설계 원칙 (SOLID) SRP; Single Responsibility Principle; 단일 책임의 원칙 모듈이 변경되는 이유는 한가지여야 하며, 오직 하나의 액터에 대해서만 책임을 져야한다. OCP; Open-Closed Principle; 개방 폐쇄 원칙 확장에 대해 열려있고 수정에 대해서는 닫혀있어야 한다. 새로운 동작 추가가 용이하고, 동작 추가 시 기존 코드에 수저을 가할 필요가 없다. LSP; Liskov Substitution Principle; 리스코프 치환 원칙 하위 입은 상위 타입을 대체할 수 있어야 한다. ISP; Interface Segregation Principle; 인터페이스 분리 원칙 클라이언트의 목적과 용도에 .. 더보기
[C++] Structure C++의 구조체 구조체는 연관 있는 데이터를 묶을 수 있는 문법적 장치로, 하나의 구조체에는 서로 다른 종류의 데이터가 들어갈 수 있다. struct Student { string Name; int sNumber; int level; } C에서의 구조체와 C++의 구조체의 차이점은 다음과 같다. 먼저 C에서는 구조체 변수 선언을 위해서는 struct 키워드를 선언하거나, 구조체 자체에 typedef를 선언하여 별칭을 정의한 뒤 선언해야한다. // C struct Student { string Name; int sNumber; int level; }; int main(void) { struct Student zelda; } -------------------------- typedef struct Stud.. 더보기