전체 글 219

[강의] 12월 30일 수업정리

오늘은 디자인 패턴에 대한 수업을 들었다. 1. 디자인 패턴 1.1 정의 디자인 패턴은 개발하면서 발생하는 반복적인 문제들을 어떻게 해결할 것인지에 대한 해결 방안 중 모범 사례이다.디자인 패턴은 객체 지향 4개 특성 (캡슐화, 상속, 추상화, 다형성)과 설계 원칙(SOLID)을 기반이다.간단히 말하면, 클래스를 설게 할 때 참고할 수 있는 구조적 예시이다.하지만 우리 C++의 경우,  일반적인 디자인 패턴을 가지고 오면 메모리 누수가 발생하기에 프로그래머가 수동으로 메모리 누수를 잡아야 한다.  1.2 스트래티지 패턴 vs 스테이트 패턴 스트래티지 패턴정의: 알고리즘을 캡슐화하여 실행 중에 교체할 수 있도록 설계하는 패턴.특징: 외부에서 알고리즘(전략)을 선택하고 변경합니다.사용 예: 사용자가 직접 무..

C++ 2024.12.30

[강의] 12월 27일 수업정리

map에 대한 수업을 들었다 1. map고유 아이디로 동적할당해서 집어넣을 예정  1.1 data.h / cpp#pragma onceclass C_DATA{private: int m_nData;public: C_DATA() = default; void setData(int nData); int getData();};#include "data.h"void C_DATA::setData(int nData){ m_nData = nData;}int C_DATA::getData(){ return m_nData;}1.2 dataMgr.h / cpp #pragma once#include #include #include "data.h"class C_MGR{private: std::map m_mapData;private:..

C++ 2024.12.27

[강의] 12월 26일 수업정리

오늘은 set, insert, pair, string, 해시 테이블에 대한 수업을 들었다. 1. setset은 특정 기준에 따라 원소들이 자동으로 정렬되는 노드 기반 컨테이너이다.기본적으로 오름차순으로 정렬되며, 조건자를 사용하여 내림차순 정렬도 가능하다.유일한 원소만을 가질 수 있는 구조로, 집합(Set)의 의미를 구현된다.내부적으로 균형 이진 탐색 트리(예: Red-Black Tree)로 구현되어, 빠른 시간 내에 원소를 탐색할 수 있다. [ 참고 : 그냥 공부하려고 만든 거지 제대로 된 건 아님, 구조적으로 문제가 있음 (나중에 다시 봐서 알아보자 ) ] 1.1 data.h / cpp#pragma onceclass C_DATA{private:int m_nData;public:void setData(..

C++ 2024.12.26

[강의] 12월 24일 수업정리

오늘은 list, vector에 대한 수업을 들었다 1. list earse를 사용하는 방법에 대한 것이다. 1.1 erase를 로직으로 해결한 방법 1iter를 백업한 iterNext를 사용하여 다음 노드를 미리 가리키게 함.현재 노드를 지운 뒤 iterNext를 다시 iter에 할당.std::list::iterator iter = listData.begin();while (iter != listData.end()){ std::list::iterator iterNext = iter; iterNext++; if (*iter > 5) listData.erase(iter); iter = iterNext;}  1.2 erase를 로직으로 해결한 방법 2iter++을 후위 증가시켜 erase 호출 전 현재 값..

C++ 2024.12.25

[강의] 12월 23일 수업정리

오늘은 탬플릿, 클래스 탬플릿 특수화, 간단한 STL에 대한 수업을 들었다. 1. 탬플릿 1.1 탬플릿에서 클래스 설계 시 함수 인자 처리 C++에서 템플릿 클래스를 설계할 때, 함수 인수는 래퍼런스(&)로 전달하는 것이 일반적이다. 이는 call by value를 막기 위함으로 기본적으로 C++에서 클래스를 call by value를 한다는 것 자체는 문제인 것이다.1.2 참조로 구성해도 복사가 발생하는 이유함수 인수를 참조로 전달하더라고 내부적으로 복사가 필요할 때가 있다.예를 들어 템플릿을 사용하면서 클래스의 인스턴스를 값으로 복사해야 하는 경우가 발생한다.이러한 경우에서 복사 생성자를 막아놓은 클래스는 컴파일 시점에 "삭제된 복사 생성자를 호출하려 한다"라는 오류를 발생시키게 된다. 그렇다면 클래..

C++ 2024.12.23

[강의] 12월 20일 수업정리

야구 게임 완성과 탬플릿의 기초문법에 대한 수업을 들었다. 1. 야구 게임 (완성본)- 달라진 부분만 첨부해 둠int C_GAME::strikeCount() // 이거 private에 만듬{ int arCount[(int)C_TABLE::E_TYPE::E_MAX]{}; for (int i = 0; i   2. 탬플릿  2.1 정의 함수나 클래스를 개별적으로 다시 작성하지 않아도, 여러 자료형으로 사용할 수 있도록 설계된 틀이다.함수 탬플릿, 클래스 탬플릿으로 나누어 진다.간단히 일반 함수는 특정 자료형만 처리할 수 있지만, 템플릿은 자료형을 변수처럼 받아 다양한 자료형을 처리할 수 있다.func() 자료형 int를 받는다 이런 느낌이다.즉, 템플릿을 사용하면 하나의 함수 또는 클래스를 여러 자료형에 대해..

C++ 2024.12.20

[강의] 12월 19일 수업정리

오늘의 강의는 야구 게임을 만들어 보았다. ( 내일 완성할 예정, 아직 미완성 )  1. table.h#pragma once#include class C_TABLE{public: enum class E_TYPE { E_OUT = 0, E_BALL, E_STRIKE, E_MAX };private: E_TYPE m_arTable[10];public: C_TABLE() = default; void setTable(int* pBall, int nBallLength, int nStrike); E_TYPE getResult(int nNumber);};E_TYPE::enum class로 E_OUT, E_BALL, E_STRIKE를 정의하여 각각 고유 번호를 부여, 추가로 최대값을 나타내는 E_MAX도 포함m_..

C++ 2024.12.19

[강의] 12월 18일 수업정리

오늘은 함수 포인터에 대한 수업을 들었다. 1. 함수 포인터 1.1 함수 포인터의 기본  C언어 #include void function();int main(){ void (*pFunc)() {}; pFunc = function; pFunc();}void function(){ printf("테스트\n");} C++#include void function();int main(){ void (*pFunc)() {}; pFunc = &function; (*pFunc)();} void function(){ printf("테스트\n");}void (*pFunc)() {}- 함수 포인터 선언 시 함수 원형에 따라 작성해야 하며, ()를 포함해야 한다.pFunc = &function / (*pFunc)() - ..

C++ 2024.12.18

[강의] 12월 17일 수업정리

오늘은 싱글톤, 포인터 함수 기본에 대한 수업을 들었다. 1. 싱글톤1.1 싱글톤 기본 원형  싱글톤이란 특정 클래스의 인스턴스를 단 하나만 생성되도록 보장하는 디자인 패턴이다. [디자인 패턴, 간단하게 말해서 클래스 결합 예제로 클래스를 이런 식으로 만들게 되면 그 방식대로 사용가능하다는 이야기]여러 번 호출되더라도 새로운 인스턴스를 생성하지 않고, 최초 호출 시 생성된 인스턴스를 재활용합니다.예시를 봐보자#pragma onceclass C_DATA{private: int m_nData;private: C_DATA() = default; // 생성자를 private으로 선언하여 외부에서 호출하지 못하도록 막음 public: void setData(int nData); int getData(); stat..

C++ 2024.12.17

[강의] 12월 16일 수업정리

오늘은 정적변수, 정적 함수에 대한 수업을 들었다. 1. C 메모리 구조 1. 코드(Code) 영역실행할 프로그램의 코드가 저장되는 영역.읽기 전용(Read-Only)으로 설정되어 프로그램 코드가 변경되지 않도록 보호.정적 크기를 가지며 프로그램 실행 중에 크기가 변하지 않음.2. 데이터(Data) 영역전역 변수와 정적 변수가 저장되는 영역.초기화된 변수는 초기화 영역에, 초기화되지 않은 변수는 BSS(Zero-initialized Segment)에 저장.프로그램 시작 시 고정된 크기(일반적으로 약 1MB)로 메모리를 할당받음.이 고정된 메모리 내에서 변수를 할당하거나 반환하면서 사용.3. 스택(Stack) 영역지역 변수와 함수 호출 시 생성되는 스택 프레임이 저장되는 영역.컴파일 타임에 크기가 결정됨...

C++ 2024.12.16