메소드


메소드는 일련의 코드를 하나의 이름에 묶은것이며, 메소드의 호출만으로 안의 코드를 실행시킬 수 있다.


메소드의 선언


class 클래스_이름

{

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

{

// 코드

return 메소드의_결과;

}

}

메소드는 항상 클래스 안에 존재해야한다. 클래스는 객체의 속성(데이터)과 기능(메소드) 를 가지고 있는 설계도와 같다.

//static 한정자로 메소드나 필드를 수식하면 메소드나 필드가 클래스의 인스턴스가아닌 클래스 자체에 소속되도록 만들 수 있다. - 인스턴스를 만들지 않고 도 메소드를 호출할 수 있다.


int Fibonacci( int n)

{

if( n<2)

return n;

else

return Fibonacci(n-1) + Fibonacci(n-2);

}


//메소드는 재귀호출을 할 수 있는데 재귀호출 남용시 심각한 성능저하가 올 수 있으므로 주의해야한다.


매개변수


값에의한 전달(Call by value)은 값을 복사하여 전달하므로 변수 그 자체의 값은 변화가 없다.

참조에 의한 전달(Call by reference)은 변수의 주소값을 전달하기 때문에 변수 자체의 값이 변화한다. - ref키워드로 변수의 주소값을 전달할 수 있다.


Call by reference선언시 

static void swap ( ref int a, ref int b)

{

//코드

}

Calll by reference호출시

swap( ref a, ref b);


메소드에서 여러개의 변수의 값을 바꾸기위해서는 ref키워드를 사용하기보다는 out 키워드를 사용하는것이 좋다.


ref와 out의 차이점

ref키워드를이용해 매개변수를 전달할 경우엔, 메소드가 해당 매개변수에 결과값을 저장하지 않더라도 에러메세지를 출력하지 않지만,

out키워드를 이용하여 매개변수를 전달할 경우, 메소드에서 결과값이 저장되지 않으면 에러메세지를 출력한다. - out 키워드를 사용하는것이 안정적이다.

// out키워드의 위치는 ref선언과 같다.


메소드 오버로딩

메소드 오버로딩은 하나의 메소드 이름에 여러개의 구현을 올리는 것이다.


오버로딩의 사용방법

int plus( int a , int b )

{

//return a+b;

}

double plus ( double a , double b) )

{

//return a+b;

}

int plus( int a , int b , int c )

{

//return a+b+c;

}


- 컴파일러는 메소드 호출시 매개변수의 수와 형식을 분석하여 어느 메소드버전이 호출될지 찾아 실행시킨다.

메소드 오버로딩을 사용하면 이름에대한 고민을 줄이고, 코드를 일관성있게 유지시킬 수 있다.


가변길이 매개변수


매개변수의 '수' 가 다를때 오버로딩대신 편하게 사용할 수 있는 기능이다.

params 키워드와 배열을 이용하여 선언함.


가변길이 매개변수의 사용방법

int sum ( params int[] arr)

{

int sum = 0;

for(int i =0 ; i<arr.Length ; i++) // .Length 키워드로 배열의 길이값을 알 수 있다.

{

sum += arr[i];

}

return sum;

}


명명된 매개변수


void abc ( int a, int b, int c);

이와같은 함수에서 abc(1,2,3)이라고 하면 a에 1, b에 2, c에 3 이 순서대로 복사되지만, 명명된 매개변수를 이용하면, 메소드를 호출할때 매개변수의 이름에 근거해서 데이터를 할당할 수 있다.

메소드를 호출할 때 지정할 매개변수의 이름 뒤에 : 를 붙이고 뒤에 할당할 데이터를 넣으면 된다.


static void PrintProfile( string name , string phone)

{

Console.WriteLine("Name: {0}, Phone : {1} " , name , phone);

}

static void main ( string[] args)

{

PrintProfile(phone: "010-1234-5678" , name: "홍길동");

}

//명명된 매개변수를 이용해 코드 작성시 코드의 가독성이 높아짐


선택적 매개변수


선택적 매개변수 기능을 사용하면 메소드의 매개변수를 특정값으로 초기화하듯이 메소드를 선언할 수 있다.


void MyMethod ( int a=0; int b=0;)

{

Console.WriteLine("{0},{1}",a,b);

}


기본값을 가지는 매개변수는 필요에 따라 데이터를 할당하거나 하지 않을 수 있다.

//매개변수의 수가 많고 선택적 매개변수가 많이 포함되면 코드를 해석하는데 힘들 수 있으므로 그럴땐 명명된 매개변수 기능의 도움을 받는것이 좋다.

+ Recent posts