C++ 프로그래밍 11

[2025-01-07 / Day 51] 시간 복잡도와 공간 복잡도, 자주 쓰는 자료구조

시간 복잡도프로그램의 수행 성능을 최악의 경우를 가정하여 정량화하는 방법이다.정의는 문제를 해결하는데 걸리는 시간과 입력의 함수 관계를 말한다.정의만으로는 감이 안잡히니 예시를 많이 보며 어떤 느낌인지 알아보자.✨시간 복잡도는 꼭 최악의 경우를 기준으로 계산하도록 해야 한다!예시1#include #include using namespace std;int find_max_num(const vector& arr) { // 배열 내 최댓값을 찾는 로직 (이중 루프) for (int i = 0; i 위 코드를 보면 이중for문을 써서 함수의 결과값이 나온다.for문 하나는 arr이 가지고 있는 원소의 개수만큼 연산한다.이중 for문은 arr의 원소 개수×arr의 원소 개수만큼 비교연산을 실행한다. N..

C++ 프로그래밍 2025.04.22

[2025-01-06 / Day 50] C++로 언리얼 엔진 액터 배치하고 로그 출력해보기

이때까지는 블루프린트로 프로젝트를 생성했지만 이번에는 C++로 프로젝트를 만들고 실습해보았다.Visual Studio 2022 설정하기C++로 프로젝트를 만들고 게임 개발을 하려면 Visual Studio에"C++을 사용한 게임 개발"이란 소프트웨어를 설치해야 한다.나는 이미 Visual Studio가 깔려 있었기 때문에 필요한 소프트웨어만 설치해주었다.여기서 스크롤을 내리면 '추가 도구 및 기능 설치'라고 살짝 파란 글자가 있는데 클릭한다.그럼 이런 창이 뜨는데 여기서 "C++을 사용한 게임 개발", "C++을 사용한 데스크톱 개발"에 체크하고 수정 버튼을 눌렀다!C++ 프로젝트 생성1. 에픽게임즈 런처에서 엔진을 실행한다.2. 프로젝트 브라우저 창이 뜬다.여기서 게임→기본을 설정한다.프로젝트 위치랑 ..

C++ 프로그래밍 2025.04.22

[2025-01-06 / Day 49] 디자인 패턴 기초 공부

디자인 패턴디자인 패턴이란?“개발 시 반복적으로 등장하는 문제를 해결하기 위한 일반화 된 솔루션”이라고 정의할 수 있다.한마디로 보통 개발을 하면 겪는 문제들을 경험 많은 개발자들이 빠르게 해결하기 위해 해결책을 만들어 놓은 것이다!디자인 패턴의 종류생성 패턴(Creational Patterns)새로운 것을 만들어내는 방법과 관련된 패턴이다.예를 들어 공장에서 물건을 찍어내는 것에 비유할 수 있다.이 물건이 프로그래밍에선 객체가 된다. 이 중에서 싱글톤 패턴에 대해 알아보자.구조 패턴(Structual Patterns)여러 부품을 어떻게 조립하고 연결하는 방법에 대한 패턴이다.여러 객체들의 구조를 어떻게 구성할지가 이 패턴의 주 관심사이다.이 중에서 데코레이터 패턴에 대해 알아보자.행동 패턴(Behavi..

C++ 프로그래밍 2025.04.22

[2025-01-03 / Day 48] 객체지향적 설계와 SOLID 원칙

이번에는 객체지향적으로 코드를 구현하고 최대한 깔끔하고 효율적인 코드를 만들기 위해 관련된 원칙을 공부했다.공부하면 좋은 이유1. 대부분 라이브러리 및 오픈소스는 객체지향적으로 구현되어 있다.설계원리를 이해해야 깊게 공부할 수 있다.2. 좋은 설계로 구현된 코드는 구현시간을 단축시키고 기능을 유연하게 변경 가능하다.응집도모듈이란? 소프트웨어 설계에서 기능적으로 독립적인 단위를 말한다.클래스, 메서드, 함수, 또는 파일 자체가 모듈이 될 수 있는 것이다!응집도는 클래스 내 모듈들이 얼마나 관련되어 있는지를 나타낸다.즉, 응집도가 높은게 좋은 거다.클래스 내 관련없는 모듈들이 존재하게 되면,클래스 내부가 변경되는 경우가 많고, 확장하기도 쉽지 않다.클래스에서 관련없는 모듈끼리 많이 모여있으면 응집도가 높은게..

C++ 프로그래밍 2025.04.22

[2024-12-31 / Day 47] STL 기초 알아보기!

STL이란?STL(Standard Template Library)은 C++에서 자체적으로 제공하는 표준 라이브러리다.STL에는 개발 시 유용하게 사용되는 컨테이너, 알고리즘이 구현되어 있기 때문에개발자는 헤더파일을 추가하고 그냥 사용만 하면 된다!그래서 자주 사용되는 컨테이너와 알고리즘에 대해 알아보았다.컨테이너STL이 제공해주며, 데이터를 담는 자료구조를 말한다.정리하면 STL이 제공해주는 자료구조.특징1. 모든 컨테이너는 템플릿으로 구현되어 있다. 즉 타입에 상관없이 사용 가능하다.2. 모든 컨테이너는 메모리 관리를 내부적으로 한다.STL 내부에 "필요한 메모리 관리 기능을 포함한 코드"가 이미 작성되어 있다.따라서 사용시 메모리 관리를 고려하지 않아도 된다.3. 모든 컨테이너는 반복자를 가지고 있다..

C++ 프로그래밍 2025.04.22

[2024-12-31 / Day 46] 오버로딩과 오버라이딩

오버로딩오버로딩은 같은 이름의 함수나 연산자를 여러번 정의하는 것을 말한다.특징같은 클래스 내에서 사용.컴파일 타임에 결정(정적 바인딩).함수 오버로딩연산자 오버로딩은 나중에 정리..함수 오버로딩부터 알아보자..함수 오버로딩이 되려면 아래 조건들 중 하나 이상 만족해야 한다.1. 매개변수 타입이 다른 경우void display(int value) { cout 위의 함수는 int타입을, 아래 함수는 double타입을 인자로 받는다.2. 매개변수의 갯수가 다른 경우// 매개변수 1개void printSum(int a) { cout 이렇게 매개변수의 개수만 달라도 오버로딩이 된다.함수 오버로딩이 되지 않는 경우1. 반환타입만 다를 경우int getValue() { return 24;}doubl..

C++ 프로그래밍 2025.04.22

[2024-12-31 / Day 45] 템플릿이란 무엇일까요?

프로그래밍을 할 때 되도록이면 실세계의 동작방식처럼 구현하면 된다고 들었다.예시를 들면 두 수를 더하는 계산기를 구현한다고 생각해보자.실세계에서는 그냥 두 수를 머릿속으로 더하면 끝이다.프로그래밍에서는 변수의 타입이 존재하므로 int, double같은타입이 서로 맞아야 계산이 된다!오늘 배우게 될 템플릿 문법을 사용하면, 이런 타입의 제약을 벗어나마치 실세계에서 계산하는 것처럼 더 자유롭게 프로그래밍할 수 있다!템플릿내가 정의할 함수 위에 template ← 이 코드를 추가하면 된다.예시template T add(T x, T y) { return x + y;}템플릿 기본 활용더하기이렇게 템플릿의 안에 있는 typename 뒤에 이름은 맘대로 바꿔도 된다.하지만 헷갈릴 수 있으니 웬만하면 대문자를 ..

C++ 프로그래밍 2025.04.21

[2024-12-30 / Day 44] C++에서 자원 관리하기

학습 목표메모리 누수와 자원 관리의 중요성을 이해한다.동적 메모리 할당 및 해제를 적절히 수행하여 메모리를 효율적으로 관리할 수 있다.스마트 포인터와 같은 C++ 자원 관리 도구를 활용하여 안정적인 코드를 작성한다.메모리오늘은 컴퓨터에서 메모리란 공간이 있는데 그게 무엇인지 알아보았다.예시로 옷장을 비유한 것으로 들은 것이 있다.옷장에 옷을 계속 넣게 되면 언젠가는 가득 차서 옷이 흘러 넘칠 것이다.그것처럼 컴퓨터에도 비슷한 '메모리'라는 공간이 있다.그래서 옷장안의 옷들이 가지런히 있어 효율적으로 공간을 쓰는거처럼메모리도 공간이 한정되어 있으니 효율적으로 공간을 사용해야 한다!스택 메모리일반 변수들은 대부분 스택 메모리 공간을 차지한다.특징1. 스택은 메모리 영역 자체가 크지 않다.2. 스택 메모리는 ..

C++ 프로그래밍 2025.04.21

[2024-12-24 / Day 43] C++의 객체 지향 프로그래밍

상속자동차를 만든다고 생각해보자.자동차는 다양한 종류가 있지만 그래도 같은 속성을 가지고 있는 것이 있다.이를 class에서 만든다고 생각하면 자동차 여러 개를 만들 때속도, 색상, 그 자동차만의 특성 이렇게 만들기보다속도와 색상 같이 어느정도 겹칠 수 있는 부분은 특성 하나로 만들어 놓고그걸 적용되게 하면 편할 것이다. 그 공통점을 하나로 만들고클래스에서 객체를 생성할 때 그 공통점이 적용되도록 하는 것이 상속이다.말 그대로 부모한테 유전을 받는 것처럼 공통적인 부분은 상속받을 수 있다!Vehicle -> Bycle/Truck Class 구현우선, 상속할 때는 멤버변수를 주로 protected로 사용한다. 이렇게..string color; 위에 protected:가 보이는데 저렇게 되면 color와 s..

C++ 프로그래밍 2025.04.21

[2024-12-23 / Day 42] Class 개념 정리

실제 현업에서 프로젝트를 진행하면, 한번 완성된 프로젝트는 계속해서 사용되는 경우가 많다고 한다. 개발 시간보다 유지 보수 시간이 더 길어지고 수정시 투입되는 비용도 기하급수적으로 증가한다고 한다.따라서!! 우리는 유지 보수를 잘할 수 있게 코드를 구현해야 한다.(재사용성이 좋다고도 한다.)C++에서는 이를 위해 객체지향 프로그래밍을 한다고 한다.첫 시작으로 Class가 뭔지 배운다.class 없는 성적 관리 프로그램사실 동작 자체는 문제 없이 잘 된다. 하지만 이런 코드를 실전에서 잘 안쓰는 이유는1. 평균을 내려는 과목이 하나라도 늘어나면 함수의 호출 방식이 변경된다.2. 성적 관리를 하는 데이터가 모두 노출되어 있다. 즉, kor[3], eng[3], math[3]에 대해서 사용자가 입력값을 맘대로..

C++ 프로그래밍 2025.04.21