가장 작은 C# 프로그램 읽기
C#을 처음 배울 때 가장 먼저 만나는 코드는 보통 다음 한 줄입니다.
Console.WriteLine("Hello, C#!");실행하면 터미널에 다음처럼 출력됩니다.
Hello, C#!이 한 줄은 짧지만 C# 프로그램의 중요한 특징을 담고 있습니다.
Console은 터미널과 대화하기 위한 도구입니다. 여기서 터미널은 dotnet run을 입력하고 결과를 확인하는 검은 화면 또는 명령줄 창을 말합니다. WriteLine은 한 줄을 출력하는 기능입니다. 괄호 안의 "Hello, C#!"는 출력할 문자열입니다. 문자열은 글자 데이터를 뜻하며, C#에서는 큰따옴표로 감쌉니다.
마지막의 세미콜론 ;도 중요합니다. C#에서는 하나의 실행 문장이 끝났다는 표시로 세미콜론을 붙입니다. 초보자가 자주 만나는 오류 중 하나가 세미콜론을 빠뜨리는 것입니다.
Console.WriteLine("Hello, C#!")위 코드는 실행되지 않습니다. 컴파일러는 문장이 어디서 끝나는지 알 수 없기 때문입니다.
AI 생성 이미지
최상위 문장 방식 이해하기
최신 C# 콘솔 프로젝트를 만들면 Program.cs 파일에 다음처럼 간단한 코드가 들어 있을 수 있습니다.
Console.WriteLine("Hello, World!");이처럼 파일의 가장 바깥에 바로 실행 문장을 쓰는 방식을 최상위 문장이라고 합니다. 영어로는 top-level statements라고 부릅니다.
예전 C#에서는 프로그램을 시작하려면 반드시 Main 메서드를 직접 작성해야 했습니다. 하지만 지금은 학습자와 실무 개발자가 간단한 프로그램을 더 빠르게 작성할 수 있도록 최상위 문장 방식을 사용할 수 있습니다.
다음 두 코드는 거의 같은 역할을 합니다.
Console.WriteLine("Hello, C#!");전통적인 형식으로 쓰면 다음과 같습니다.
using System;
namespace MyFirstApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, C#!");
}
}
}처음에는 첫 번째 코드가 훨씬 편합니다. 그래서 이 책에서도 초반에는 최상위 문장 방식을 주로 사용합니다. 다만 두 번째 형식도 읽을 수 있어야 합니다. 다른 사람의 코드, 오래된 예제, 회사 프로젝트에서는 여전히 class Program과 Main 메서드를 볼 수 있기 때문입니다.
핵심은 단순합니다. C# 프로그램은 결국 "어디서 시작할 것인가"가 필요합니다. 전통적인 형식에서는 Main 메서드가 시작점입니다. 최상위 문장 방식에서는 컴파일러가 보이지 않는 Main 메서드를 대신 만들어 준다고 이해하면 됩니다.
using, namespace, class, method가 하는 일
전통적인 형식의 코드를 다시 살펴보겠습니다.
using System;
namespace MyFirstApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, C#!");
}
}
}처음 보면 괄호가 많고 단어도 낯설게 느껴집니다. 하나씩 역할만 파악하면 됩니다.
using System;은 System이라는 기본 기능 묶음을 사용하겠다는 뜻입니다. Console은 System 안에 들어 있는 기능입니다. 최신 콘솔 프로젝트에서는 기본 using이 자동으로 적용되어 using System;을 직접 쓰지 않아도 되는 경우가 많습니다. 그래도 using은 "어떤 기능 묶음을 가져와 쓸 것인가"를 나타내는 문법이라고 기억해 두면 됩니다.
namespace MyFirstApp은 코드의 이름 공간입니다. 이름 공간은 관련된 코드를 묶고, 같은 이름이 서로 충돌하지 않도록 도와줍니다. 예를 들어 여러 사람이 Program이라는 클래스를 만들 수 있지만, 서로 다른 namespace에 있으면 구분할 수 있습니다.
class Program은 클래스를 정의합니다. 클래스는 관련된 데이터와 기능을 담는 기본 단위입니다. 객체 지향 프로그래밍을 배울 때 자세히 다루겠지만, 지금은 "코드를 담는 큰 상자" 정도로 이해하면 충분합니다.
static void Main(string[] args)는 메서드입니다. 메서드는 이름이 붙은 코드 묶음입니다. 여기서는 Main이라는 이름의 메서드가 프로그램의 시작점 역할을 합니다.
중괄호 { }는 범위를 나타냅니다. 어떤 코드가 namespace 안에 있는지, class 안에 있는지, method 안에 있는지를 구분합니다. 들여쓰기는 컴퓨터에게 필수는 아니지만 사람에게 매우 중요합니다. 다음처럼 들여쓰기를 맞추면 코드 구조가 보입니다.
class Program
{
static void Main()
{
Console.WriteLine("들여쓰기는 구조를 보여 줍니다.");
}
}출력과 입력 처리하기
프로그램은 보통 사용자에게 무언가를 보여 주고, 사용자가 입력한 값을 받아 처리합니다. 콘솔 프로그램에서는 Console.WriteLine과 Console.ReadLine을 자주 사용합니다.
Console.WriteLine("이름을 입력하세요:");
string name = Console.ReadLine();
Console.WriteLine("안녕하세요, " + name + "님!");실행 예시는 다음과 같습니다.
이름을 입력하세요:
민수
안녕하세요, 민수님!Console.WriteLine은 화면에 한 줄을 출력합니다. Console.ReadLine은 사용자가 입력하고 Enter를 누를 때까지 기다린 뒤, 입력한 내용을 문자열로 가져옵니다.
string name = Console.ReadLine();은 뒤에서 더 자세히 배울 변수 문법을 포함합니다. 지금은 name이라는 이름의 보관함에 사용자의 입력을 저장한다고 이해하면 됩니다.
문자열을 합칠 때는 +를 사용할 수 있습니다.
Console.WriteLine("안녕하세요, " + name + "님!");또는 문자열 보간을 사용할 수도 있습니다.
Console.WriteLine($"안녕하세요, {name}님!");문자열 앞에 $를 붙이면 {name}처럼 중괄호 안에 변수 이름을 넣어 값을 자연스럽게 출력할 수 있습니다. 초보자에게는 이 방식이 더 읽기 쉽습니다.
Console.WriteLine("이름을 입력하세요:");
string name = Console.ReadLine();
Console.WriteLine($"안녕하세요, {name}님!");주석으로 코드 의도 남기기
주석은 프로그램 실행에 영향을 주지 않는 설명입니다. 컴퓨터가 아니라 사람을 위한 글입니다.
한 줄 주석은 //로 작성합니다.
// 사용자에게 이름을 물어본다.
Console.WriteLine("이름을 입력하세요:");
// 입력한 이름을 name 변수에 저장한다.
string name = Console.ReadLine();
// 저장된 이름을 사용해 인사 문장을 출력한다.
Console.WriteLine($"안녕하세요, {name}님!");여러 줄 주석은 /* */를 사용합니다.
/*
이 프로그램은 사용자 이름을 입력받고
간단한 인사 문장을 출력한다.
*/
Console.WriteLine("이름을 입력하세요:");주석은 많을수록 좋은 것이 아닙니다. 코드만 봐도 알 수 있는 내용을 반복하면 오히려 읽기 어려워집니다.
좋지 않은 주석의 예입니다.
// Hello를 출력한다.
Console.WriteLine("Hello");이 주석은 코드와 같은 말을 반복합니다. 더 나은 주석은 "왜 이 코드가 필요한지"를 설명합니다.
// 첫 실행 확인을 위해 고정된 문장을 출력한다.
Console.WriteLine("Hello");학습 중에는 주석을 학습 노트처럼 사용해도 좋습니다.
// WriteLine은 출력 후 줄바꿈을 한다.
Console.WriteLine("첫 번째 줄");
Console.WriteLine("두 번째 줄");이렇게 적어 두면 나중에 코드를 다시 읽을 때 개념을 빠르게 떠올릴 수 있습니다.
컴파일 오류와 실행 오류 읽기
프로그램이 한 번에 잘 실행되지 않는 것은 자연스러운 일입니다. 중요한 것은 오류 메시지를 읽는 습관입니다.
먼저 컴파일 오류를 보겠습니다.
Console.WriteLine("Hello")세미콜론을 빠뜨린 코드입니다. dotnet run을 실행하면 비슷한 메시지를 볼 수 있습니다.
Program.cs(1,27): error CS1002: ; expected이 메시지는 여러 정보를 담고 있습니다.
Program.cs: 오류가 발생한 파일(1,27): 1번째 줄, 27번째 글자 근처error CS1002: 오류 번호; expected: 세미콜론이 필요하다는 설명
처음에는 영어 메시지가 부담스럽지만, 전부 해석하려고 하지 않아도 됩니다. 파일 이름, 줄 번호, 핵심 단어를 먼저 보면 됩니다. expected는 "필요하다", "예상했다"는 뜻으로 자주 등장합니다.
실행 오류는 컴파일은 되었지만 실행 중에 문제가 생기는 경우입니다. 예를 들어 숫자를 입력받는다고 가정해 보겠습니다.
Console.WriteLine("나이를 입력하세요:");
int age = int.Parse(Console.ReadLine());
Console.WriteLine($"내년에는 {age + 1}살입니다.");사용자가 20을 입력하면 잘 동작합니다.
나이를 입력하세요:
20
내년에는 21살입니다.하지만 사용자가 스무살처럼 숫자가 아닌 값을 입력하면 실행 중 오류가 발생합니다.
Unhandled exception. System.FormatException: The input string '스무살' was not in a correct format.이것은 문법이 틀린 것이 아닙니다. 프로그램은 실행되었지만, 숫자로 바꿀 수 없는 값을 숫자로 바꾸려고 해서 문제가 생긴 것입니다. 이런 오류를 예외라고 부릅니다. 예외 처리는 뒤에서 자세히 다룹니다. 지금은 컴파일 오류와 실행 오류가 다르다는 점만 구분하면 됩니다.
흔한 실수
첫 프로그램을 작성할 때 자주 만나는 실수는 다음과 같습니다.
문자열을 큰따옴표로 감싸지 않는다.
문장 끝에 세미콜론을 빠뜨린다.
괄호
(,), 중괄호{,}의 짝을 맞추지 않는다.WriteLine의 대소문자를 틀린다.오류 메시지를 읽지 않고 코드를 무작정 다시 작성한다.
C#은 대소문자를 구분합니다. Console.WriteLine과 console.writeline은 같은 이름이 아닙니다.
console.writeline("Hello"); // 오류
Console.WriteLine("Hello"); // 올바른 코드오류가 나면 먼저 가장 가까운 줄을 확인하세요. 다만 실제 원인은 바로 윗줄에 있을 때도 많습니다. 특히 세미콜론 누락이나 괄호 누락은 다음 줄에서 오류가 표시될 수 있습니다.
작은 연습 문제
다음 코드를 직접 작성하고 실행해 보세요.
Console.WriteLine("이름을 입력하세요:");
string name = Console.ReadLine();
Console.WriteLine("좋아하는 언어를 입력하세요:");
string language = Console.ReadLine();
Console.WriteLine($"{name}님은 {language}을 배우고 있습니다.");실행 예시는 다음과 같습니다.
이름을 입력하세요:
지민
좋아하는 언어를 입력하세요:
C#
지민님은 C#을 배우고 있습니다.이제 코드를 조금 바꿔 보세요.
첫 줄에 이 프로그램이 하는 일을 주석으로 적어 보세요.
출력 문장을 원하는 문장으로 바꿔 보세요.
세미콜론 하나를 일부러 지운 뒤 오류 메시지를 확인해 보세요.
WriteLine을writeline으로 바꿔 보고 어떤 오류가 나오는지 읽어 보세요.
작은 프로그램이라도 구조를 알고 읽으면 이후 문법을 배울 때 덜 흔들립니다. 코드는 결국 정해진 위치에 놓인 작은 문장들의 모음입니다. 지금 익힌 출력, 입력, 주석, 오류 읽기 습관이 앞으로의 학습을 지탱합니다.
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.