이번 포스팅에서는 C#의 기본적인 문법을 이해하고, 그 구성 요소인 변수(Variable), 데이터 타입(Types), 연산자(Operator), 표현식(Expression), 문장(Statement) 그리고 제어문(conditional / loop statements)에 대해 알아볼 것입니다.
프로그래밍 초보자부터 경험 있는 개발자까지 모두 C#의 기본을 탄탄히 다질 수 있는 내용을 다루겠습니다.
변수 (Variable)
C# 변수란?
C# 변수는 프로그램에서 데이터를 저장하고 관리하는 기본 단위입니다.
C#에서 변수는 특정한 데이터 타입을 가지며, 이를 통해 메모리 상에 어떤 종류의 데이터를 저장할지 결정합니다. 이를 통해 다양한 연산과 데이터 처리 작업을 수행할 수 있습니다.
변수 선언과 초기화
C#에서 변수를 사용하기 위해서는 먼저 선언(declaration)과 초기화(initialization)가 필요합니다.
선언은 변수의 데이터 타입과 이름을 지정하는 과정이고, 초기화는 변수에 초기 값을 할당하는 것입니다:
int number = 42; // 정수형 변수 선언 및 초기화 string greeting = "Hello, World!"; // 문자열형 변수 선언 및 초기화
C# 변수의 종류
C#에서는 다음과 같은 기본 데이터 타입 변수를 사용할 수 있습니다:
- 정수형(int, long, short 등): 정수 값을 저장하는 변수로, 메모리 크기에 따라 다르게 사용됩니다.
- 실수형(float, double, decimal): 부동 소수점을 포함한 실수 값을 저장합니다.
- 문자열형(string): 텍스트 데이터를 저장하는 변수로, 문자열을 다룰 때 사용됩니다.
- 불리언형(bool):
true
또는false
값만을 저장하는 변수입니다.
int age = 30; Console.WriteLine(age); double temperature = 36.6; Console.WriteLine(temperature); string name = "Alice"; Console.WriteLine(name); bool isCSharpFun = true; Console.WriteLine(isCSharpFun);
C# 변수의 특징
- 강한 타입 검사:
- C#은 강한 타입 검사를 지원합니다.
- 이는 변수의 타입이 명확하게 지정되어 있어야 하며, 타입 불일치로 인한 오류를 방지합니다.
- 자동 형 변환:
- 특정 경우에 C#은 자동으로 변수의 타입을 변환합니다.
- 예를 들어, 정수형 변수가 실수형 변수에 할당될 때 자동으로 형 변환이 발생합니다.
- 가비지 컬렉션:
- C#에서 변수에 할당된 메모리는 사용 후 자동으로 해제됩니다.
- 이는 C#의 가비지 컬렉션 기능에 의해 관리됩니다.
최신 C#에서의 변수
최신 C# 버전에서는 변수 선언과 초기화를 더욱 편리하게 만들어주는 기능이 도입되었습니다:
var
키워드:- 변수의 타입을 자동으로 추론해주는 기능입니다.
- 예를 들어
var name = "John";
는name
변수가 문자열임을 자동으로 인식합니다.
// var keyword examples var vNumber = 10; // 정수 var vName = "John Doe"; // 문자열 var vIsCSharpFun = true; // 불리언 var vSalary = 30000.50; // 실수 Console.WriteLine($"Value: {vNumber}, Type: {vNumber.GetType()}"); Console.WriteLine($"Value: {vName}, Type: {vName.GetType()}"); Console.WriteLine($"Value: {vIsCSharpFun}, Type: {vIsCSharpFun.GetType()}"); Console.WriteLine($"Value: {vSalary}, Type: {vSalary.GetType()}");
Value: 10, Type: System.Int32 Value: John Doe, Type: System.String Value: True, Type: System.Boolean Value: 30000.5, Type: System.Double
string interpolation
:$
기호를 문자열 앞에 사용하여, 문자열 안에서 변수 값을 손쉽게 삽입할 수 있는 기능입니다.- 예를 들어
string message = $"Hello, {name}!";
는 변수name
의 값을 문자열에 삽입합니다.
// string interpolstaion examples var user = "Alice"; var day = "Wednesday"; var temp = 23.4; // using string interpolation var message = $"Hello, {user}! Today is {day}, and the temperature is {temp} degrees."; Console.WriteLine(message);
Hello, Alice! Today is Wednesday, and the temperature is 23.4 degrees.
이러한 기능들은 개발자의 생산성을 높이고, 코드의 가독성을 향상시켜 줍니다.
연산자, 표현식 및 문장 이해하기
개요
프로그래밍 언어의 핵심을 이루는 것은 바로 연산자, 표현식, 그리고 문장입니다.
C# 언어를 통해 복잡한 문제를 해결하기 위해서는 이 세 가지 구성 요소를 어떻게 활용하는지 이해하는 것이 중요합니다.
연산자 (Operator)
C#에서 연산자는 데이터를 조작하고, 값을 비교하며, 조건에 따라 연산을 수행하는 데 사용됩니다. 연산자는 크게 산술, 비교, 논리, 할당 연산자로 나눌 수 있습니다.
- 산술 연산자 (Arithmetic Operators):
+
,-
,*
,/
,%
등 - 비교 연산자 (Comparison Operators):
==
,!=
,>
,<
,>=
,<=
등 - 논리 연산자 (Logical Operators):
&&
,||
,!
등 - 할당 연산자 (Assignment Operators):
=
,+=
,-=
,*=
,/=
등
int a = 10; int b = 20; int sum = a + b; // 산술 연산자 사용 bool isEqual = (a == b); // 비교 연산자 사용
표현식 (Expression)
표현식은 값, 변수, 연산자의 조합으로 구성되며, 항상 값을 반환합니다.
표현식은 프로그램의 로직을 구성하는 데 필수적인 요소입니다.
int area = length * width; // length & width variable, * is operator
문장 (Statement)
문장은 실행 가능한 최소한의 독립적인 코드 단위입니다.
C# 프로그램은 다양한 문장들로 구성되어 있으며, 각 문장은 보통 세미콜론(;
)으로 끝납니다.
Console.WriteLine("Hello, World!");
제어문: 조건문과 반복문
개요
프로그래밍 언어의 강력한 기능 중 하나는 조건에 따라 코드의 실행 흐름을 제어할 수 있다는 점입니다.
C#에서 이를 가능하게 하는 주요 도구는 조건문과 반복문입니다.
이 두 제어문을 이해하고 적절히 사용하는 것은 효율적인 프로그램을 작성하는 데 필수적입니다.
조건문 (Conditional Statements)
조건문은 주어진 조건의 참/거짓 여부에 따라 다른 코드 블록을 실행합니다.
C#에서는 주로 if
, else if
, else
, switch
문을 사용합니다.
if문
가장 기본적인 조건문으로, 주어진 조건이 참(True)일 때만 코드 블록을 실행합니다.
if (temperature > 30) { Console.WriteLine("It's hot outside!"); }
Else If와 Else 문:
if
문의 조건이 거짓(False)일 때 추가 조건을 검사하거나, 모든 조건이 거짓일 때 실행할 코드를 지정합니다.
if (temperature > 30) { Console.WriteLine("It's hot outside!"); } else if (temperature < 10) { Console.WriteLine("It's cold outside!"); } else { Console.WriteLine("It's a nice day!"); }
Switch 문:
한 변수의 값에 따라 여러 코드 블록 중 하나를 실행합니다. 각 경우는 case
키워드로 표시됩니다.
switch (dayOfWeek) { case DayOfWeek.Monday: Console.WriteLine("Start of a new week!"); break; case DayOfWeek.Friday: Console.WriteLine("Weekend is near!"); break; default: Console.WriteLine("It's a regular day."); break; }
반복문 (Loop Statements)
반복문은 조건이 참인 동안, 또는 컬렉션의 각 요소에 대해 코드 블록을 반복 실행합니다.
C#에서는 for
, foreach
, while
, do-while
반복문을 제공합니다.
For 문:
특정 횟수만큼 반복하고자 할 때 사용합니다.
for (int i = 0; i < 5; i++) { Console.WriteLine("Hello, World!"); }
Foreach 문:
컬렉션의 각 요소에 대해 순차적으로 코드를 실행합니다.
string[] names = { "Alice", "Bob", "Charlie" }; foreach (string name in names) { Console.WriteLine($"Hello, {name}!"); }
While 문:
조건이 참인 동안 코드 블록을 반복적으로 실행합니다.
int count = 1; while (count <= 5) { Console.WriteLine($"Count: {count}"); count++; }
Do-While 문:
코드 블록을 최소 한 번은 실행하고, 조건이 참인 동안 계속 실행합니다.
int count = 1; do { Console.WriteLine($"Count: {count}"); count++; } while (count <= 5);
접근 제어자
각각의 접근 제어자와 키워드를 사용하여, 데이터의 보호 및 캡슐화, 재사용성을 높이는 데 사용할 수 있습니다.
Public
public
접근 제어자는 클래스, 메서드, 속성 등을 정의할 때 사용되며, 어디에서나 접근이 가능하게 합니다.
외부의 다른 클래스나 어셈블리에서도 이들을 자유롭게 사용할 수 있습니다.
예제
아래 Person
클래스에 정의된 Name
속성은 다른 모든 클래스에서 접근 가능합니다.
public class Person { public string Name { get; set; } }
Protected
protected
접근 제어자는 클래스의 멤버가 선언된 클래스 또는 파생된(상속받은) 클래스 내에서만 접근할 수 있도록 제한합니다.
외부 클래스에서는 접근할 수 없습니다.
예제
아래 Animal
클래스에 정의된 Age
속성은 Animal
클래스 내부 혹은 Animal
클래스를 상속받은 Dog
클래스에서는 접근 가능하지만 그 외 클래스에서는 접근이 불가합니다.
public class Animal { protected int Age { get; set; } } public class Dog : Animal { public void SetAge(int age) { this.Age = age; } }
Private
private
접근 제어자는 가장 제한적인 접근 수준을 제공하며, 멤버를 선언한 클래스 내부에서만 접근할 수 있습니다.
외부 클래스나 상속받은 클래스에서는 접근할 수 없습니다.
예제
아래 Account
클래스에서의 balance
속성은 Account
클래스 내에서만 사용가능합니다.
public class Account { private double balance = 0.0; public void Deposit(double amount) { if (amount > 0) { balance += amount; } } }
참고 링크
- My Git Repository (devitworld-csharp-basic) – DevitworldConsoleApp/3_BasicSyntax