24.01.02 TIL - [C#] 기초 (7) : 메서드 & 구조체

JJwoo·2024년 1월 2일
0

C#

목록 보기
7/20
post-thumbnail

듣자마자 메소드 공대가 떠오르더라.


🛠 메서드(Method)

메서드는 코드의 재사용성, 모듈화, 그리고 가독성 향상에 기여하는 독립적인 기능 단위이다.


📜 메서드의 역할과 중요성

  • 코드 재사용성:
    메서드를 사용하면 동일 작업을 반복해서 구현하지 않아도 된다. 필요할 때 메서드를 호출해서 작업을 수행한다.

  • 모듈화:
    메서드로 코드를 작은 단위로 나눠 관리할 수 있다. 이렇게 하면 각 메서드가 특정 기능을 수행하게 되고 코드 구조가 명확해진다.

  • 가독성과 유지보수성:
    메서드 사용으로 코드가 간결해지고 읽기 쉬워진다. 코드 수정이 필요할 때도 해당 메서드만 수정하면 되니 유지보수도 쉬워진다.

  • 코드 중복 제거:
    반복 작업을 메서드로 묶어 사용하면 코드 중복을 막을 수 있다.

  • 코드 추상화:
    메서드를 통해 작업 단위를 추상화하고, 메서드 이름으로 해당 작업이 무엇을 하는지 알 수 있다.


🚀 메서드 선언과 호출

메서드는 특정 작업을 수행하는 코드 블록으로, 필요할 때마다 호출된다.

1) 메서드의 구조

[접근 제한자] [리턴 타입] [메서드 이름]([매개변수])
{
    // 메서드 실행 코드
}
  • 접근 제한자(Access Modifier):
    메서드가 어디서 접근 가능한지 정한다.
    주로 public, private, protected 등을 사용.

  • 리턴 타입(Return Type):
    메서드가 어떤 타입의 값을 반환하는지 정한다. 값이 없으면 void를 쓴다.

  • 메서드 이름(Method Name):
    메서드 호출할 때 쓰는 이름이다.
    호출할 때 이 이름을 사용.

  • 매개변수(Parameters):
    메서드에 전달되는 입력 데이터 값으로, 메서드 실행에 필요한 데이터다.
    필요한 경우 0개 이상의 매개변수를 정의할 수 있다.

  • 메서드 실행 코드(Method Body):
    중괄호({}) 안에 메서드가 수행하는 작업을 구현하는 코드를 구현한다.


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

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

// 예시 3: 반환 값이 있는 메서드
public int AddNumbers(int a, int b)
{
    int sum = a + b;
    return sum;
}

2) 메서드 호출 방법

  • 메서드를 호출하려면 메서드 이름과 필요한 매개변수를 전달한다.

 메서드 이름(전달할 매개변수);
 
 
- 예를 들어, `AddNumbers`라는 이름의 메서드를 호출하고자 할 때는 다음과 같이 호출합니다:

 AddNumbers(10, 20);
  • 호출 시 전달되는 매개변수는 메서드의 매개변수와 순서와 타입이 일치해야 합니다.

  • 메서드는 호출되면 해당 메서드의 실행 코드를 수행하고, 필요한 경우 리턴 값이 있다면 반환합니다


💡 3) 매개변수

매개변수는 메서드에 전달되는 입력 값이고, 메서드 내에서 이 값으로 작업을 수행한다.

반환값은 메서드의 실행 결과를 호출자에게 돌려주는 값이다.


🔁 4) 반환값

메서드가 수행한 작업의 결과를 호출자에게 반환하는 값.

메서드의 리턴 타입에 지정되며, 해당 타입의 값을 반환해야 한다.

메서드 내에서 계산, 조작, 처리한 결과 등을 반환값으로 사용할 수 있다.

예제:
int AddNumbers(int a, int b)
{
    int sum = a + b;
    return sum;
}

// 메서드 호출 및 반환값 사용
int result = AddNumbers(10, 20);
Console.WriteLine("Sum: " + result);

void : 반환값이 없는 메서드

예제:
void PrintMessage(string message)
{
    Console.WriteLine("Message: " + message);
}

// 메서드 호출
PrintMessage("Hello, World!");
  • void는 메서드가 값을 반환하지 않는다는 걸 나타낸다.

  • 반환값이 없는 메서드는 호출되면 메서드의 실행 코드만 수행하고 호출자에게 반환하지 않는다.


메서드 사용 예시

void PrintLine()
{
    for (int i = 0; i < 10; i++)
    {
        Console.Write("=");
    }
    Console.WriteLine();
}

void PrintLine2(int count)
{
    for (int i = 0; i < count; i++)
    {
        Console.Write("=");
    }
    Console.WriteLine();
}

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


[사용 예시]
PrintLine();
PrintLine2(20);

int result = Add(10, 20);
Console.WriteLine(result);

🎯 5) 메서드 오버로딩

  • 메서드 오버로딩은 같은 이름의 메서드를 다른 매개변수 목록으로 여러 번 정의하는 것이다. 매개변수의 수, 타입, 순서에 따라 적절한 메서드가 선택된다.

  • 오버로딩은 메서드의 기능이나 작업은 동일하지만 입력값에 따라 다르게 동작해야 할 때 사용된다.

1)

void PrintMessage(string message)
{
    Console.WriteLine("Message: " + message);
}

void PrintMessage(int number)
{
    Console.WriteLine("Number: " + number);
}

// 메서드 호출
PrintMessage("Hello, World!");  // 문자열 매개변수를 가진 메서드 호출
PrintMessage(10);  // 정수 매개변수를 가진 메서드 호출
  • 위 코드를 통해 알 수 있는 건, PrintMessage라는 메서드가 같은 이름어어도 매개변수의 타입에 따라 '각각 호출' 됨.

  • 반환값이 달라도 동일한 메서드로 취급.

2
)
int AddNumbers(int a, int b)
{
    return a + b;
}

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

// 메서드 호출
int sum1 = AddNumbers(10, 20);  // 두 개의 정수 매개변수를 가진 메서드 호출
int sum2 = AddNumbers(10, 20, 30);  // 세 개의 정수 매개변수를 가진 메서드 호출

05. 재귀 호출

  • 메서드가 자기 자신을 호출하는 것을 의미
  • 문제를 작은 부분으로 분할하여 해결하는 방법 중 하나로, 작은 부분의 해결 방법이 큰 문제의 해결 방법과 동일한 구조를 갖고 있는 경우에 적합
  • 호출 스택에 호출된 메서드의 정보를 순차적으로 쌓고, 메서드가 반환되면서 스택에서 순차적으로 제거되는 방식으로 동작
void CountDown(int n)
{
    if (n <= 0)
    {
        Console.WriteLine("Done");
    }
    else
    {
        Console.WriteLine(n);
        CountDown(n - 1);  // 자기 자신을 호출
    }
}

// 메서드 호출
CountDown(5);
  • 재귀 호출의 활용과 주의점

    • 재귀 호출은 복잡한 문제를 단순한 방식으로 해결할 수 있는 장점이 있습니다.

    • 재귀 호출을 사용할 때 주의해야 할 점은 종료 조건을 명확히 정의해야 하며, 종료 조건을 만족하지 못하면 무한히 재귀 호출이 반복되어 스택 오버플로우 등의 오류가 발생할 수 있습니다.

    • 재귀 호출은 메모리 사용량이 더 크고 실행 속도가 느릴 수 있으므로, 필요한 경우에만 적절히 사용하는 것이 좋습니다.

      알고리즘에 많이 사용하는 편


06. 메서드 활용 사례

  • 메서드를 사용하면 코드 재사용성이 높아지고, 가독성 및 유지보수성도 개선된다.

  • 예를 들어, 반복되는 로직을 메서드로 만들어두고 필요할 때마다 호출하면 되니까 코드가 간결해지고 관리하기도 쉬워진다.

예시

// 원의 넓이를 계산하는 메서드
double CalculateCircleArea(double radius)
{
    double area = Math.PI * radius * radius;
    return area;
}

// 사각형의 넓이를 계산하는 메서드
double CalculateRectangleArea(double width, double height)
{
    double area = width * height;
    return area;
}

// 메서드 활용
double circleArea = CalculateCircleArea(5.0);
double rectangleArea = CalculateRectangleArea(3.0, 4.0);

Console.WriteLine("원의 넓이: " + circleArea);
Console.WriteLine("사각형의 넓이: " + rectangleArea);

🏗 구조체 (Struct)

✔️ 사용자 정의 자료형
  • 여러 개의 데이터를 묶어서 하나의 사용자 정의 형식으로 만들기 위한 방법.
  • 구조체는 값 형식(Value Type)으로 분류되며, 데이터를 저장하고 필요한 기능을 제공할 수 있다.

✔️ 구조체 사용 방법

  • 구조체는 struct 키워드로 선언한다. 멤버로는 변수와 메서드를 포함할 수 있다. 구조체를 사용할 때는 멤버에 점 . 연산자로 접근한다.
struct Person 
{
    public string Name;
    public int Age;

    public void PrintInfo() 
    {
    Console.WriteLine($"Name: {Name}, Age: {Age}");
    }
}


// 구조체의 사용 예시
Person person1;
person1.Name = "John";
person1.Age = 25;
person1.PrintInfo();

구조체는 간단한 데이터 구조를 효율적으로 표현하는 데 유용하고, 다양한 데이터 타입을 하나의 단위로 관리할 수 있게 해준다.

profile
개발 모코코

0개의 댓글