조건문이란?

어떤 조건이 참이면 A를 실행 거짓이면 B를 실행이라고 컴퓨터에게 판단 기준을 알려주는 문법이다.

 

C# 조건문의 종류와 활용

종류 설명 언제 쓰면 좋을까?
if / else if / else 가장 기본적인 조건문으로, 위에서부터 아래로 순차적으로 조건을 검사합니다. 조건이 복잡하거나, 크기 비교(범위) 등 경우의 수가 다양할 때 (예: 나이 구간 판별)
switch 변수의 값이 딱 떨어지는 특정 케이스들 중 하나일 때 사용하여 코드를 간결하게 만듭니다. 값이 정해져 있는 경우 (예: 메뉴 번호, 요일, 등급 판별 등)
삼항 연산자 (?:) 간단한 if-else 구조를 한 줄로 짧게 표현하는 단축키 같은 문법입니다. 참/거짓 결과에 따라 값을 간단히 변수에 담거나 결정할 때

 

[과제] 조건식 완성하기

Q. 나이가 20세 이상이거나 쿠폰이 있으면 입장이 가능한 조건문을 만들어보세요.

int age = 21;
bool hasCoupon = true;

if (age >= 20 || hasCoupon == true)
{
    Console.WriteLine("입장 가능합니다.");
}
else
{
    Console.WriteLine("입장 불가입니다.");
}

 

연산자란?

우리가 변수에 데이터를 담았다면, 이제 그 데이터들을 가지고 계산을 하거나 비교를 할 때 값과 값 사이에 계산이나 판단을 도와주는 기호가 연산자이다.

 

연산자의 종류

산술 연산자

연산자 의미 예시 결과
+ 더하기 3 + 2 5
- 빼기 5 - 1 4
* 곱하기 4 * 2 8
/ 나누기 10 / 2 5
% 나머지 7 % 3 1

 

비교 연산자

연산자 의미 예시 설명
== 같다 age == 20 age가 20이면 true
!= 같지 않다 name != "홍길동" name이 홍길동이 아니면 true
> 크다 score > 80 80보다 크면 true
< 작다 height < 170 170보다 작으면 true
>= 크거나 같다 age >= 18 18 이상이면 true
<= 작거나 같다 count <= 10 10 이하이면 true

 

논리 연산자

연산자 의미 예시 설명
&& 그리고 (AND) age > 18 && isStudent 양쪽 조건이 모두 참일 때만 true
|| 또는 (OR) age >= 18 || isStudent 조건 중 하나라도 참이면 true
! 아니다 (NOT) !isStudent 결과를 반대로 뒤집음 (false면 true)

 

[과제]

어떤 사람의 나이 (age)가 65세 이상이거나, 또는 VIP회원(isVip) 이면 우대 대상입니다. ①, ②에 맞는 연산자를 작성하세요.

age (①) 65 (②) isVip == true

정답: age >= 65 || isVip == true

 

변수와 데이터 타입이란?

C#에서 데이터 타입과 변수는 늘 붙어있습니다. 이를 알기 쉽게 비유하자면 분리수거 표시가 잘 되어있는 쓰레기통과 같습니다. 쓰레기통 자체는 값을 담는 변수이며, 쓰레기통에 붙어있는 분리수거 라벨은 데이터 타입이라고 할 수 있습니다.

 

변수의 기본 규칙

변수는 데이터(값)를 담는 상자와 같아서, 우리가 사용하고자 하는 값을 담아두고 활용할 수 있습니다. 변수를 선언할 때는 데이터타입 변수이름 = 값의 형태를 가집니다. (예: string fruit = "사과";)

변수 이름을 지을 때는 다음과 같은 규칙을 반드시 지켜야 합니다.

  • 숫자로 시작 X: 변수명은 숫자로 시작할 수 없습니다.
  • 띄어쓰기 X: 띄어쓰기를 사용할 수 없습니다.
  • 특수기호 X: 특수기호는 사용할 수 없으나, 언더바(_)는 예외로 허용됩니다.

 

데이터 타입의 종류

분류 데이터 타입 설명 예시 값 비유
숫자 int 정수 (소수점 없음) 10, -5, 0 사람 수, 나이
  long 아주 큰 정수 922337203685 통장 잔고 (억 단위)
  float 소수점 있는 숫자 (4바이트) 3.14f 실험값 (대충 OK)
  double 더 정밀한 소수 (8바이트) 3.141592 키, 무게
  decimal 초정밀 소수 (돈 계산용) 10.50m 가격, 금액
논리 bool 참/거짓 true, false 스위치 켜짐/꺼짐
문자 char 문자 1개 'A', '9' 알파벳, 키 입력
문자열 string 글자들의 모음 "Hello" 이름, 문장
날짜/시간 DateTime 날짜 + 시간 2025-07-23 14:00 달력, 시계
없음 null 값이 없음 (비어 있음) null 아직 모름, 공란
기타 object 모든 타입의 부모 (다 담을 수 있음) "문자" or 123 아무거나 담는 박스

 

포도라는 데이터를 과일이라는 변수에 담아보기

string 과일 = "포도";

 

오늘은 C#에 대해 학습하고 그 특징을 정리해 보았습니다.


C#이란?

C#은 2000년 마이크로소프트에서 발표한 프로그래밍 언어입니다.
기본적으로 C/C++ 언어에서 파생되었으며, C++의 강력한 성능과 Java의 편리함 및 안전성을 결합하여 만들어졌습니다.

현재 윈도우 애플리케이션 개발뿐만 아니라, 유니티(Unity) 엔진의 주력 스크립트 언어로 사용되어 게임 개발자에게는 필수적인 언어로 자리 잡았습니다.

 

C#의 3가지 핵심 특징

강력한 타입 시스템

  • C#은 변수를 생성할 때 해당 변수 안에 어떤 종류의 데이터가 들어갈지 미리 엄격하게 선언해야 합니다.
  • 이로 인해 코드를 실행하기 전인 컴파일 단계에서 오류를 미리 발견할 수 있어 프로그램의 안정성이 크게 높아집니다.

자동 메모리 관리

  • C나 C++에서는 개발자가 직접 메모리를 할당하고 해제해야 하는 번거로움과 위험이 있습니다.
  • 반면 C#은 가비지 컬렉터(Garbage Collector)가 백그라운드에서 실행되며 더 이상 사용하지 않는 메모리를 자동으로 찾아내어 청소해 줍니다. 덕분에 개발자는 메모리 누수 걱정 없이 로직 구현에만 집중할 수 있습니다.

.NET 플랫폼과 JIT 컴파일

  • 코드를 작성하면 바로 실행 파일(EXE)의 기계어로 변환되는 것이 아니라, 일단 중간 언어(IL, Intermediate Language)로 1차 컴파일됩니다.
  • 이후 프로그램을 실제 실행하는 시점에 JIT(Just-In-Time) 컴파일러가 이 중간 언어를 해당 컴퓨터 환경에 맞는 기계어로 번역하여 실행합니다. 이를 통해 다양한 운영체제와 하드웨어 환경에서 유연하게 동작할 수 있습니다.

 

C#의 객체 지향 프로그래밍 (OOP)

C#의 가장 큰 특징은 철저한 객체 지향 언어(Object-Oriented Programming, OOP)라는 점입니다.

OOP란?
프로그램을 단순히 명령어의 나열로 보는 것이 아니라, 현실 세계의 사물을 컴퓨터 세계 속 객체로 만들고, 이 객체들을 조립하고 상호작용하게 하여 프로그램을 만드는 방식입니다.

  • 클래스 (Class): 객체를 만들기 위한 설계도나 틀 (예: 붕어빵 틀)
  • 객체 (Object): 클래스라는 틀을 바탕으로 메모리상에 실제로 만들어진 실체 (예: 팥 붕어빵, 슈크림 붕어빵)

 

4. OOP의 4대 핵심 원칙

객체 지향 프로그래밍을 제대로 활용하기 위해 반드시 알아야 할 4가지가 있습니다.

  1. 캡슐화 (Encapsulation)
    • 관련된 데이터와 기능을 하나의 클래스 안에 묶는 것입니다.
    • 외부에서 함부로 접근하면 안 되는 중요한 내부 데이터는 숨기고(정보 은닉), 필요한 기능만 밖으로 노출해 안전하게 보호합니다.
  2. 상속 (Inheritance)
    • 이미 만들어진 부모 클래스의 특성(데이터와 기능)을 자식 클래스가 그대로 물려받는 것입니다.
    • 중복되는 코드를 다시 작성할 필요가 없어 코드의 재사용성이 매우 높아집니다.
  3. 다형성 (Polymorphism)
    • 같은 이름의 명령이나 메서드가 상황이나 객체에 따라 다르게 동작하는 성질입니다.
    • (예: 공격이라는 명령을 내렸을 때, 검사는 칼을 휘두르고 마법사는 마법을 쓰는 것처럼 각자 다르게 반응함)
  4. 추상화 (Abstraction)
    • 복잡한 세부 사항은 숨기고, 프로그램에 꼭 필요한 핵심적인 특징과 기능만을 추출하여 모델링하는 과정입니다.

오늘은 Visual Studio를 이용한 첫 프로그램을 만들어 봤습니다.

 

 

Visual Studio 시작하기

VS를 실행한 첫 화면에서 새 프로젝트 만들기를 선택하고 다음으로 콘솔 앱을 고릅니다.

 

 

 

프로젝트 구성

새 프로젝트 구성에서는 프로젝트의 이름과 저장위치를 정합니다.

이름을 정하는 데에는 보편적인 규칙이 있습니다.

  1. 영어와 숫자로 쓸 것
  2. 맨 앞자리는 영어로 사용할 것
  3. 띄어쓰기를 포함한 특수문자는 사용하지 말 것. 단, _(언더바)는 가능

 

 

다음 화면에서 최상위 문 사용 안함을 체크한뒤 만들기를 눌러 프로그램을 만든다.

최상위 문이란 c#의 class, namespace, Main()등을 생략하고 프로그램 시작코드를 작성할 수 있게 해주지만 c#의 구조를 명확히 배울 수 있도록 최상위 문을 사용하지 않고 프로그램을 만든다.

 

 

IDE -코드편집화면

상단 중앙부에 프로젝트 실행 버튼을 누르면 VS에 적힌 코드 작성부의 Hello, World!라는 문장이 출력된다.

 

 

 

Hello, World! 부분을 다르게 바꿀시 바꾼 글로 출력이 된다.

설치 파일을 이용해 다운로드 했습니다.

 

 

 

 

워크로드 설정이 필요하기에 NET 데스크톱 개발과 Unity를 사용한 게임 개발을 선택하고 설치합니다.

 

 

 

설치가 완료되고 실행하면 로그인 화면이 나옵니다.

 

최근에 해본 게임 이야기

새티스팩토리를 깊이 있게 플레이했습니다.

원자재 채굴부터 2차 가공, 그리고 물류 이송까지 모든 생산 공정을 컨베이어 벨트로 촘촘하게 연결하여 멈춤 없이 돌아가는 거대한 공장 시스템을 만드는 과정이 재미있었습니다.

다만 공장 부지가 맵 전체로 거대해질수록 전력망 오버로드가 발생하거나 자원의 병목 구간이 생겼을 때 1인칭 시점으로 맵을 일일이 걸어 다니며 원인을 찾고 수정해야 해서 피곤하게 되는 아쉬움도 있었습니다.

하지만 공장을 완성하고 높은 곳에 올라가 많은 컨베이어 벨트와 각종 공정기계들이 완벽하게 맞물려 작동하며 자원을 운반하는 대규모 공장을 한눈에 내려다보았을 때는 기분이 좋았습니다.

 

내가 만들고 싶은 게임 상상하기

내가 앞으로 만들어보고 싶은 게임은 격자 형태의 부지 위에서 자원을 이동시키고 결합해 나가는 그리드 기반의 자원 자동화 배송 퍼즐 장르입니다.

정해진 몇 가지 자원들을 이용해 깔끔하게 공정을 돌리며 화면을 가만히 바라보기만 해도 힐링이 되는 직관적인 분위기를 연출하고 싶습니다.

유저가 마우스를 활용해 편리하게 컨베이어와 공정기계들을 배치하며 최적화 경로를 설계할 수 있도록 컴퓨터 환경에서 돌아가게 하고싶습니다.

여기에 넣고 싶은 핵심 기능은 유저가 완성한 공장 라인 구간을 그대로 데이터화하여 저장한 뒤, 맵의 다른 장소에 똑같이 복사해서 붙여넣을 수 있는 청사진 기능입니다.

 

실제 비슷한 게임 찾아보기

이렇게 머릿속으로 상상한 게임 아이디어는 shapez2라는 게임과 닮아 있습니다.

캐릭터 직접 조작이나 전투 요소 등을 배제하고 탑다운 뷰에서 도형 자원을 자르고 색칠하여 목적지까지 배송하는 물류 시스템 설계에 집중하는 구조가 제가 만들어보고 싶은 방향과 비슷합니다.

이 게임으로부터는 유저가 복잡한 시스템 앞에서도 길을 잃지 않도록 돕는 정돈된 UI/UX 배치 방식을 배우고 싶습니다.

그리고 이전에 만들었던 자원이 이후의 단계에서 자연스럽게 사용되는 시스템도 배우고 싶습니다.

 

게이머와 개발자 시선 비교하기

게이머일 때 자동화 장르를 즐길 때는 물류 공장이 막힘없이 쾌적하게 굴러가니 보는 게 재미있다고 생각했습니다.

하지만 개발자가 되면 수많은 아이템 특정 구역에 몰려 서로 꼬이거나하는 걸 막기도 해야하고 벨트의 이동속도와 자원의 생산 균형을 잘 맞춰야한다는 것도 알게되었습니다.

게임 소개

■ 게임 이름: Subnautica

■ 개발사: Unknown Worlds Entertainment

■ 출시 연도: 2018년 (정식 출시 기준)

■ 지원 플랫폼: PC (Windows, macOS), PlayStation 4/5, Xbox One/Series X|S, Nintendo Switch

 

제작 및 개발 과정 조사

자체 개발 엔진에서 Unity 엔진으로의 전환

개발사 언노운 월즈는 이전 게임인 Natural Selection 2까지 자체 개발 엔진을 사용했으나 새로운 아이디어를 빠르게 실험하고 프로토타이핑하는 데 한계를 느껴 2013년부터 Unity 엔진으로 전격 전환했습니다.

3D 복셀구조와 독자적 레벨 툴 통합

서브노티카의 가장 큰 기술적 특징은 세계관 전체가 3D 복셀 구조로 완전히 구축되어 있다는 점입니다. 개발진은 유니티의 강력한 에디터 확장성을 활용해 유니티 에디터 내부에 독자적인 레벨 빌딩 툴을 통합하여 해양 세계를 정교하게 설계했습니다.

전 세계 소규모 다국적 팀의 유기적인 협업 워크플로우

샌프란시스코의 개발자와 브뤼셀의 아티스트 등 전 세계에 흩어진 28명의 소규모 다국적 팀이 유니티와 연동된 Plastic SCM 버전 관리 시스템을 활용해 거대한 프로젝트 에셋을 실시간으로 안전하게 동기화하며 개발했습니다. 아티스트 같은 비기술 직군까지 편하게 다룰 수 있는 유니티 기반의 친화적인 워크플로우 덕분에 개발진이 아키텍처 코드 수정에 매몰되지 않고 오직 유저가 체감하는 게임플레이 재미에만 집중할 수 있는 유연한 환경을 구축해 냈습니다.

 

직접 플레이 후기 및 체험 기록

플레이 시간: 약 112시간

좋았던 점 및 느낀점:

서브노티카는 이질적인 외계 바다의 아름다움과 깊은 수중 속에서 오는 심해 공포증을 적절한 밸런스로 엮어내어 압도적인 몰입감을 선사합니다.

보이지 않는 곳에 거대한 포식자가 숨어있을지 모른다는 긴장감과 이를 극복하기 위해 잠수함과 여러 생존 장비를 하나씩 구축해 나가는 시스템적 재미가 매우 뛰어납니다.

Unity 엔진의 특징이 체감되었던 부분:

수많은 해양 크리처들이 실시간으로 유기적인 움직임을 보여주는 생태계 시스템 속에서도 플레이어가 수영을 하거나 이동할 때 물의 저항력과 가속도가 부드럽게 연산되는 유니티 3D 물리 엔진 고유의 뛰어난 반응성과 조작감을 깊이 체감할 수 있었습니다.

아쉬운 점:

오픈월드 환경의 방대함과 데이터 복잡성으로 인해 전 세대 콘솔이나 특정 사양 환경에서 간헐적인 팝인 현상이나 미세한 프레임 변화가 느껴지는 점은 다소 아쉬운 최적화 부분으로 남습니다.

 

배운 점과 인사이트

빠른 프로토타이핑과 유연한 도구 커스텀의 가치

자체 엔진의 고집을 버리고 유니티를 선택해 아이디어를 빠르게 시각화하고 엔진을 프로젝트 입맛에 맞게 확장하여 고유의 기획을 실현해 낸 개발사의 유연한 태도야말로 인디 스튜디오가 글로벌 명작을 만들어낸 핵심 비결임을 배웠습니다.

플랫폼 한계를 극복하는 자원 아키텍처 최적화의 중요성

PC 기반의 무거운 서브노티카를 한정된 메모리의 닌텐도 스위치에 이식할 때 프레임 드랍과 크래시 문제를 해결하기 위해 유니티 전문가들과 협업하여 어드레서블 자원 시스템을 프로젝트 맞춤형으로 재구성해 낸 사례가 인상적이었습니다.

기획 단계부터 하드웨어 환경을 고려한 메모리 및 데이터 최적화 설계가 얼마나 필수적인지 깊이 깨달았습니다.

 

스크린샷

 


※ 참고 링크

 

내가 상상하는 게임 아이디어: 마법 대장간

장르: 판타지 공방 경영 및 대량 생산 자동화 시뮬레이션

내용: 광산에서 들어오는 광석과 던전에서 수집되는 마법 재료를 컨베이어 벨트에 태웁니다. 이 자원들은 자동 용광로를 거쳐 주괴가 되고 마법 모루를 통해 무기와 방어구로 제련됩니다. 이에 더해 여러 약초와 마법 재료들을 조합하여 영약과 포션까지 함께 대량 생산하며 이를 왕국 군대나 모험가 길드에 납품하는 마법 자동화 라인을 설계하는 게임입니다.

 

게임의 핵심 재미 요소

거대해지는 생산 기지와 설계의 만족감

초기에는 재료들을 조금씩 수집하고 직접 팔아서 소박하게 돈을 벌지만 나중에는 대량으로 수급되는 자원과 다양한 자동화 기기들을 이용해 장비들을 찍어내듯 생산하게 됩니다. 이 과정에서 수량적 만족감을 얻을 수 있으며 내가 직접 설계한 복잡한 자동화 라인이 막힘없이 완벽하게 굴러가는 모습을 보며 깊은 공학적 성취감을 느낍니다.

성장 시각화가 주는 카타르시스

시작은 투박하고 초라한 철검을 만들지만 공장과 테크 트리를 업그레이드할수록 화려하고 강력한 장비들이 컨베이어 벨트를 가득 채우며 이동하는 장관을 보게 되고 눈으로 직접 확인하는 공방의 성장을 통해 시각적인 몰입감을 줍니다.

 

주요내용

그릿이란

그릿은 장기 목표에 대한 열정과 끈기를 의미하며, 어려워도 포기하지 않고 도전하는 일종의 근성이다.

성공의 열쇠를 결정짓는 요소를 논할 때 타고난 재능보다 중요한 것은 목표를 향해 꾸준히 노력하는 태도이다.

성공의 요소

안젤라교수는 수학을 가르치며 학생들을 관찰한 결과, IQ가 높은 학생보다 지속적으로 노력하고 끈기 있는 학생들이 더 성공적이라는 사실을 발견했다.

이처럼 그릿은 오랜 시간 동안 목표를 실현하기 위해 끊임없이 에너지를 쏟아붓는 끈질긴 노력으로 구성된다.

성장 마인드셋과 후천적 훈련

그릿은 타고나는 게 아니라 꾸준한 훈련과 교육으로 길러질 수 있다.

실패를 두려워않고 많은 도전에 자신을 던지며 목표를 추구하는 환경을 경험하는 것이 그릿을 성장시키는 방법이다.


다짐, 느낀 점

근성은 신체의 근육을 기르는 과정과 같아서 쉽고 간단한 것만 해서는 발달할 수 없다는 걸 알게되었고 열심히 머리를 혹사시켜야 한다는 걸 알게됐고, 부트캠프 과정에서 어려운 문제를 만나면서 성장 하도록 노력하며 어떤 순간에도 포기하지 않고 끝까지 완주해 내는 끈기 있는 사람이 되겠습니다.

 

관련 유튜브 영상

+ Recent posts