본문 바로가기
Study/C#

C# 4편: 메서드와 클래스 코드의 재사용성과 구조화

by wawManager 2024. 10. 23.
728x90

C# 4편: 메서드와 클래스

제목: C# 메서드와 클래스: 코드의 재사용성과 구조화


1. 메서드(Method)란?

메서드는 프로그램의 로직을 함수 단위로 나누어 재사용할 수 있는 코드 블록입니다. 메서드를 사용하면 중복 코드를 줄이고, 코드의 가독성과 유지보수성을 높일 수 있습니다.

메서드 선언

메서드는 반환형, 메서드 이름, 매개변수 목록으로 구성됩니다. 메서드가 실행된 후 반환할 데이터 타입을 지정하며, 반환할 값이 없다면 void로 선언합니다.

<반환형> <메서드이름>(<매개변수목록>)
{
    // 실행할 코드
    return <값>; // 반환형이 void가 아닐 경우
}

예시: 반환값이 없는 메서드

void SayHello()
{
    Console.WriteLine("Hello, World!");
}

예시: 반환값이 있는 메서드

int Add(int a, int b)
{
    return a + b;
}

메서드 호출

메서드는 선언된 이름을 사용하여 호출할 수 있습니다.

SayHello(); // 메서드 호출

int result = Add(5, 3);
Console.WriteLine(result); // 출력: 8

2. 매개변수와 반환값

매개변수가 있는 메서드

매개변수는 메서드가 실행될 때 필요한 데이터를 전달하는 역할을 합니다. 매개변수는 괄호 안에 선언하며, 여러 개의 매개변수를 콤마로 구분할 수 있습니다.

void PrintSum(int a, int b)
{
    int sum = a + b;
    Console.WriteLine("Sum: " + sum);
}

반환값이 있는 메서드

메서드가 특정 작업을 완료한 후 값을 반환하려면 return 키워드를 사용합니다. 반환값의 데이터 타입은 메서드 선언부의 반환형과 일치해야 합니다.

int Multiply(int a, int b)
{
    return a * b;
}

3. 메서드 오버로딩(Method Overloading)

메서드 오버로딩은 동일한 이름을 가진 메서드를 여러 개 정의하되, 매개변수의 타입, 개수 또는 순서가 다른 경우를 말합니다. 오버로딩된 메서드는 호출 시 전달된 매개변수에 따라 적절한 메서드가 선택됩니다.

메서드 오버로딩 예시

int Add(int a, int b)
{
    return a + b;
}

double Add(double a, double b)
{
    return a + b;
}

int Add(int a, int b, int c)
{
    return a + b + c;
}

메서드 오버로딩 호출

Console.WriteLine(Add(3, 5));        // 출력: 8
Console.WriteLine(Add(3.2, 5.1));    // 출력: 8.3
Console.WriteLine(Add(1, 2, 3));     // 출력: 6

4. 클래스(Class)란?

클래스는 객체 지향 프로그래밍의 핵심 요소로, 객체를 생성하기 위한 설계도 역할을 합니다. 클래스는 필드(변수)와 메서드(함수)로 구성됩니다. C#에서 클래스를 사용하여 데이터와 그 데이터를 처리하는 메서드를 하나의 단위로 묶을 수 있습니다.

클래스 선언

class <클래스이름>
{
    // 필드(변수)
    // 메서드
}

클래스 예시

class Person
{
    public string Name; // 필드
    public int Age; // 필드

    public void Introduce() // 메서드
    {
        Console.WriteLine($"안녕하세요, 제 이름은 {Name}이고, 나이는 {Age}살입니다.");
    }
}

5. 객체(Object)란?

클래스는 데이터와 메서드를 정의하는 틀이라면, 객체는 그 틀로부터 만들어진 실체입니다. 클래스는 붕어빵 틀이고, 객체는 그 틀로 찍어낸 붕어빵이라고 생각하면 됩니다.

객체 생성

객체는 new 키워드를 사용하여 클래스로부터 생성됩니다.

Person person = new Person(); // Person 객체 생성
person.Name = "Alice"; // 필드 값 설정
person.Age = 25; // 필드 값 설정
person.Introduce(); // 메서드 호출

객체 생성 후 필드와 메서드 접근

Person person = new Person();
person.Name = "John"; // 객체의 필드에 접근
person.Age = 30;
person.Introduce(); // 출력: 안녕하세요, 제 이름은 John이고, 나이는 30살입니다.

6. 생성자(Constructor)와 소멸자(Destructor)

생성자(Constructor)

생성자는 객체가 생성될 때 자동으로 호출되는 메서드입니다. 생성자를 통해 객체의 필드를 초기화할 수 있습니다. 생성자의 이름은 클래스 이름과 동일하며 반환형이 없습니다.

기본 생성자

class Person
{
    public string Name;
    public int Age;

    // 기본 생성자
    public Person()
    {
        Name = "미정";
        Age = 0;
    }
}

매개변수가 있는 생성자

class Person
{
    public string Name;
    public int Age;

    // 매개변수가 있는 생성자
    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }

    public void Introduce()
    {
        Console.WriteLine($"안녕하세요, 제 이름은 {Name}이고, 나이는 {Age}살입니다.");
    }
}

Person person = new Person("Alice", 25);
person.Introduce(); // 출력: 안녕하세요, 제 이름은 Alice이고, 나이는 25살입니다.

소멸자(Destructor)

소멸자는 객체가 더 이상 사용되지 않을 때 자동으로 호출되어 자원을 해제하는 역할을 합니다. C#에서는 가비지 컬렉터가 메모리 관리를 담당하기 때문에 소멸자는 자주 사용되지 않습니다.

class Person
{
    // 소멸자
    ~Person()
    {
        Console.WriteLine("객체가 소멸됩니다.");
    }
}

7. 필드, 속성, 메서드

필드(Field)

필드는 클래스 내에서 선언된 변수로, 객체의 상태를 저장하는 역할을 합니다. 필드는 보통 클래스 내부에서 직접 접근하지만, 외부에서는 직접 접근하지 않는 것이 일반적입니다.

속성(Property)

속성은 필드에 대한 접근을 제어하는 방법입니다. C#에서는 get과 set 메서드를 사용하여 필드 값을 읽거나 쓸 수 있습니다.

속성 예시

class Person
{
    private string name; // private 필드

    public string Name // public 속성
    {
        get { return name; }
        set { name = value; }
    }
}

8. 실습 예제: 계산기 클래스 만들기

메서드와 클래스를 이용하여 간단한 계산기 프로그램을 만들어 봅시다.

using System;

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

    public int Subtract(int a, int b)
    {
        return a - b;
    }

    public int Multiply(int a, int b)
    {
        return a * b;
    }

    public int Divide(int a, int b)
    {
        if (b == 0)
        {
            Console.WriteLine("0으로 나눌 수 없습니다.");
            return 0;
        }
        return a / b;
    }
}

class Program
{
    static void Main(string[] args)
    {
        Calculator calc = new Calculator();

        Console.WriteLine("덧셈: " + calc.Add(10, 5));
        Console.WriteLine("뺄셈: " + calc.Subtract(10, 5));
        Console.WriteLine("곱셈: " + calc.Multiply(10, 5));
        Console.WriteLine("나눗셈: " + calc.Divide(10, 5));
    }
}

9. 요약

  • 메서드는 코드의 재사용성과 가독성을 높이는 중요한 요소입니다. 반환값과 매개변수를 이용하여 데이터를 처리할 수 있습니다.
  • 클래스는 객체 지향 프로그래밍에서 객체를 생성하기 위한 틀로, 필드와 메서드를 포함합니다.
  • 객체는 클래스로부터 생성된 실체이며, 클래스 내 정의된 필드와 메서드를 통해 데이터를 처리합니다.
  • 생성자는 객체 생성 시 필드를 초기화하며, 소멸자는 객체가 메모리에서 해제될 때 호출됩니다.

다음 편에서는 객체 지향 프로그래밍(OOP) 개념인 상속, 다형성, 캡슐화에 대해 학습하겠습니다.

728x90