Chapte02. 처음 만드는 C# 프로그램
1. 새 프로젝트 생성
2. 구조

▲ 코드 편집기

▲ 솔루션 탐색기
using System;
using static System.Console;
namespace Hello
{
class MainApp
{
// 프로그램 실행이 시작되는 곳
static void Main(string[] args)
{
if (args.Length == 0)
{
Console.WriteLine("사용법 : Hello.exe <이름>");
return;
}
WriteLine("Hello, {0}!", args[0]);
}
}
}
▲ 솔루션 탐색기
3. 빌드(실행파일 확인하기)

▲ 빌드 후 위와 같은 폴더를 열기

▲ 실행파일의 경로는 bin\Debug\net9.0 에 있음
4. 실행

▲ 실행파일이 있는 경로로 이동
> cd C:\testC#\Hello\Hello\bin\Debug\net9.0

▲ 실행
Chapter03. 데이터 보관하기
1. 값 형식 vs 참조 형식
1) 값 형식
> 변수가 값을 담는 데이터 형식
> 스택(stack)과 연관됨
2) 참조 형식
> 변수가 값이 있는 곳의 위치를 담는 데이터 형식
> 힙(Heap)과 연관됨(스택은 참조형식으로 연관있음)
> 힙에 "실제 값"을 저장, 스택에는 "그 값을 참조하는 위치"를 저장
2.1) 가비지 컬렉터(Garbage Collector)
> 힙에 더 이상 사용하지 않은 객체를 자동으로 수거해가는 CLR 도구
> 스택은 블록이 끝나며 사라지고, "실제 값"이 저장된 힙에 내용들은 가비지 컬렉터가 수거해 감
2. decimal(소수)
> decimal은 부동 소수점 형식(float, double)의 한 종류로써 16바이트의 크기를 가져 매우 정밀하게 소수점을 나타낼 수 있는 데이터
using System;
namespace FloatingPoint
{
class MainApp
{
static void Main(string[] args)
{
float a = 3.1415_9265_3589_7932_3846_2643_3832_79f;
Console.WriteLine(a);
double b = 3.1415_9265_3589_7932_3846_2643_3832_79;
Console.WriteLine(b);
decimal c = 3.1415_9265_3589_7932_3846_2643_3832_79m;
Console.WriteLine(c);
}
}
}

3. String(문자열)
> String은 문자열 형식으로써 데이터의 크기가 따로 정해져 있지 않는 데이터
1) 일반적 사용
using System;
namespace String
{
class MainApp
{
static void Main(string[] args)
{
string str = "Hello, World!";
string str2 = "My name is myeonjin.";
Console.WriteLine(str);
Console.WriteLine(str2);
}
}
}

2) 줄바꿈 사용
using System;
namespace String
{
class MainApp
{
static void Main(string[] args)
{
string multiline = "첫 번째 줄\n두 번째 줄\n세 번째 줄"; // 전통적
string multiline2 = """ // 새로운 방식
첫 번째 줄
두 번째 줄
세 번째 줄
""";
Console.WriteLine(multiline);
Console.WriteLine();
Console.WriteLine(multiline2);
}
}
}
4. Object(만능)
> int, long, char 등 모든 자료형을 담을 수 있는 특별한 데이터
> 참조 형식임
using System;
namespace Object
{
class Program
{
static void Main(string[] args)
{
object num = 123; // 정수
object decimalNum = 3.141592653589793238462643383279m; // 소수
object bo_ol = true; // 불
object text = "Hello, World!"; // 문자열
Console.WriteLine(num);
Console.WriteLine(decimalNum);
Console.WriteLine(bo_ol);
Console.WriteLine(text);
}
}
}
4.1 박싱
> 변수는 스택에, 실제 값은 박싱(Boxing)하여 힙에 저장하고 스택에 있는 변수가 힙에 있는 실제 값을 참조하는 형태를 만드는 것
5. 형 변환
1) Parse()
> 문자열을 숫자로, 문자열을 부동 소수형으로 변환할 때 사용하는 메서드
> 정수형과 부동 소수형 모두 존재하는 메서드임
int a = int.Parse("12345"); // 문자열 "12345"를 정수 12345로 변환
float b = float.Parse("123.45"); // 문자열 "123.45"를 부동소수 123.45로 변환
2) ToString()
> 숫자를 문자열로, 부동 소수형을 문자열로 변환할 때 사용하는 메서드
> 위와 같음
int c = 12345;
string d = c.ToString(); // 정수 12345를 문자열 "12345"로 변환
float e = 123.45;
string f = e.ToString(); // 부동 소수 123.45를 문자열 "123.45"로 변환
6. 열거형(enum)
> 기본적으로 상수이므로 한번 정의 후에는 변경할 수 없음
1) 형태
enum 열거형 : 기반자료형 {상수1, 상수2, 상수,3 ... } // 기반자료형을 정의하지 않은 경우는 int로 설정됨
using System;
namespace Enum
{
class MainApp
{
enum DialogResult { YES, NO, CANCEL, CONFIRM, OK }
static void Main(string[] args)
{
Console.WriteLine((int)DialogResult.YES);
Console.WriteLine((int)DialogResult.NO);
Console.WriteLine((int)DialogResult.CANCEL);
Console.WriteLine((int)DialogResult.CONFIRM);
Console.WriteLine((int)DialogResult.OK);
}
}
}

> 기반자료형을 정의하지 않아 정수형이 기본으로 사용되었고, YES부터 0, NO는 1 ... 로 정의하여 출력된 것을 볼 수 있다.
> 결국 열거형의 사용 목적은 성질이 비슷한 상수들을 중복없이 정의하기 위함.
7. Nullable
> 어떤 값도 가지지 않을 수 있는, 비어있는 변수를 만들 때 사용되는 키워드
1) 사용방법
> ? 를 쓴다
// 데이터형 ? 변수명;
int? a = null;
float? b = null;
double? c = null;
2) HasValue
> Nullable 형식의 변수가 값을 가지는지, 아닌지를 나타내기 위한 속성
int? a = null;
Console.WriteLine(a.HasValue); // False, 변수 a가 값을 가지지 않으므로
a = 37;
Console.WriteLine(a.HasValue); // True, 변수 a가 값을 가지므로
3) Value
> Nullable 형식의 값을 출력하기 위한 속성
int? a = null;
a = 37;
Console.WriteLine(a.Value); // 37 출력
8. var
> 모든 형식을 대신해줄 수 있는 키워드
> 컴파일 타임에서 값에 맞는 형식으로 자동으로 변환해준다
var a = 10; // 정수형 >> int a = 10;
var b = 3.141592; // 부동소수형 >> float b = 3.141592;
var c = "안녕하세요?" // 문자열형 >> string c = "안녕하세요?"
var d = new int[] {10, 20, 30}; // 배열형 >> int d = new int[] {10, 20, 30}
※ object형과의 차이점
> object는 참조형 데이터임. CLR이 실제 값을 박싱(boxing)하여 힙(Heap)에, 위치를 스택(stack)에 저장하는 형식인 반면, var은 컴파일 타임에서 실제 자료형으로 변환하기 때문에 CLR 입장에서는 실제 자료형으로 인식하게 됨.
'LMS 7 > 개발일지' 카테고리의 다른 글
| 25.09.28 개발일지 / C# 2(2) (Chapter09, Chapter10) (0) | 2025.11.11 |
|---|---|
| 25.09.27 개발일지 / C# 2(1) (Chapter07, Chapter08) (0) | 2025.11.11 |
| 25.09.25 개발일지 (0) | 2025.11.04 |
| 25.09.24 개발일지 / Windows Git (0) | 2025.11.04 |
| 25.09.23 개발일지 (0) | 2025.11.04 |