나 개발자 진짜 되냐?

[ C# 기본 문법 12 ] 메서드 본문

C# 을 맛보았어요!/문법정리를 해보았어요!

[ C# 기본 문법 12 ] 메서드

Snow Rabbit 2024. 9. 22. 02:51

 

메서드

인스턴스

구조체

객체

 

이런 거 너무 헷갈려서 힘들었는데

 

이번기회에 제대로 

기본을 잡아보는 시간이 되었으면 좋겠다..ㅎㅎ

 


🌟 메서드 🌟

메서드 ( Method )는

일련의 코드 블록으로

특정한 작업을 수행하기 위해 사용되는 독립적인 기능 단위

 

..ㅇㅅㅇ? 뭐라고요?

 

간단하게 정리하면!

함수라는 친구로 해석해 주면 된다!

음..

사이클이라고 생각해도 편할 거 같은데

 

하루에 아침 먹기 점심 먹기 저녁 먹기

이 세 가지를 매일 하는 것을 코드에 적는다면

 

코드가 굉장히 길어지겠죠?

 

그래서 먹기

안에 아침 점심 저녁을 적어주고

하루 - 먹기라고 하면

아침점심저녁이 다 포함된 코드를 짤 수 있다.

 

이렇게 하나의 주머니, 사이클이라고 생각해 주면

편하다!

 

 

✨ 메서드 선언 ✨

[접근 제한자] [리턴 타입] [메서드 이름]([매개변수])
{
    // 메서드 실행 코드
}

 

1. 접근 제한자

접근 범위를 정한다.

 

Public, Private, Protected가 있다.

 

public : 클래스 외부 접근 가능

private : 클래스 내부 접근

protected : 연결고리가 있는 친구만 접근

 

2. 리턴 타입

메서드가 반환하는 값의 데이터 타입 지정

보통 void( 공허, 없다 ) 사용

 

3. 메서드 이름

메서드 호출을 위해 사용하는 이름,

즉 호출될 땐 이름을 부른다!

 

4. 매개 변수 ⭐

자주 들어봤을 파라미터 라는 친구가

매개변수!!

메서드에 전달되는 입력 값으로

필요한 경우 개수 제한은 없다!

 

5. 메서드 실행 코드

중괄호 안에 메서드가 수행할 코드 작성

 

 

✨ 메서드 호출방법 ✨

[메서드 이름]([전달할 매개변수]);

// Ex) Numbers(10, 20);

 

콜 하는 방법이라고 말하는데

 

메서드 이름 (매개변수가 있다면 쓰고 아니면 공백)

을 해주면

메서드 이름을 보고 메서드로 가서 실행해 준다.

 

뭐 간단히

아까 예시로 든

먹기()이라는 느낌?

 

호출 시 주의할 점은

1. 매개변수의 순서와 타입은 일치해야 한다.

2. 필요한 경우 리턴값이 있다면 꼭 반환해주어야 한다.

 

 

 

반환..?! 그게 뭐지?!?!

 

 

✨ 매개변수 그리고 반환값 ✨

매개변수는 메서드에 전달되는 입력값으로

메서드 내에서 이 값을 활용해서 작업을 수행한다.

 

매개변수는 메서드의 선언부

즉 () 안에서 정의된다.

그러다 보니 동적으로 결정된다.

 

void PrintFullName(string firstName, string lastName)
{
    Console.WriteLine("Full Name: " + firstName + " " + lastName);
}

// 메서드 호출
PrintFullName("John", "Doe");

 

예제를 보면 알다시피

string로 자료형을 걸어주는 것이 중요하다.

 

호출을 통해

firstName = John

lastName = Doe

가 된다.

 

 

자 그러면 반환값은 뭐냐!

 

메서드를 수행하고 난 후에 결괏값을

콜 부른 애한테 돌려주는 것을 의미한다.

 

뭘로 주냐?

 

return으로!!!

 

int AddNumbers(int a, int b)
{
    int sum = a + b;
    return sum;
} //return sum을 통해 int로 변환 후 반환

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

 

return 덕분에

값을 다른 친구에게 넘겨줄 수 있다.

 

void형을 제외한 모든 메서드에는 return값이 있어야 하고

그 이유는

메서드는 탈출하고 나면 그 할당된 변수들이 다 사라진다.

그렇기 때문에

우리는 return으로 값을 적어두고 나와야지만

안에 내용은 사라져도 값은 보관되어 있다.

 

return을 통해

값을 자료형으로 변환해서 밖으로 내보낼 수 있게 된다.

 

 

단 void에는 절대적으로 쓰면 안 된다.

 

이것이 약속!

 

왜?

 

아까 return은 자료형을 변환해서 밖으로 내보낸다

근데 void는 공허..

 

아무것도 못 들고나가니

나가봤자다.

 

 

그래서 void는 출력용이라고 생각해 주면 편하다!

 

✨ 메서드 오버로딩 ✨

메서드의 이름은 같은데 다른 동작을 하는 친구들을 말한다.

 

오버로딩을 할 때 중요한 점은

 

1.

기능이나 작업은 동일해야 한다는 점이다.

 

즉 계산을 하려면 계산이 같아야 하고

출력을 하려면 둘 다 출력을 해야 한다.

 

2.

매개변수는 달라야 한다.

 

타입이든 개수든 순서든 뭐든 하나는 달라야 한다.

 

3.

반환할 자료형은 달라도 문제없다.

 

 

//매개변수 타입이 다름
void PrintMessage(string message)
{
    Console.WriteLine("Message: " + message);
}

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

// 메서드 호출
PrintMessage("Hello, World!");  // 문자열 매개변수를 가진 메서드 호출
PrintMessage(10);  // 정수 매개변수를 가진 메서드 호출

=======================================================
//매개변수 개수가 다름
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);  // 세 개의 정수 매개변수를 가진 메서드 호출

 

 

✨ 재귀 호출 ✨

재귀 호출이라

말만 들어보면 자기 자신을 호출하는 거 같은데

 

맞다!!

 

자기 자신을 계속 호출하면서 끝나지 않는 것

마치 내가 거울을 보는 느낌..

 

대신 조건을 꼭 제대로 설정해주어야 한다.

 

좋은 예시를 가져와봤다.

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

// 메서드 호출
// main 함수 안에 넣어주세요!
CountDown(5);

 

자,

5가 4를 호출

4가 3을 호출

3이 2를 호출

2가 1을 호출

1을 0이 호출

0이 되면서

Done 하면서 if문을 나온다.

 

0을 끝내면서 밖으로 나오니..

1이 있다. 1을 끝내니

2가 있다

2를 끝내니 3이 있고

3을 끝내니 4

4를 끝내니 5

 

이렇게 543212345가 된다 ㅎㅋㅋ

 

굉장히 어렵고 심오하다..

 

마지막으로

지금까지 공부한 메서드 정리 겸 예제를 보자.

// 원의 넓이를 계산하는 메서드
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);

이렇게 모듈화 하게 되면

언제든지 또 쓸 수 있다.

그래서 메서드는 참 좋다!

 

좋다!

 

메서드..

공부하는데 정말 시간을 많이 썼다.

특히 return..

당분간 보고 싶지 않다.. 너란 친구..