WIL - 본 캠프 1주차(25.06.30~07.05)
지난 일주일 동안 가장 인상 깊었던 배움에는 뭐가 있었지?
이번 주는 정말 많은 내용을 다뤘고, 그 중에서도 개념적으로는 C#의 메모리 구조, 클래스 설계, 디자인 패턴, 실무적으로는 Unity의 컴포넌트 이해 및 Git 협업 흐름이 깊이 있게 와닿은 한 주였다.
✅ C#/CS 기본기 정리
- object 타입이 힙에 저장된다는 구조부터 박싱/언박싱, Queue/Stack의 저장 방식까지 메모리 흐름을 코드와 그림으로 함께 정리함
- HashTable, Dictionary, HashSet, Generics의 차이와 사용처 학습
- delegate, Func, Action, 람다식의 기본 사용법을 정리하고 함수형 프로그래밍 기초에 접근
- base, virtual, override, abstract의 의미와 쓰임새를 학습하면서 템플릿 메서드 패턴을 적용해보는 실습 진행
- 일반 오버라이드와 템플릿 메서드 패턴의 차이, 다형성(polymorphism) 개념과 인스턴스 생성(Parent obj = new Child()) 구조를 확인
✅ Unity 실습 및 시스템 이해
- Unity의 SpriteRenderer 정렬, 스케일 조정, Update 주기, GC 동작 원리 학습
- Card 시스템 제작: 카드 클릭 제한, 애니메이션 타이밍 조절
- ScriptableObject의 개념과 실습을 통해 데이터 중심의 Unity 개발 방식에 입문
✅ Git & 협업
- Git / GitHub / GitHub Desktop을 통한 협업 방식 이해
- 커밋 → 푸시 → 풀 → 충돌 해결까지 실습
- Detached HEAD 오류 상황을 경험하고 해결 과정을 통해 감각 증가
✅ 디자인 패턴 적용
- 어댑터 패턴 개념 학습
- Unity 기반 예제로 캐릭터 공격 방식 리팩토링 → Adapter 구조로 설계
배움까지 다가가는데 어떤 어려움이 있었지?
- 내가 안다고 생각했던 개념이 실제론 정확하지 않았다는 충격
- 문제정의: object는 값 타입이니까 스택에 저장된다고 착각함. 박싱/언박싱도 그냥 개념적으로만 알고 있었음
- 시도: 메모리 구조를 직접 그림으로 그리고, object obj = 3;처럼 간단한 코드로 실제 메모리 흐름을 추적
- 해결방법: object는 참조형이고, 값 타입을 넣는 순간 힙에 복사본이 생긴다는 점을 코드 + 그림 + 디버깅으로 확인
- 새롭게 알게 된 점: "내가 안다고 생각하는 것"과 "내가 설명할 수 있는 것"은 완전히 다르다
- 다시 만나게 된다면: 개념을 배울 땐 반드시 구조적 이해 + 코드 테스트 + 직접 설명까지 해보자
- 클래스 구조, 오버라이드, 템플릿 메서드 개념 충돌
- 문제정의: base, override, virtual, abstract를 각각 따로 알긴 했지만, 언제 어떻게 함께 써야 하는지 감이 안 왔음
- 시도: 공통 동작이 있는 예제(예: 공격 방식, 카드 뒤집기 등)를 가정하고 부모/자식 클래스를 직접 코딩
- 해결방법: 부모 클래스에서 뼈대를 잡고, 자식 클래스에서 세부 로직만 바꾸는 템플릿 메서드 구조로 정리
- 새롭게 알게 된 점: 템플릿 메서드는 다형성과 결합돼서 확장 가능한 구조를 만드는 핵심 도구
- 다시 만나게 된다면: 단순한 오버라이드에 그치지 않고, 유지보수가 쉬운 템플릿 구조로 먼저 생각해보기
- Git 협업의 현실적인 문제 - Detached HEAD 겪음
- 문제정의: GitHub Desktop에서 실수로 커밋하고 보니 HEAD가 브랜치에서 떨어져 있었음
- 시도: 현재 브랜치 상태 확인 → git checkout -b로 새 브랜치 생성해서 커밋 이력 살리는 방식으로 복구
- 해결방법: Detached HEAD 개념 파악하고, 협업 전엔 반드시 브랜치 체크하는 습관 만들기
- 새롭게 알게 된 점: 협업 도구는 단순한 버튼 클릭으로 끝나지 않고, 기초 개념을 알고 써야 문제 발생 시 빠르게 대처할 수 있다
- 다시 만나게 된다면: 커밋하기 전에 항상 현재 브랜치 상태 확인 / 중요한 작업은 커맨드라인에서 확인까지 병행
- ScriptableObject 개념의 진입 장벽
- 문제정의: MonoBehaviour랑 뭐가 다르고 왜 써야 하는지 감이 안 왔음. 실습이 없으니 더 막막했음
- 시도: 카드 정보를 ScriptableObject로 분리해보고, 인스펙터에서 직접 값 할당해보며 구조 파악
- 해결방법: 인스턴스화된 데이터가 아니라, 데이터 자산으로 재사용하는 구조라는 개념을 이해
- 새롭게 알게 된 점: 반복되거나 확장될 수 있는 데이터는 ScriptableObject로 관리하면 설계가 훨씬 깔끔해짐
- 다시 만나게 된다면: 데이터 구조를 설계할 때 먼저 "이건 ScriptableObject로 빼도 될까?"부터 고민해보기
과정에서 나는 무엇을 깨달았고, 어떤 감정/생각이 들었었지?
- 이번 주 가장 크게 느낀 건 “나는 생각보다 제대로 모르고 있었구나”였다.
그동안 익숙하게 쓰던 object, override, abstract 같은 키워드가, 막상 그림으로 설명하거나 메모리 구조로 풀어내려 하니까 하나도 정리가 안 돼 있었다.
처음엔 그 사실이 좀 충격이었고, 내가 잘 못하고 있다는 생각이 들었다. - 그런데 공부를 다시 차근차근 해보면서, 그리고 직접 코드를 짜보고 그림도 그려보니까 하나씩 이해되는 순간이 생겼고, 그때부터는 오히려 재미있어졌다.
“아 내가 이래서 이걸 잘못 쓰고 있었구나”, “이게 그래서 이렇게 동작했구나” 같은 실마리가 계속 풀리면서 '아는 척'이 아니라 진짜 이해하게 된다는 감각이 생겼다. - 특히 Git에서 Detached HEAD 상황을 겪으면서 “아 도구도 개념 없이 쓰면 이렇게 꼬이는구나” 하는 깨달음이 컸고, 앞으로는 아무리 익숙한 거라도 구조부터 짚고 가야겠다는 생각이 들었다.
- 또 하나 느낀 건, "무조건 혼자 해결하려고 하지 말자"는 거였다.
모르는 걸 질문하고, 회고로 정리하고, 팀원과 공유하면서 되려 더 빠르게 개념이 정리됐고, 나만의 언어로 정리하고 설명하는 연습이 진짜 중요하다는 걸 깨달았다. - 솔직히 이번 주엔 조금 지치기도 했지만. 하루에 배우는 양도 많고, 헷갈리는 것도 많았는데, 그만큼 내가 단단해지고 있다는 느낌도 분명 있었다. 생각보다 너무 즐거웠고 좋은, 재밌는 시간이였다!
“모르는 게 많다”는 걸 부끄러워하지 않고, “그걸 계속 알아가는 중이다”라고 생각하기로 했다!
💬 메모 [팀에 대한 감사와 나 자신에 대한 믿음]
이번 주는 스파르타 코딩클럽 1주차가 마무리된 시점이기도 하고, 함께했던 팀원들과 헤어지는 시간이기도 했다.
비록 한 주 동안의 짧은 만남이었지만, 팀원들과의 시간이 너무 소중했고, 각자의 자리에서 열심히 해준 모든 분들에게 진심으로 감사한 마음이 크다.
매니저님은 팀장이 그냥 말뿐인 역할이라고 했지만, 나는 한 명 한 명을 진심으로 챙기고 싶은 마음이 더 컸다.
불화 없이 함께 잘 지내고 싶었고, 누가 힘들어도 옆에 있어주고 싶었다. 나는 그런 팀장이 되고 싶었다.
그런 마음을 팀원들도 알아줬을진 모르겠지만 팀원들에게 고마운 한 주였다.
이별이 아쉽지만, 또 다른 팀에서 언젠가 다시 만날 수 있다는 생각에 기대도 된다.
또, 학습 측면에서도 스스로에 대해 다시 한번 확인할 수 있었던 시간이었다.
하루 12시간의 집중이 가능할까 걱정도 됐지만, 마음 한편엔 “나는 할 수 있어”라는 믿음이 있었다.
그 믿음은 어머니가 늘 해주시던 말, “너는 하면 제대로 하는 사람이야”라는 말에서 왔고, 지금의 나를 만든 힘이기도 하다.
늘 믿어주고 응원해주는 우리 가족에게도 이번 기회를 통해 다시 한번 감사함을 느꼈다.
앞으로 배워야 할 것도, 겪어야 할 것도 많지만
나는 잘 해낼 수 있다.
그리고, 점점 더 기대된다. 앞으로도 잘 해보자아!!!!
화이팅!! 오예!!!

📅 이번 주 TIL 목록
본 캠프 1일차 [OT + 새로운 팀 + 팀 프로젝트(카드 뒤집기 게임)]
1. 오늘 하루 계획오전09:00 ~ 12:00 : OT12:00 ~ 13:00 : 12조 회의오늘 계획 (Task)[x] 팀원들 각자 역할 정하기[x] 필수 기능 기획 작성[x] 이미지 올리기오후13:00 ~ 14:00 : 점심시간14:00 ~ 15:30 : Git 사용법 특강
dev-jen.tistory.com
본 캠프 2일차 [CS공부 + 카드게임 팀 프로젝트]
1. 오늘 학습 키워드Unity, Card 시스템, 애니메이션 제한, 클릭 제한, Git 협업, Detached HEAD, ScriptableObject 개념, Update 주기, GC, 캡슐화2. 오늘 학습 한 내용을 나만의 언어로 정리하기 오전에는 컴퓨터
dev-jen.tistory.com
본 캠프 3일차 [CS공부 + 카드게임 팀 프로젝트]
오늘 하루 계획오전09:00 ~ 13:00 : CS 공부어제 내용 복습 - GC, 해시테이블, 딕셔너리, .NET 런타임, 캡슐화, 박싱/언박싱 & 형변환HashTableDictionaryHashSet제네릭 (Generics)ScriptableObject오후13:00 ~ 14:00 : 점심
dev-jen.tistory.com
본 캠프 4일차 [디자인 패턴 + CS공부]
하루 계획오전09:00 ~ 13:00 : CS 공부, 디자인 패턴어제 내용 복습 - 자료구조, ScriptableObject, 해시셋, 해시테이블, 딕셔너리base 키워드virtual / override / abstract템플릿 메서드 패턴일반 오버라이드 vs 템
dev-jen.tistory.com
본 캠프 5일차 [디자인 패턴 + CS공부]
🌅 오전 (09:00 ~ 13:00)Unity & C# 학습object 타입과 메모리 구조 (박싱/언박싱)Queue, Stack의 차이 및 힙 저장 방식delegate, Func, => 문법어댑터 패턴 이론 및 Unity 캐릭터 예제namespace Adapter의 의미와 활용🌇
dev-jen.tistory.com
📅 이번 주 Study 목록
C# Unity - 가비지 컬렉터(GC) 자동실행기준
✅ 가비지 컬렉터(GC)의 역할이란?더 이상 사용되지 않는 힙의 메모리를 자동으로 찾아서 정리해주는 시스템즉,메모리 누수 방지수동으로 메모리 해제하지 않아도 됨 (delete, free 필요 없음)✅ GC
dev-jen.tistory.com
C# - 박싱/언박싱과 박싱/언박싱&형변환 차이
✅ 박싱(Boxing) & 언박싱(Unboxing)🔸 박싱(Boxing)값 형식(Value Type) 데이터를 **참조 형식(Reference Type)**으로 변환하는 것값 타입(예: int, float)을 object 타입에 저장하면 박싱이 발생이 과정에서 값이 힙
dev-jen.tistory.com
C# - 캡슐화
✅ 캡슐화(Encapsulation)란?"객체의 내부 상태(데이터)를 외부로부터 숨기고, 허용된 방식으로만 접근하도록 제한하는 것."✅ 핵심 요약항목설명목적데이터를 보호하고, 잘못된 접근/수정을 방지수
dev-jen.tistory.com
Unity - Update(), FixedUpdate(), LateUpdate()
✅ Unity의 3가지 주요 루프 함수함수 이름실행 주기용도특징Update()매 프레임마다사용자 입력, 일반 로직프레임 속도에 따라 실행 빈도 달라짐 (가변)FixedUpdate()고정 시간 간격마다물리 연산 (Rigidb
dev-jen.tistory.com
C# - .NET Runtime
✅ .NET 런타임이란?.NET Runtime은 C#, F#, VB.NET 같은 **.NET 언어로 만든 프로그램을 실행해주는 "실행 환경(엔진)"**이야.다시 말해, .NET 코드가 컴퓨터에서 실제로 돌아가도록 도와주는 핵심 소프트웨
dev-jen.tistory.com
C# - 해시테이블(HashTable) vs 딕셔너리(Dictionary)&제네릭(Generic)
✅ 해시테이블 (Hash Table)📌 개념키(key)를 해시 함수(Hash Function)에 넣어 나온 해시값을 기반으로 데이터를 저장하는 자료구조.내부적으로는 배열(array)와 연결 리스트 또는 트리 구조를 함께 사용
dev-jen.tistory.com
Unity - 스크립터블오브젝트(ScriptableObject)&예제
✅ ScriptableObject란?📌 개념 정리ScriptableObject는 MonoBehaviour처럼 Unity에서 사용하는 클래스지만,씬에 붙는 컴포넌트가 아니고, 독립적인 데이터 객체야.데이터를 자산(Asset)으로 만들어 저장하고 공
dev-jen.tistory.com
C# - 해쉬셋(HashSet) vs Dictionary(HashTable)
✅ HashSet이란?중복을 허용하지 않는 데이터 집합 (Set)을 구현한 자료구조내부적으로는 **해시 테이블(Hash Table)**을 사용하지만,핵심 목적은 **"중복 없는 값의 모음"**을 만드는 거야.🔍 HashSet의
dev-jen.tistory.com
C# - 자료구조
✅ 자료구조란?자료(데이터)를 효율적으로 저장하고, 관리하고, 사용할 수 있도록 구성한 방식쉽게 말하면,"데이터를 어떻게 정리해서 넣고, 꺼내고, 수정할지에 대한 규칙과 구조"✅ 왜 중요한
dev-jen.tistory.com
C# - Virtual & abstract
✅ virtual 키워드 정리📌 정의virtual은 부모 클래스에서 메서드나 속성을 "재정의 가능"하게 만드는 키워드입니다.📋 기본 문법class Parent{ public virtual void SayHello() { Console.WriteLine("안녕하세요. 부
dev-jen.tistory.com
C# - Class Inheritance(클래스 상속)& Interface(인터페이스) vs abstract Class
✅ 클래스 상속 (Inheritance)✔️ 정의class A : B처럼, 한 클래스가 다른 클래스의 기능을 물려받는 것✔️ 목적코드 재사용: 부모 클래스의 멤버(필드, 메서드 등)를 자식이 그대로 사용 가능기능 확
dev-jen.tistory.com
Unity - Template Method Pattern(템플릿 메서드 패턴) vs virtual
✅ 템플릿 메서드 패턴이란?**템플릿 메서드 패턴(Template Method Pattern)**은상속을 기반으로 부모 클래스에서 **알고리즘의 전체 흐름(틀)**을 정의하고,일부 단계는 abstract 또는 virtual로 정의하여 자
dev-jen.tistory.com
C# - base 키워드
✅ base 키워드란?자식 클래스에서 부모 클래스의 생성자나 메서드, 필드에 접근할 때 사용하는 키워드📌 1. 부모 클래스의 메서드 호출할 때class Parent{ public void Speak() { Console.WriteLine("부모가 말
dev-jen.tistory.com
C# - Parent obj = new Child(); 메모리는 어떻게 될까? & 다형성
Parent obj = new Child(); 메모리는 어떻게 될까?🤔 질문클래스 상속을 사용할 때,Parent obj = new Child();이렇게 부모 타입으로 자식 객체를 참조하면,메모리는 부모 클래스만큼만 잡히는 걸까? 아니면 자
dev-jen.tistory.com
C# - Object Type(오브젝트 타입) & Object Memori(오브젝트 메모리 설명)
✅ object 타입이란?C#에서 object는 모든 타입의 최상위(Base) 타입이야.다시 말해, C#의 모든 타입은 object를 상속받고 있어.int, string, float, bool, DateTime, 사용자 정의 클래스 등 전부 다 object형으로 취
dev-jen.tistory.com
C# - Collection(컬렉션)
✅ 컬렉션이란?"여러 데이터를 하나로 묶어 저장할 수 있는 자료구조 클래스"→ C#에서는 System.Collections, System.Collections.Generic 네임스페이스 아래에서 제공돼.✅ 컬렉션의 종류 (중요한 것들만 정
dev-jen.tistory.com
C# - List vs Array(리스트 vs 배열)
✅ 리스트(List) vs 배열(Array) 핵심 차이 요약항목배열 (int[])리스트 (List)크기고정 (정적)가변 (동적)타입기본 자료형 (int[])제네릭 클래스 (List)기능제한적 (Add 불가)다양한 메서드 제공 (Add, Remove 등
dev-jen.tistory.com
C# - Queue(큐) vs Stack(스택) + 메모리구조
✅ 핵심 차이 한 줄 요약자료구조개념큐(Queue)FIFO: 먼저 들어간 게 먼저 나온다 (First-In First-Out)스택(Stack)LIFO: 나중에 들어간 게 먼저 나온다 (Last-In First-Out)✅ 실생활 비유자료구조비유 예시Queue줄
dev-jen.tistory.com
C# - Delegate(델리게이트) + Lambda operator(람다 연산자) + Lambda(람다식)
✅ 델리게이트(Delegate)란?📌 델리게이트는 메서드를 참조할 수 있는 타입이다.쉽게 말하면, **"함수를 변수처럼 다루기 위한 문법"**이야.C#에서 함수 자체는 변수에 담을 수 없지만,델리게이트를
dev-jen.tistory.com
C# - goto
✅ goto란?goto는 프로그램의 흐름을 특정 위치(레이블)로 "강제로" 이동시키는 문법이야.goto 레이블이름;...레이블이름: 실행할 코드;✅ 아주 단순히 말하면:"코드 중간 어딘가로 점프!"✅ 간단한
dev-jen.tistory.com
Unity - Adapter Pattern(어댑터 패턴) + 예제
✅ 어댑터 패턴이란?서로 다른 인터페이스를 가진 두 클래스가 함께 동작하도록 중간에 "변환기" 역할을 해주는 패턴📌 한 줄 요약:"호환되지 않는 인터페이스를 연결해주는 중간 어댑터 클래
dev-jen.tistory.com