C++ 120

[강의] 1월 13일 수업정리

오늘은 API에 대한 수업을 들었다. 1. API1.1 설명 API(Application Program Interface)란 응용 프로그램에서 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어하거나 상호작용할 수 있도록 설계된 인터페이스이다.일반적으로 파일 제어, 창 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공한다.Application Program (응용 프로그램) + Interface (인터페이스)를 조합한 개념으로, 쉽게 말해 프로그램 간 연결 역할을 한다.1.2 코드 설명 #include "framework.h"#include "WindowsProject1.h"#define MAX_LOADSTRING 100HINSTANCE hInst; ..

C++ 2025.01.13

[강의] 1월 3일 수업정리

오늘은 커맨드 패턴에 대한 수업을 들었다. 1. 커맨드 패턴 (Command pattern)1.1 정의 커맨드 패턴이란 요청을 객체의 형태로 캡슐화하여 사용자가 보낸 요청을 나중에 이용할 수 있도록 매서드 이름, 매개변수 등 요청에 필요한 정보를 저장 또는 로깅, 취소할 수 있게 하는 패턴이다1.2 설명커맨드 패턴에는 명령(command), 수신자(receiver), 발동자(invoker), 클라이언트(client)의 네개의 용어가 항상 따른다. 커맨드 객체는 수신자 객체를 가지고 있으며, 수신자의 메서드를 호출하고, 이에 수신자는 자신에게 정의된 메서드를 수행한다. 커맨드 객체는 별도로 발동자 객체에 전달되어 명령을 발동하게 한다. 발동자 객체는 필요에 따라 명령 발동에 대한 기록을 남길 수 있다. 한..

C++ 2025.01.03

[강의] 1월 2일 수업정리

오늘은 옵저버 패턴에 대한 수업을 들었다.1. 옵저버 패턴 1.1 정의 옵저버 패턴(observer pattern)은 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. 1.2 특징1. 주제가 옵저버에 대해서 아는것은 옵저버가 특정 인터페이스를 구현한다는 것 뿐이다.2. 옵저버는 언제든지 새로 추가할수있다3. 새로운 형식의 옵저버를 추가하려고 할때도 주제를 전혀 변경할 필요가 없다4. 주제와 옵저버는 서로 독립적으로 재사용할수있다.5. 주제나 옵저버가 바뀌더라도 서로한테 영향을 미치지 않는다. 즉, 여기서 핵심은 내용이 변경되었을 때 알려준다 이며 보통 게임쪽에서 UI에..

C++ 2025.01.02

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

오늘은 (추상) 팩토리 패턴에 대한 수업을 들었다. 1. 팩토리 패턴 1.1 정의 :객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만든다. 즉 팩토리 메소드 패턴을 이용하 클래스의 인스턴스를 만드는 일을 서브클래스에게 맡기는 것.1.2 UMLProduct - 생성될 객체의 인터페이스ConcreteProduct - Product 인터페이스를 구현한 구상 클래스Creator - 객체를 생성하는 팩토리 메소드를 가진 인터페이스ConcreteCreator - Creator 인터페이스를 구현한 구상 클래스 1.3 구현product .h / cpp#pragma once#include __interface I_PRODUCT{ void operation();};..

C++ 2024.12.31

[강의] 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