C# - 메서드

MothorMoth·2024년 4월 25일

C#

목록 보기
8/17
post-thumbnail

메서드

  • 특정한 작업을 수행하기 위해 사용되는 독립적인 기능 단위로, 코드의 재사용성과 모듈화를 위해 사용되며, 필요할 때 호출하여 실행된다.

  • 메서드의 역할과 중요성

    1. 코드의 재사용성: 동일한 작업을 여러 번 코딩할 필요 없이 필요할 때마다 해당 메서드를 호출하여 작업을 수행할 수 있다.

    2. 모듈화: 메서드를 통해 코드를 작고 관리하기 쉬운 단위로 분할하면 전체 코드 구조가 명확해지고 이해하기 쉬워진다.

    3. 가독성과 유지보수성: 코드를 간결하게 만들어 가독성을 높이며, 문제 발생 시 해당 메서드만 수정함으로써 유지보수를 용이하게 한다.

    4. 코드의 중복 제거: 반복적인 작업을 한 곳에 묶어 코드 내의 중복을 줄임으로써 오류 가능성을 감소시키고 코드의 효율성을 향상시킨다.

    5. 코드의 추상화: 작업 단위를 추상화하여, 메서드의 이름만으로도 그 기능을 쉽게 파악할 수 있게 하며, 이는 코드의 의도와 구조를 명확히 전달하는 데 도움을 준다.

Unity에서 함수메서드
함수와 메서드라는 용어는 Unity 개발에서 종종 같은 의미로 사용됩니다. 그러나 C#에서는 함수를 클래스에 통합하지 않고는 함수를 작성할 수 없으므로 "메서드"가 올바른 용어입니다.

참고: https://unity.com/how-to/naming-and-code-style-tips-c-scripting-unity

메서드 선언과 호출

  1. 메서드 선언
[접근 제한자] [리턴 타입] [메서드 이름]([매개변수])
{
    // 메서드 실행 코드
}
  • 접근제한자: 주로 public, private, protected 등을 사용하며, 메서드에 접근할 수 있는 범위를 지정한다.

  • 리턴 타입: 메서드가 반환하는 값의 데이터 타입을 지정하며, 반환 값이 없을 경우 void를 사용한다.

  • 메서드 이름: 메서드를 호출하기 위해 사용하는 이름으로, 메서드는 특정 기능/동작을 수행하기 때문에 주로 동사를 사용하며, PascalCase로 작성한다.

  • 매개변수: 메서드에 전달되는 값으로, 필요한 경우 0개 이상의 매개변수를 정의할 수 있다.

// 반환 값이 없는 메서드
public void SayHello()
{
    Console.WriteLine("안녕하세요!");
}

// 매개변수가 있는 메서드
public void GreetPerson(string name)
{
    Console.WriteLine("안녕하세요, " + name + "님!");
}

// 반환 값이 있는 메서드
public int AddNumbers(int a, int b)
{
    int sum = a + b;
    return sum;
}
  1. 메서드 호출
[메서드 이름]([전달할 매개변수]);
  • 메서드 이름과 필요한 매개변수를 전달하여 호출하며, 해당 메서드의 코드를 실행하고, 필요한 경우 리턴 값이 있다면 반환한다.

  • 호출 시 전달되는 매개변수는 메서드의 매개변수와 순서, 타입이 일치해야 한다.

매개변수와 반환값

  1. 매개변수
  • 메서드의 선언부에 정의되어 메서드 호출 시 필요한 값을 동적으로 전달받아 원하는 작업을 수행하도록 하는 변수이다.
void PrintFullName(string firstName, string lastName)
{
    Console.WriteLine("Full Name: " + firstName + " " + lastName);
}

// 메서드 호출
PrintFullName("John", "Doe");
  1. 반환값
  • 메서드가 수행한 작업의 결과를 나타내며, 메서드에 선언된 리턴 타입에 따라 해당 타입의 값을 호출자에게 반환한다.
int AddNumbers(int a, int b)
{
    int sum = a + b;
    return sum;
}

// 메서드 호출 및 반환값 사용
int result = AddNumbers(10, 20);
Console.WriteLine("Sum: " + result);
  1. void 형식과 반환값이 없는 메소드
  • 메서드의 리턴 타입으로 사용되어, 메서드가 실행을 완료한 후 어떤 값을 반환하지 않음을 나타낸다.
void PrintMessage(string message)
{
    Console.WriteLine("Message: " + message);
}

// 메서드 호출
PrintMessage("Hello, World!");

메서드 오버로딩

  • 동일한 이름의 메서드를 다양한 매개변수 구성(개수, 타입, 순서)으로 다중 정의하여, 매개변수의 형태에 따라 적절한 메서드를 자동으로 선택되도록 한다.
// 문자열 매개변수를 가진 메서드
void PrintMessage(string message)
{
    Console.WriteLine("Message: " + message);
}

// 정수 매개변수를 가진 메서드
void PrintMessage(int number)
{
    Console.WriteLine("Number: " + number);
}

// 두 개의 매개변수를 가진 메서드
int AddNumbers(int a, int b)
{
    return a + b;
}

// 세 개의 매개변수를 가진 메서드
int AddNumbers(int a, int b, int c)
{
    return a + b + c;
}

// 메서드 호출
PrintMessage("Hello, World!");
PrintMessage(10);

int sum1 = AddNumbers(10, 20);
int sum2 = AddNumbers(10, 20, 30);

재귀 호출

  • 재귀 호출은 메서드가 자신을 다시 호출하는 것을 의미하며, 호출 스택에 호출된 메서드의 정보를 순차적으로 쌓고, 메서드가 반환되면서 순차적으로 제거되는 방식으로 동작한다.

  • 복잡한 문제를 단순화하여 해결할 수 있지만, 명확한 종료 조건을 설정하지 않으면 스택 오버플로우를 일으킬 수 있으며, 메모리 사용과 실행 속도 측면에서 비효율적일 수 있어 신중하게 사용해야 한다.

void CountDown(int n)
{
    if (n <= 0) // 재귀 호출 종료 조건
    {
        Console.WriteLine("Done");
    }
    else
    {
        Console.WriteLine(n);
        CountDown(n - 1);  // 자기 자신을 호출
    }
}

// 메서드 호출
CountDown(5);

0개의 댓글