1. Day31

  • 알고리즘 코드카타
  • C++과 Unreal Engine으로 3D 게임 개발 강의 수강(1-3, 1-4)
  • 역량 강화분반 OT(스탠다드반 배정, TA반 & 베이직반 실전반 신청)
  • CS50x(0주차, 1주차)

2. CH3 - C++과 Unreal Engine으로 3D 게임 개발(Day31)

  • C++ 과 Unreal Engine으로 3D 게임 개발 강의 수강(1-3, 1-4)
    • 언리얼 컨텐츠 Migration, C++ 클래스 생성 삭제
    • 액터 클래스에 컴포넌트 추가하기

3. 알고리즘 코드카타

  • 콜라츠 추측, 서울에서 김서방 찾기

4. 스마트 포인터 세션

  • 스마트 포인터 종류 및 사용법
    • unique_ptr, shared_ptr, weak_ptr
  • weak_ptr의 부모와 자식 클래스 경우 사용법(자식의 외부 참조 유지 - 외부에서 자식에 직접 접근 가능)
#include <memory>
#include <vector>
#include <string>
#include <iostream>
using namespace std;

// Character 클래스 내부에서 this의 shared_ptr 얻기 위해 enable_shared_from_this 상속
// 안쓰면 this로 참조시 카운터가 증가해서 순환참조 문제 발생
class Character : public enable_shared_from_this<Character> {
protected:
    weak_ptr<Character> parent;
    vector<shared_ptr<Character>> children;
    string name;
    int hp;

public:
    Character(const string& n, int h) : name(n), hp(h) {
        cout << name << " 생성\n";
    }

    virtual ~Character() {
        cout << name << " 소멸\n";
    }

    void addChild(shared_ptr<Character> child) {
        child->parent = shared_from_this(); // enable_shared_from_this 필요
        children.push_back(child);
    }

    shared_ptr<Character> getParent() {
        return parent.lock();
    }

    virtual void attack() {
        cout << name << "이(가) 공격!\n";
    }

    string getName() { return name; }
};

class Warrior : public Character {
    int rage;

public:
    Warrior(const string& n, int h, int r) 
        : Character(n, h), rage(r) {}

    void attack() override {
        cout << name << "이(가) 분노의 일격! (분노: " << rage << ")\n";
    }

    void callParent() {
        if (auto p = getParent()) {
            cout << name << "의 부모: " << p->getName() << "\n";
        } else {
            cout << name << "은(는) 부모가 없음\n";
        }
    }
};

int main() {
    auto leader = make_shared<Character>("대장", 200);
    auto warrior1 = make_shared<Warrior>("전사1", 100, 50);
    auto warrior2 = make_shared<Warrior>("전사2", 120, 30);

    leader->addChild(warrior1);
    leader->addChild(warrior2);

    /*
        대장 (부모)
          │
          ├─shared──▶ 전사1 (자식)
          │             │
          │            weak
          │             │
          │◀────────────┘
          │
          └─shared──▶ 전사2 (자식)
                        │
                       weak
                        │
          ◀─────────────┘
    */

    warrior1->callParent();  // 전사1의 부모: 대장
    warrior2->callParent();  // 전사2의 부모: 대장

    leader->attack();    // 대장이(가) 공격!
    warrior1->attack();  // 전사1이(가) 분노의 일격! (분노: 50)

    cout << "\n--- leader 삭제 ---\n";
    leader.reset();
    // 대장 소멸
    // 이후는 main함수 종료시점에 소멸
    // 전사1 소멸
    // 전사2 소멸

    return 0;
}

## 실행 결과

대장 생성
전사1 생성
전사2 생성
전사1의 부모: 대장
전사2의 부모: 대장
대장이(가) 공격!
전사1이(가) 분노의 일격! (분노: 50)

--- leader 삭제 ---
대장 소멸
전사1 소멸
전사2 소멸
  • weak_ptr의 부모와 자식 클래스 경우 사용법(자식의 외부 참조 유지 - 외부에서 자식에 직접 접근 가능)
class Character : public enable_shared_from_this<Character> {
    // ... 기존 코드 ...

public:
    void commandAllChildren() {
        for (auto& child : children) {
            child->attack();
        }
    }
};

int main() {
    auto leader = make_shared<Character>("대장", 200);
    auto warrior1 = make_shared<Warrior>("전사1", 100, 50);
    auto warrior2 = make_shared<Warrior>("전사2", 120, 30);

    leader->addChild(warrior1);
    leader->addChild(warrior2);

    warrior1.reset();  // 외부 참조 제거
    warrior2.reset();  // 외부 참조 제거

    // leader를 통해서만 접근
    leader->commandAllChildren();  // 자식들에게 명령

    cout << "\n--- leader 삭제 ---\n";
    //main()함수가 끝나기전에 전부 삭제
    leader.reset();  // 대장 + 전사들 모두 삭제 

    return 0;
}
  • weak_ptr를 사용하여 순환 참조 문제 해결
  • enable_shared_from_this 사용법

5. CS50x(0 주차, 1주차)

  • 2026 버전으로 다시 시작

6. 내일 계획 : CH3 강의 학습, 알고리즘 문제 집중 CS50x 1주차 마무리

1. Day30

  • 알고리즘 코드카타
  • C++과 Unreal Engine으로 3D 게임 개발 강의 수강(1-1, 1-2)

2. CH3 - C++과 Unreal Engine으로 3D 게임 개발(Day30)

  • C++ 과 Unreal Engine으로 3D 게임 개발 강의 수강(1-1, 1-2)
    • 개발 환경 준비, 빌드 프로세스 이해하기

3. 알고리즘 코드카타

  • 정수 내림 차순으로 배치하기
    • string → int 는 stoi()지만 string → long long 은 stoll() 사용
    • 이외에도 string 에서 숫자로 바꾸는건 stod(double), stof(float), stold(long double) 등 이 있음 string to 자료형 타입명의 첫 알파벳 같은 규칙

4. 다음 주 계획 : CH3 강의 학습, 알고리즘 문제 집중 CS50x 1주차 마무리

1. Day29

  • 알고리즘 코드카타
  • Stat, StatOperation 스탯 관리 구조
  • CS50x 0추차

2. CH3 - C++과 Unreal Engine으로 3D 게임 개발(Day29)

  • 알고리즘 코드카타
    • 정수 제곱근 판별

3. Stat, StatOperation 스탯 관리 구조


4. CS50x 0추차


5. 내일 계획 : CH3 강의 학습, 알고리즘 문제 집중

+ Recent posts