[C# – 기초 강좌] 3. Csharp 기초 문법 이해하기 (Variable, Operator, Loop)

이번 포스팅에서는 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;
        }
    }
}

참고 링크

Leave a Comment

Discover more from Devitworld

Subscribe now to keep reading and get access to the full archive.

Continue reading