목록분류 전체보기 (106)
도순씨의 코딩일지
🌼 const 객체 1 2 3 const int num = 10; const SoSimple sim(20); cs 변수를 상수화하듯 객체도 상수화 할 수 있습니다. 객체에 const 선언이 붙게 되면, 이 객체를 대상으로는 const 멤버 함수만 호출이 가능합니다. const 선언이 데이터 변경을 허용하지 않기 때문입니다. 예제를 통해서 const 객체의 특성을 확인해 봅시다. ⭐️ ConstObject.cpp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include using namespace std; class SoSimple{ private: int num; public: SoSimple(int n) : num(n) {} SoSimp..
🌼 복사 생성자의 개념 C부터 시작하여 우리는 다음과 같은 방법으로 변수와 참조자를 선언하고 초기화했습니다. 1 2 int num(20); int &ref = num; cs 하지만 C++에서는 이러한 방식으로도 선언과 초기화가 가능합니다. 1 2 int num(20) int &ref(num) cs 두 초기화 방식은 결과적으로 동일합니다. 다음 코드를 살펴봅시다. 1 2 3 4 5 6 7 8 9 10 11 class SoSimple{ private: int num1; int num2; public: SoSimple(int n1, int n2): num1(n1), num2(n2){} void ShowSimleData(){ cout
C++의 구조체 배열은 C언어와 유사한 면이 많습니다. 🌼 객체 배열 객체 기반 배열은 다음과 같은 형태로 선언합니다. 1 SoSimple arr[10]; cs 동적으로 할당하는 경우에는 다음과 같은 형태로 선언합니다. 1 SoSimple * ptrArr = new SoSimple[10] cs 이러한 형태를 선언하면 열 개의 SoSimple 객체가 모여 배열을 구성합니다. 배열 선언을 하는 경우에도 생성자는 호출이 됩니다. 단, 배열의 선언 과정에서는 호출 생성자를 별도로 명시하지 못합니다. 따라서 원하는 값으로 초기화하고 싶다면 초기화의 과정을 별도로 거쳐야 합니다. 다음 예제를 살펴보도록 합시다. ⭐️ ObjArr.cpp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18..
매개변수들을 초기하기 위해서 함수를 정의해주었는데, 매우 번거로운 일이었습니다. 이러한 불편함을 막기 위해서 생성자가 만들어졌습니다. 생성자를 이용하여 객체도 생성과 동시에 초기화할 수 있습니다. 🌼 생성자의 이해 생성자의 이해를 위해서 간단한 클래스 하나를 살펴보도록 합시다. 1 2 3 4 5 6 7 8 9 10 11 class SimpleClass{ private: int num; public: SimpleClass(int n){ // 생성자 num = n; } int GetNum() const{ return num; } }; Colored by Color Scripter cs 위 클래스 정의에서 SimpleClass라는 함수를 확인할 수 있습니다. 이 함수는 클래스와 이름이 동일하고 반환형이 선언되..
캡슐화와 정보은닉은 구분하기 쉽지 않습니다. 먼저 캡슐화가 왜 중요한지 코드를 살펴보며 알아보도록 하겠습니다. ⭐️ Encaps1.cpp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 #include using namespace std; class SinivelCap{ // 콧물 처치용 캡슐 public: void Take() const {cout
정보은닉은 말 그대로 정보를 숨기는 것을 의미합니다. 이렇게 말하면 조금 와닿지 않는 감이 있습니다. 그래서 먼저 예제를 살펴보도록 하겠습니다. ⭐️ 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #include using namespace std; class Point{ public: int x; int y; }; class Rectangle{ public: Point upLeft; Point lowRight; public: void ShowRecInfo(){ cout
C++은 클래스 별로 헤더파일과 소스 파일을 생성하기 때문에 많은 수의 파일이 만들어집니다. 파일분할은 다음과 같은 기준으로 나누어집니다. 💡 ~.h : 클래스의 선언을 담는다 💡 ~.cpp: 클래스의 정의 (멤버함수의 정의)를 담는다 클래스의 선언은 다음과 같습니다. 1 2 3 4 5 6 7 8 9 10 11 class Car{ private: char gamerID[CAR_CONST :: ID_LEN]; int fuelGauge; int curSpeed; public: void InitMembers(char * ID, int fuel); void ShowCarState(); void Accel(); void Break(); }; Colored by Color Scripter cs 위의 코드들은 클래스..
순환 신경망(RNN)은 여러 개의 데이터가 순서대로 입력되었을 때 앞서 입력받은 데이터를 잠시 기억해 놓는 방법이다. 그리고 기억된 데이터가 얼마나 중요한지를 판단하여 별도의 가중치를 줘서 다음 데이터로 넘어간다. 모든 입력값에 대해 이러한 작업을 하기 때문에 계속 순환하는 것처럼 보인다. 따라서 순환 신경망이라고 부른다. 하지만 RNN의 특성상 일반 신경망보다 기울기 소실 문제가 더 많이 발생한다. 이를 해결하기 위해서 만들어진 방법이 LSTM(Long Short Term Memory)이다. 반복되기 직전에 다음 층으로 기억된 값을 넘겨야하는지 결정하는 단계를 추가한다. LSTM을 이용하여 로이터 뉴스 카테고리를 분류해보도록 하자. 케라스를 통해 로이터 뉴스의 데이터를 가져올 수 있다. 1 from k..