반응형

오늘의 일정

  • 오전
    • 11:00 ~ 13:00 : C# 기초 문법 강의 1~3주차 수강 학습
    • 주요 학습 내용:
      • C# 소개 및 .NET 개요
      • Visual Studio 개발 환경 설정
      • Hello World 출력 및 기본 문법 구조 이해
      • 기본 자료형 선언 및 초기화 (int, float, double, char, bool, string)
      • 명시적/암시적 형변환, Parse(), ToString() 등
      • Console 입력 처리 (Console.ReadLine(), int.Parse())
      • 산술, 비교, 논리, 할당, 복합 대입 연산자
      • 문자열 보간, string.Format(), 이스케이프 시퀀스 등
  • 오후
    • 13:00 ~ 14:00 : 점심시간
    • 14:00 ~ 15:00 : 오전에 학습한 내용 복습
    • 15:00 ~ 16:00 : 클래스와 구조체의 메모리 구조 개념 정리
    • 16:00 ~ 18:00 : 텍스트 기반 RPG 과제 구상
  • 저녁
    • 18:00 ~ 19:00 : 저녁시간
    • 19:00 ~ 21:00 : 스터디 및 오늘 학습 내용 회고

1. 오늘 학습 키워드

  • C# 기본 문법 이해
  • 자료형 선언 및 형변환 (int, float, string, ToString(), Parse())
  • Console 입력 처리 (Console.ReadLine, int.Parse)
  • 연산자 정리 (산술, 비교, 논리, 복합 대입)
  • 문자열 처리 (string.Format(), 보간, 이스케이프 시퀀스)
  • 조건문 (if, else if, switch, 삼항 연산자)
  • 반복문 (for, while, do-while, foreach) 및 제어 (break, continue)
  • 메서드 정의 및 호출, ref, out, params 키워드
  • 배열, List, Dictionary 등 컬렉션 사용법
  • 구조체(struct)의 개념과 활용
  • 클래스 vs 구조체의 메모리 구조 (힙/스택) 정리
  • 텍스트 기반 RPG 과제 방향 기획

2. 오늘 학습 한 내용을 나만의 언어로 정리하기

 

C# - Adpater Pattern2 C# 코드예제

❓ 어댑터 패턴에대한 이해도가 부족한거 같아서 다시 GPT에게 물어봐서 다시 공부해봤다. namespace로 Adpater를 정의해야 하는 줄 알았는데 그렇지 않았다. 결론은 🎯 결론C#에서 어댑터 패턴은 "직

dev-jen.tistory.com

 

C# - C#과 .NET의 시작, 개발 환경 구축과 Hello World

📘 챕터 1. C# 소개와 개발 환경 설정🧩 C# 언어의 개요C#은 마이크로소프트에서 개발한 객체지향 프로그래밍 언어이다.형식에 엄격하며, 안전성과 효율성을 고려한 구조를 갖추고 있다.C, C++, Jav

dev-jen.tistory.com

 

C# - C# 기본 구조 완전 정복: 출력, 주석, 자동완성

📘 C# 기본 구조 완전 정복 — 출력, 주석, 자동완성🧩 C# 코드 구조 이해하기C# 프로그램은 반드시 클래스와 메서드로 구성되며, 진입점인 Main 메서드에서 실행이 시작된다.기본 콘솔 애플리케

dev-jen.tistory.com

 

C# - 자료형과 변수의 기초 — 선언, 리터럴, 코드 스타일

📘 자료형과 변수의 기초 — 선언, 리터럴, 코드 스타일🧩 C# 기본 자료형 개념C#은 자료형에 대해 엄격한 형식 시스템을 가진 언어로, 모든 변수는 선언 시 반드시 자료형을 명시해야 한다.자료

dev-jen.tistory.com

 

C# - 형변환과 입력, 연산자 그리고 문자열 활용

📘 형변환과 입력, 연산자 그리고 문자열 활용🔄 형변환의 개념C#은 형식이 엄격한 언어이기 때문에 서로 다른 자료형 간의 대입이나 연산을 수행할 때 형변환이 필요하다.형변환에는 명시적

dev-jen.tistory.com

 

C# - 사용자로부터 입력 받기, 계산기 만들기, 온도 변환기 만들기, BMI 계산기 만들기

사용자로부터 입력 받기///이름, 나이 - 입력, 출력Console.Write("이름 입력 : ");string name = Console.ReadLine();Console.Write("나이 입력 : ");int age = int.Parse(Console.ReadLine());Console.WriteLine($"이름 : {name}, 나이 : {ag

dev-jen.tistory.com

 

C# - 조건문과 반복문 - 조건문과 반복문 완전 정복 - 기초 개념부터 실습까지

📘 조건문과 반복문 1 - if, else if, 중첩 조건문, switch, 삼항 연산자🔍 조건문 개요조건문은 주어진 조건식의 결과에 따라 프로그램의 제어 흐름을 변경하는 제어문이다.if 문if 문은 조건식이 참

dev-jen.tistory.com

 

C# - 배열과 컬렉션 정리 - 1차원부터 다차원, 리스트부터 딕셔너리까지 + 예제

📘 배열과 컬렉션배열1차원 배열동일한 데이터 유형을 연속적으로 저장하며, 인덱스를 통해 요소에 접근할 수 있다. 배열은 선언 시 고정된 크기를 가지며, 크기 이상의 데이터는 저장할 수 없

dev-jen.tistory.com

 

C# - 메서드와 구조체 완전 정복: 재사용성부터 구조 설계 + 구조체 메모리

🧩 메서드란 무엇인가?✅ 메서드의 정의메서드(Method)는 프로그램에서 특정한 작업을 수행하도록 정의된 코드 블록이다.복잡한 코드를 기능별로 분리하여 모듈화함으로써 코드의 재사용성, 가

dev-jen.tistory.com

 

C# - 틱택토 게임

using System;class Program{ static char[] board = { '1', '2', '3', '4', '5', '6', '7', '8', '9' }; static int turn = 1; // 홀수: X, 짝수: O static bool gameEnded = false; static void Main(string[] args) { while (!gameEnded) { Console.Clear(); DisplayBo

dev-jen.tistory.com

 

C# - 객체지향 프로그래밍(OOP) + 클래스와 객체 + 상속과 다형성

🧱 클래스와 객체의 핵심 개념 정리📌 객체지향 프로그래밍(OOP)의 4가지 핵심 원칙캡슐화(Encapsulation)관련된 데이터와 기능을 하나의 단위로 묶고 외부로부터 숨긴다. 필드와 메서드를 클래스

dev-jen.tistory.com

 

C# - 고급 문법 정복하기 (제너릭, ref/out)

🛠️ C# 고급 문법 정복하기 (제너릭, ref/out)📦 제너릭(Generic) - 타입에 유연한 코드 만들기제너릭이란?클래스나 메서드가 다양한 자료형을 처리할 수 있도록 해주는 기능 형태로 사용하며, 코드

dev-jen.tistory.com

 

오늘은 C#의 기초 문법 전반을 훑으며, 앞으로의 프로그래밍 흐름을 이해하는 데 기반이 되는 내용들을 학습했다. 먼저 C#이 어떤 언어인지, 어떤 환경에서 실행되는지를 이해했고, Visual Studio를 이용해 첫 콘솔 프로그램을 작성해보며 개발 환경을 익혔다.

기본 자료형을 선언하고 초기화하는 방법을 배웠고, 명시적/암시적 형변환과 ToString(), Parse()를 활용해 문자열과 숫자 간의 변환을 다루었다. Console.ReadLine()과 int.Parse()를 통해 사용자로부터 입력을 받고 처리하는 흐름도 익혔다.

연산자 부분에서는 산술 연산, 비교 연산, 논리 연산, 복합 대입 연산자를 실제 코드에 적용하면서 계산과 조건 검사의 기본기를 다졌다. 문자열 처리에서는 보간($"..."), string.Format(), 이스케이프 시퀀스를 활용한 다양한 출력 방식을 익혔다.

조건문과 반복문은 흐름 제어의 핵심으로, if, else if, switch, 삼항 연산자를 통해 조건 분기를 구현했고, for, while, do-while, foreach를 통해 반복 작업을 효율적으로 처리하는 구조를 학습했다. break와 continue의 사용으로 반복 제어도 익혔다.

메서드 정의와 호출 방식도 배우며, ref, out, params 키워드가 메서드 인자에 어떤 영향을 주는지도 실습했다. 배열과 List, Dictionary 같은 컬렉션을 사용해 데이터를 모으고 관리하는 방법도 체득했다.

마지막으로, 클래스와 구조체의 메모리 구조 차이를 배우며 참조 형식과 값 형식의 동작 방식을 정리했다. 구조체는 스택에, 클래스는 힙에 할당된다는 기본 원리를 바탕으로, 클래스 안에 있는 구조체는 어디에 할당되는지 등 실제 메모리 배치를 머릿속에 그려보았다. 이 이해는 앞으로 성능 최적화나 설계에 있어 중요한 기반이 될 것이다.

오늘 배운 개념들을 바탕으로 텍스트 기반 RPG 과제를 어떻게 설계할지 구상하며, 단순히 문법을 넘어서 실제 적용 가능성까지 함께 고민해보는 시간이었다.


3. 학습하며 겪었던 문제점 & 에러

구조체에 new 키워드를 쓰면 힙에 저장되는지에 대한 궁금증

  • 문제정의
  • 구조체에 new 키워드를 사용하면 힙에 저장되는 건지, 스택에 저장되는 건지 궁금했다. new라는 키워드가 클래스에서는 힙 할당을 의미하니 구조체도 같을 거라고 생각했다.
  • 시도
  • 구조체를 다양한 방식으로 선언하고 사용해보며 메모리 위치를 추론해 보았다. 팀원과 함께 튜터에게 질문도 했다.
  • 해결 방법
  • 구조체는 기본적으로 값 형식이며, new 키워드는 필드를 초기화할 뿐 힙에 할당하지 않는다는 점을 명확히 이해했다. 단, 구조체가 클래스 내부에 포함된 경우에는 클래스가 힙에 있으므로 구조체도 힙에 포함된다는 보충 설명도 함께 들었다.
  • 새롭게 알게 된 점
  • new 키워드를 썼다고 무조건 힙에 할당되는 것이 아니며, 메모리 위치는 컨텍스트(상황)에 따라 달라진다는 점을 처음 명확히 이해했다.
  • 다시 만나게 된다면
  • 구조체와 클래스의 선언 위치, 포함 관계, 사용 문맥을 먼저 따져본 뒤 메모리 구조를 그림으로 시각화해보겠다. 메모리 위치에 대한 고민이 생기면 코드뿐 아니라 실행 흐름까지 함께 분석할 것.

질문했던 내용!

Q1.@김혜현 (Unity_11기)

이 친구와 같이 공부하다가 문득 궁금해졌습니다! 클래스는 힙(Heap)에 메모리가 할당되고, 구조체는 스택(Stack)에 메모리가 할당된다고 알고 있는데요. 그렇다면 new 키워드를 사용할 경우, 클래스는 당연히 힙에 할당되겠지만, 구조체는 어느 메모리에 할당되나요?

A1.@염예찬(Unity튜터)

(Unity): 클래스는 말씀하신 것처럼 힙(Heap)에 할당됩니다. 하지만 구조체는 new 키워드를 사용하더라도 힙이 아닌 스택(Stack)에 할당됩니다. 즉, 구조체는 값 형식이기 때문에 기본적으로 스택에 저장되는 것이 맞습니다.Q2.그렇다면 클래스 내부에 정의된 구조체는 어디에 할당되나요?

A2.@염예찬(Unity튜터): 클래스 자체는 힙 메모리에 할당되며, 클래스의 필드로 포함된 구조체도 클래스의 일부이므로 힙에 함께 저장됩니다. 즉, 클래스 내부에 있는 구조체도 힙에 할당됩니다.

A3. (번외)@염예찬(Unity튜터): "스택 프레임"이라는 개념이 있습니다. 함수가 호출될 때마다 해당 함수에 대한 스택 프레임이 생성되며, 지역 변수나 매개변수들이 이 스택 프레임에 저장됩니다. 클래스는 참조 형식이기 때문에, 클래스 인스턴스 자체는 힙에 생성되며, 함수 내에서 선언된 클래스 변수는 힙에 있는 인스턴스를 가리키는 참조(주소값)만 스택 프레임에 저장됩니다.

반면 구조체는 값 자체가 스택 프레임에 직접 저장됩니다 (단, 상황에 따라 힙에 할당될 수도 있습니다 – 예: 박싱, 클래스 내부 필드 등).


5. 메모

오늘은 C# 기초를 처음부터 다시 정리하면서, 겉핥기 식으로만 알고 있던 문법들을 머릿속에서 하나씩 정리해나갈 수 있었던 시간이었다. 특히 구조체와 클래스의 메모리 구조 차이를 이해하고 나니, 단순히 코드만 짜는 것이 아니라 메모리 흐름까지 설계해야 하는 프로그래밍의 깊이를 다시 느꼈다.

처음엔 단순히 "new 쓰면 힙이지!"라고 생각했지만, 구조체는 예외라는 사실에 놀랐고, 결국은 문법이 아니라 *맥락(context)*이 중요하다는 걸 배웠다.

“생각보다 모르고 있었구나”라는 생각이 들었지만, 지금이라도 바로잡을 수 있어서 다행이었다.

무엇보다 친구(혜현이)와 함께 학습하고, 질문을 통해 서로를 자극하며 성장해가는 과정이 즐거웠다. 앞으로도 모르는 걸 부끄러워하지 않고, 궁금한 건 바로바로 질문하며 단단히 쌓아가고 싶다.

기초를 튼튼히 쌓아야, 나중에 흔들리지 않는다.

내일도 성실히 쌓아가자. 화이티이잉!!!


반응형