STUDY/C#

메소드(Method)

빵아찌 2024. 7. 7. 19:20
메소드(Method)란 객체지향 프로그래밍 언어에서 사용하는 용어
언어에 따라 함수(Function), 프로시저(Procedure), 서브루틴(Subroutine), 서브 프로그램(Subprogram)으로 불림

 

메소드는 클래스 안에 선언되며 여러 응용이 가능하다.

(한정자) (반환_형식) (메소드_이름) (매개변수_목록)
{
  //코드
}

 

한정자에는 public, internal, protected, private, internal 등이 존재하며 각 한정자마다 접근이 제한된다.

접근 한정자 설명
public 클래스 내/외부 접근 가능
protected 클래스 외부 접근 X, 파생 클래스(상속) 접근 가능
private 클래스 내부 O, 외부 X
internal 같은 어셈블리 코드에서만 public 접근 가능, 쉽게 말해 같은 프로젝트에서 접근 O
protected internal 같은 어셈블리에 코드 수준에서 protected 수준으로 접근 가능, 다른 프로젝트 private
private protected 같은 어셈블리에 있는 ㅅ클래스에서 상속받은 클래스 내부에서만 접근 O

 

반환형식에는 함수가 끝나고 반환하고자 하는 타입을 작성하며 반드시 return을 사용하여 해당 한정자의 타입으로 결과를 출력해야한다.

 

하나의 메소드 안에서 같은 메소드를 호출하는 것을 '재귀 호출'이라 부르며 코드를 줄일 수 있으나 무한 반복이 될 수 있어 주의해서 사용해야 한다.

private int Fibonacci(int n)
{
    if (n < 2)
    	reutrn n;
    else
    	return Fibonacci(n - 1) + Fibonacci(n - 2);
}

 

매개변수는 기본적으로 '값에 의한 전달(pass by value)가 이루어진다.

그러므로 매개변수로 값을 전달한 것은 메소드 안에서 어떠한 형태로든 값이 변경되어도 메소드 외부에는 영향을 주지 않는다. 하지만 매개변수를 참조(C++ &, C# ref, out) 형태로 전달 시에는 메소드 내부에서 변경된 값이 '참조의 의한 전달(pass by reference)가 이루어지며 메소드에 넘겨진 원본 변수에 영향을 끼치게 된다.

 

메소드의 이름은 같으나 매개변수를 다르게 선언하는 것을 메소드 오버로딩 이라 한다. 메소드 오버로딩은 컴파일 타임에 이루어지므로 성능 저하의 걱정은 하지 않아도 된다.

 

매개변수에 여러 변수를 넣고자 할때는 param 키워드를 사용하면 된다.

public int Sum(params int[] args)
{
    int sum = 0;
    for (int i = 0; i < args.Length; ++i)
    {
    	sum +- args[i];
    }
    
    return sum;
}

'메소드 오버로딩'을 같은 변수로 해야하는 상황이 있다면 param 키워드를 사용하여 짜는 것이 효율적일 수 있다.

 

만약 매개변수에 인자가 있을 때도 있고 없을 때도 있다면 선택적 인수를 사용하는 방법이 있다.

void Sum (int a, int b, int c = 0)
{
    sum += a + b + c;
}

다음과 같이 매개변수에 값을 미리 지정하여 사용이 가능하다.