본문 바로가기
2학년 2학기/윈도우즈 프로그래밍

클래스(1) - 클래스 선언, 생성, 필드, 메소드

by print_soo 2024. 9. 30.

 

1. 클래스 선언 및 객체 생성

클래스는 프로그램의 기본 단위로, 필드와 메소드 등을 포함할 수 있습니다. 아래는 Fraction 클래스에 대한 예시입니다.

using System;

class Fraction {
    int numerator;   // 분자
    int denominator; // 분모

    // 생성자
    public Fraction(int numerator, int denominator) {
        this.numerator = numerator;
        this.denominator = denominator;
    }

    // 덧셈 메소드
    public Fraction Add(Fraction f) {
        int newNumerator = this.numerator * f.denominator + f.numerator * this.denominator;
        int newDenominator = this.denominator * f.denominator;
        return new Fraction(newNumerator, newDenominator);
    }

    // 출력 메소드
    public void PrintFraction() {
        Console.WriteLine($"{numerator}/{denominator}");
    }
}

class Program {
    public static void Main() {
        Fraction f1 = new Fraction(1, 2);  // 1/2
        Fraction f2 = new Fraction(1, 3);  // 1/3

        Fraction result = f1.Add(f2);      // 덧셈 연산
        result.PrintFraction();            // 출력: 5/6
    }
}

 

 

2. 객체 선언 및 생성자 사용

 

객체는 클래스를 사용하여 생성됩니다. new 키워드를 통해 객체를 생성하며, 생성자는 객체의 필드를 초기화할 때 사용됩니다.

Fraction f1 = new Fraction(1, 2);  // 분수 1/2 객체 생성
Fraction f2 = new Fraction(1, 3);  // 분수 1/3 객체 생성

 

 

3. static 필드 및 메소드

 

정적 멤버는 객체 단위가 아닌 클래스 단위에서 공유됩니다.

즉, 해당 필드 또는 메서드를 사용할 때  클래스 이름으로 바로 접근할 수 있습니다. 

using System;

public class MathOperations {
    public static int Add(int a, int b) {
        return a + b;
    }
}

class Program {
    public static void Main() {
        int result = MathOperations.Add(10, 20);  // static 메소드 호출
        Console.WriteLine(result);  // 출력: 30
    }
}

 

 

4. 매개변수 전달 (Call by Value)

 

C#에서는 기본적으로 값에 의한 호출을 사용합니다.

값이 복사되어 전달되므로, 메소드 내에서 값을 변경해도 원래 값에는 영향을 주지 않습니다.

using System;

class CallByValueApp {
    static void Swap(int x, int y) {
        int temp = x;
        x = y;
        y = temp;
        Console.WriteLine($"Swap: x = {x}, y = {y}");
    }

    public static void Main() {
        int x = 1, y = 2;
        Console.WriteLine($"Before: x = {x}, y = {y}");
        Swap(x, y);  // 값이 복사됨
        Console.WriteLine($"After: x = {x}, y = {y}");  // 원래 값은 변경되지 않음
    }
}

 

 

5. 매개변수 전달 (Call by Reference)

 

ref 키워드를 사용하면 참조에 의한 호출을 할 수 있으며, 메소드에서 변수의 값을 변경하면 원래 변수의 값도 변경됩니다.

using System;

class CallByReferenceApp {
    static void Swap(ref int x, ref int y) {
        int temp = x;
        x = y;
        y = temp;
        Console.WriteLine($"Swap: x = {x}, y = {y}");
    }

    public static void Main() {
        int x = 1, y = 2;
        Console.WriteLine($"Before: x = {x}, y = {y}");
        Swap(ref x, ref y);  // 참조로 전달됨
        Console.WriteLine($"After: x = {x}, y = {y}");  // 원래 값도 변경됨
    }
}

 

 

6. 매개변수 배열

 

params 키워드를 사용하여 가변 길이의 매개변수를 받을 수 있습니다. 예를 들어, 여러 개의 숫자를 한 번에 받는 메소드를 정의할 수 있습니다.

using System;

class ParameterArrayApp {
    static void PrintNumbers(params int[] numbers) {
        foreach (int number in numbers) {
            Console.WriteLine(number);
        }
    }

    public static void Main() {
        PrintNumbers(1, 2, 3, 4, 5);  // 여러 개의 매개변수를 전달 가능
    }
}

 

 

7. Main 메소드

 

C# 프로그램의 진입점Main 메소드입니다. Main 메소드는 명령줄 인수를 받을 수 있으며, 아래 예시는 명령줄에서 전달된 인수를 출력하는 프로그램입니다.

using System;

class CommandLineArgsApp {
    public static void Main(string[] args) {
        for (int i = 0; i < args.Length; ++i) {
            Console.WriteLine($"Argument[{i}] = {args[i]}");
        }
    }
}

// 명령줄 실행 예시: C:\> CommandLineArgsApp 12 Medusa 5.26
// 출력:
// Argument[0] = 12
// Argument[1] = Medusa
// Argument[2] = 5.26