프로그래밍/.NET

메서드 (Method)

MAJG 2020. 12. 10. 17:42
반응형

메서드란?

메서드는 객체 지향 언어에서 사용하는 용어로, C/C++에서는 함수라고 불린다.

(Method는 영어 발음이기 때문에 메서드, 메소드 등 비슷한 이름으로 불린다.)

메서드는 여러 코드 들을 하나의 이름 아래에 묶어놓는 역할을 하는데
이렇게 묶인 코드들은 메서드의 이름을 호출하여 실행할 수 있다.

class 클래스명
{
    한정자 반환형식 메서드명(파라미터)
    {
    	/*
        여러 코드들..
        */
    
    	return 반환값;
    }
}

위의 소스코드는 메서드에 대한 선언형식이며, 메서드는 클래스 안에 선언되어야 한다.

왜 메서드가 클래스 안에 선언되어야 하는지와 같은 내용은 객체지향에 대해 알아보면 된다.

  • 한정자 : 메서드의 범위, 정적, 동적 등을 결정하는 것으로 클래스에 대해 배우면 알 수 있다.
  • 반환 형식 : 메서드가 반환할 데이터 타입을 명시한다. void를 사용하면 메서드는 값을 반환하지 않는다.
  • 메서드명 : 여러 코드들의 묶음을 메서드명을 통해 호출할 수 있다.
  • 파라미터 : 메서드에서 사용할 인자들을 명시한다.
  • 반환 값 : 메서드가 종료될 때 메서드에서 처리한 값을 반환하는 값으로 반환 형식과 같은 데이터 타입 이어야 한다.

메서드 예:

class PlusMethod
{
    public static int Plus(int x, int y)
    {
        int result = x + y;
        return result;
    }
    
    public static void Print(int value)
    {
        Console.WriteLine(value);
    }
}

/*
실행 :
int A = 10;
int B = 20;
int value = PlusMethod.Plus(A, B);
PlusMethod.Print(value);

int value = PlusMethod.Plus(10, 20);
PlusMethod.Print(value);
    
출력 : 
30
30
*/

메서드는 같은 코드의 중복을 막고, 코드의 가독성을 늘려주기 위해 사용된다.

 

메서드 오버라이딩

메서드는 파라미터에 따라 같은 이름의 메서드를 여러개 만들 수 있으며, 
반환형식에 상관없이 오직 파라미터만 중복되지않으면된다.

class MethodOverride
{
    public static void Plus(int x, int y) {}
    public static void Plus(int x, int y, int z) {}
    public static string Plus(int x, string y) {}
}

 

파라미터란

class PlusMinusMethod
{
    public static int Plus(int x, int y)
    {
        int result = x + y;
        return result;
    }
    
    public static int Minus(int x, int y)
    {
        x = x - y;
        return x;
    }
}

/*
실행 :
int A = 10;
int B = 20;
int value = PlusMinusMethod.Plus(A, B);
int value = PlusMinusMethod.Minus(A, B);
*/

기본적인 파라미터는 위의 메서드 예에서 Plus, Minus 메서드의 x, y에 해당한다.

또한 파라미터 x, y는 자신이 속해있는 메서드 안에서만 존재하기 때문에
Plus 메서드에서 Minus 메서드의 x, y 파라미터에 접근할 수 없고, 실행 구문에서 Minus 메서드에 A라는 변수를
x 파라미터에 넘겨주는데 x는 Minus 메서드 안에서 생성된 변수이기 때문에
x의 값을 변경해도 A는 영향을 받지 않는다.

기본적인 파라미터가 아닌 다른 파라미터들도 존재한다.

 

참조형 파라미터

기본적인 파라미터는 파라미터로 받은 값을 메서드 안에서 변경하여도 밖의 값은 변경되지 않는다고 하였는데
참조형 파라미터를 사용하면 변경할 수 있다.
왜냐하면 기본적인 파라미터의 경우 A라는 변수의 값을 x라는 변수를 생성한 후 x에 초기화하여 사용하는 형태이지만
참조형 파라미터는 메서드 안에 새로운 변수를 생성하여 사용하는 것이 아닌 A 변수 자체를 가져와 사용하기 때문이다.

class RefParameter
{
    public static void Swap(ref int x, ref int y)
    {
        int X = x;
        y = x;
        x = X;
    }
}

/*
실행 :
int A = 10;
int B = 20;
RefParameter.Swap(ref A, ref B);

결과 : 
A : 20
B : 10
*/

 

출력전용 파라미터

출력전용 파라미터를 사용하여 할 수 있는 구현들은 참조형 파라미터를 사용하여 구현할 수 있지만
C# 에서는 참조형 파라미터보다 조금더 안전한 방법을 제공한다.

class outParameter
{
    public static void Divide(int x, int y, out int value1, out int value2)
    {
        value1 = x / y;
        value2 = x % y;
    }
}

/*
실행 :
int A = 10;
int B = 20;
int C = 0;
int D = 0;
outParameter.Divide(B, A, out C, out D);

결과 : 
C : 2
D : 0
*/

 

가변길이 파라미터

프로그래밍을 하다보면 같은 역할을 하는 메서드지만 파라미터의 개수가 달라질때가 있는데
이때마다 메서드를 오버라이딩하면 코드가 너무 많아지기때문에 가변길이 파라미터라는 것을 제공한다.

가변길이 파라미터는 반환형식과 파라미터의 데이터타입이 같지만 파라미터의 개수가 다르게 요구될때 사용할 수 있다.

class paramsParameter
{
    public static int Plus(params int[] args)
    {
        int sum = 0;
        foreach (var arg in args) sum += arg;

        return sum;
    }
}
    
/*
실행 :
int A = 10;
int B = 20;
int C = 30;
paramsParameter.Plus(A, B);
paramsParameter.Plus(A, B, C);

결과 :
30
60
*/

 

명명된 파라미터

기본적으로 파라미터는 순서대로 매핑되지만 명명된 파라미터를 사용하면 메서드를 사용할 때
파라미터의 순서를 달리해도 원하는 파라미터에 값을 넣어줄 수 있다.

class NamedParameter
{
    public static void Print(int x, int y)
    {
        Console.WriteLine($"x : {x}, y : {y}");
    }
}

/*
실행 :
int A = 10;
int B = 20;
NamedParameter.Print(y:B, x:A);

결과 : 
x : 10, y : 20

 

선택적 파라미터

선택적 파라미터를 사용하면 메서드의 파라미터에 기본값을 줄 수 있다.

선택적 파라미터는 반드시 필수 파라미터 뒤에 와야한다.

class OptionalParameter
{
    public static void print(string name, int age = 20)
    {
        Console.WriteLine($"Name : {name}, Age : {age}");
    }
    
    /*
    public static void print(string name, int age = 20, int id = 1234) 
    public static void print(string name, int age = 20, int id) // Error
    */
}

/*
실행 :

PlusMethod.Print("MAJG");
    
출력 : 
Name : MAJG, Age : 20
*/

 

반응형