CodeGym /행동 /C# SELF /C#에서 함수(메서드) 소개

C#에서 함수(메서드) 소개

C# SELF
레벨 8 , 레슨 2
사용 가능

1. C#의 함수/메서드

너 이미 C#에서 많은 명령어를 배웠으니까, 이제 꽤 복잡한 프로그램도 쓸 수 있을 거야. 10, 20, 30줄 정도의 코드는 사실 그렇게 큰 프로그램은 아니지?

근데 100+줄짜리 프로그램은 이미 크고, 코드 읽기가 꽤 힘들어져. 코드가 많아질수록 작성이나 읽기가 더 쉬워질 방법이 없을까?

있지! 바로 메서드(함수)가 도와줄 거야.

그럼 메서드가 뭘까? 아주 쉽게 말하면, 메서드는 고유한 이름을 가진 명령어 묶음이야. 즉, 여러 명령어를 한 그룹으로 묶고, 그 그룹에 이름을 붙이는 거지. 그럼 끝! 메서드 완성.

예를 들어, 고양이 그리는 코드가 있다고 해보자:

Console.WriteLine("  |\\__/,|   (`\\");
Console.WriteLine("  |o_o  |__ _) )");
Console.WriteLine("  (____/   (_/ ");
고양이 그리기 코드

이 코드를 실행하면 이렇게 나와:

  |\__/,|   (`\
  |o_o  |__ _) )
  (____/   (_/

이 코드를 별도의 메서드로 옮기면, 원하는 만큼 고양이를 그릴 수 있어:

void WriteCat()
{
    Console.WriteLine("  |\\__/,|   (`\\");
    Console.WriteLine("  |o_o  |__ _) )");
    Console.WriteLine("  (____/   (_/ ");    
}

//고양이 세 마리 그리기
WriteCat();
WriteCat();
WriteCat();
메서드로 고양이 여러 번 출력하기

프로그램이 실행될 때마다 WriteCat()을 호출하면, 메서드 WriteCat() 안에 있는 모든 명령어가 실행돼. 여러 명령어를 한 그룹으로 묶어서 새로운 명령어(메서드)를 만든 거지.

함수의 의미:

  • 프로그램을 여러 부분으로 나눠서, 각 부분이 자기 역할만 하게 해.
  • 재사용이 쉬워져: 한 번만 써놓고, 필요할 때마다 계속 쓸 수 있어.
  • 버그 날 확률이 줄어들어: 함수 안에서 버그가 생기면, 그 함수만 고치면 돼.
  • 복잡한 동작에 이름을 붙여주니까, 코드 읽기가 훨씬 쉬워져.

용어: 함수, 메서드, 프로시저

C#에서는 함수메서드가 거의 같은 뜻이지만, 약간의 차이가 있어.

  • 메서드 — 클래스나 객체에 속한 함수야 (C#에선 거의 다 메서드임).
  • 프로시저 — 값을 반환하지 않는 함수(void 메서드).
  • 함수 — 넓은 의미로, 호출할 수 있는 이름 붙은 코드 조각 전부.

공식적으로 C#에선 이걸 다 메서드라고 부르지만, 혹시 뒤에 "함수"라는 말이 나와도 당황하지 마!

2. 메서드 선언 문법: 하나씩 뜯어보기

가장 간단한 함수, 고전적인 "Hello, World!"를 예로 들어서, 출력 부분만 메서드로 빼볼게:

using System;

class Program
{
    static void Main()
    {
        PrintHello();
    }

    static void PrintHello()	// "Hello, World!" 출력
    {
        Console.WriteLine("Hello, World!");
    }
}
메서드 선언과 호출 예시

문법 뜯어보기:

부분 예시 설명
한정자
static
이 메서드가 클래스에 속한다는 뜻 (자세한 건 나중에)
반환 타입
void
이 메서드는 아무것도 반환하지 않는다는 뜻
메서드 이름
PrintHello
이름으로 메서드를 호출해
파라미터
()
인자 (비어 있으면 인자 없음)
메서드 본문
{ ... }
메서드가 호출될 때 실행되는 코드

비유:
메서드는 커피 자판기랑 비슷해: 돈(인자)을 넣고, 버튼(메서드 호출)을 누르면, 자판기가 커피를 만들고(메서드 본문), 결과(반환값)를 내놔 — void 메서드는 결과 없이 그냥 끝나기도 하고!

3. 메서드 호출하는 방법

메서드 호출은 그냥 이름 쓰고 괄호만 붙이면 끝이야:

PrintHello(); // 파라미터 없는 메서드

int sum = Add(2, 3); // 파라미터와 결과값이 있는 메서드

중요: 메서드는 선언된 이후(혹은 코드에서 위에 있거나, 같은 클래스 안에 있을 때)만 호출할 수 있어.

4. 파라미터가 있는 메서드

메서드에 파라미터를 넘길 수 있어. 이러면 메서드 동작을 더 유연하게 바꿀 수 있지. 사실 파라미터는 메서드 안에서 쓰는 변수고, 메서드를 호출할 때 값을 넣어주는 거야. 파라미터는 메서드 만들 때 꼭 적어줘야 해.

static void Greet(string name)
{
    Console.WriteLine($"안녕, {name}!");
}

// 사용 예시:
Greet("앨리스");
Greet("밥");
파라미터가 있는 메서드

파라미터는 메서드 호출할 때 넘겨주는 값이야.

부분 예시 설명
파라미터 타입
string
받는 값의 타입
파라미터 이름
name
메서드 안에서 쓸 이름

호출 예시:
Greet("앨리스");name"앨리스" 값을 받아.

파라미터 여러 개

파라미터는 콤마로 구분해서 여러 개 선언할 수 있어:

static void PrintSum(int a, int b)
{
    Console.WriteLine($"합계: {a + b}");
}

// 사용 예시:
PrintSum(5, 7); // 합계: 12
여러 파라미터가 있는 메서드

5. 값 파라미터와 참조 파라미터

함수의 파라미터는 그냥 일반 변수랑 똑같고, 똑같은 규칙이 적용돼.

그래서 기억해둬: 배열을 메서드에 넘기면, 참조가 넘어가서, 메서드가 배열 내용을 바꿀 수 있어. 기본 타입(int, double 등)은 값이 복사돼.

static void ZeroFirstGrade(int[] grades)
{
    grades[0] = 0; // 원본 배열이 바뀜!
}

// 사용 예시:
int[] a = {1, 2, 3, 4, 5};
ZeroFirstGrade(a);
Console.WriteLine(a[0]);	//0이 출력됨
배열을 참조로 넘기면 — 메서드가 원본 데이터를 바꾼다

실제로는 이렇게 되는 거야:

static void ZeroFirstGrade(int[] grades)
{
    grades[0] = 0; // 원본 배열이 바뀜!
}

// 사용 예시:
int[] a = {1, 2, 3, 4, 5};

//ZeroFirstGrade(a);
int[] grades = a;
grades[0] = 0;

Console.WriteLine(a[0]);	//0이 출력됨
배열 참조 전달 비유
2
과제
C# SELF, 레벨 8, 레슨 2
잠금
매개변수가 없는 메서드 만들기
매개변수가 없는 메서드 만들기
2
과제
C# SELF, 레벨 8, 레슨 2
잠금
메서드에 매개변수 추가하기
메서드에 매개변수 추가하기
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION