본문으로 바로가기

C# 메소드(Method)에 대하여 #9.5 메인사진

 

안녕하세요. 애드라이프 입니다.

이전 포스팅에 이어 메소드(Method)에 대해서

계속 이어가보도록 하겠습니다.

 

이전 포스팅이 궁금하신분은 아래 링크를 참고해 주세요.

 

[C# 프로그래밍/기초 다지기] - C# 프로그램 시작하기 - 메소드(Method)에 대하여 #9

불러오는 중입니다...

 

이전 포스팅에서 메소드에 기본적인 부분을

같이 알아봤는데요. 그중에서 ref 키워드를 사용한

참조에 대해서 마지막에 다뤘습니다.

 

보통 결과를 하나씩 반환하는 메소드에

여러개의 결과를 반환하도록 할 수 있죠.

하지만, 그 역할을 하는 전용 키워드가 있습니다.

바로 out키워드 입니다.

 

사용하는 방법이 ref키워드와 같기때문에

바로 프로그램으로 예제를 들어보겠습니다.

using static System.Console;

namespace keyword_out
{
    class Program
    {
        static void InOutMethod(string In1, string In2, out string Out1, out string Out2)
        {
            Out1 = In1 + "을 출력합니다.";
            Out2 = In2 + "을 출력합니다.";
        }
        static void Main(string[] args)
        {
            string x = "첫번째 결과값";
            string y = "두번째 결과값";

            InOutMethod(x,y,out string a,out string b);
            WriteLine($"a:{a},b:{b}");
        }
    }
}

 

위 프로그램에서 ref를 쓸때와 똑같이

out을 메소드를 선언할때와 사용할때

모두 적어주면 됩니다.

 

결과는 어떻게 나오는질 아시겠죠?

C# 메소드 출력 매개변수 out 프로그램 결과

사용하는 방법도 ref랑 같고 출력되는 결과도

같은 방식입니다. 하지만 사용하는 용도에 맞게

매개변수를 지정하여 사용하는것이 보기도 편하고

안전하게 동작되니 꼭 구분지어 사용 바랍니다

 

다음으로 메소드 오버로딩에 대해서 알아보겠습니다.

 

예를 들어서 입력받은 매개변수를 합하는 메소드가

있다고 가정하겠습니다. 이름은 Sum 입니다.

 

입력받는 매개변수의 형태는 메소드를 정의할때 같이 지정하죠?

 

int Sum(int x, int y)

 

이런식으로 말이죠.

하지만 입력받은 숫자가 double형이라면 어떻게 해야하나요?

보통은 메소드의 이름을 바꿔 새로 정의하려 할 겁니다

 

double Sum_type_double(double x, double y) 이렇게요.

 

하지만 이렇게 계속 생성하게 되면 같은 역할을

수행하는 메소드가 이름만 다르게 엄청 여려게

존재해야 하는 번거러움이 생깁니다.

 

이를 해결하는 방법이 메소드 오버로딩입니다.

같은 이름의 메소드를 메소드의 형태를 다르게 정의합니다.

그리고 실제 써먹을때는 컴파일러가

매개변수의 데이터 형식을 분석하여 

맞는 포멧의 메소드를 자동으로 선택해 주는것입니다.

 

간단하게 프로그램으로 이해를 돕겠습니다.

using static System.Console;

namespace overloading_Method
{
    class Program
    {
        static int Sum(int x,int y)
        {
            WriteLine("call int method");
            return x + y;
        }
        static double Sum(double x, double y)
        {
            WriteLine("call double method");
            return x + y;
        }
        static void Main(string[] args)
        {
            WriteLine(Sum(1,2));
            WriteLine(Sum(1.1, 2.2));
        }
    }
}

 

위 프로그램에는 main 메소드를 제외하고

이름이 같은 메소드 2개가 존재합니다.

하나는 int형을 매개변으로 받고

다른하나는 double형을 매개변수로 받죠

 

실제 main 메소드에서

해당 메소드를 실행 하였을때

따로 어떤 메소르를 고르라는 부분은 없습니다.

하지만 매개변수 타입에 따라 아래와 같이 결과가 돌출됩니다.

 

C# Method Overloading 프로그램 결과

 

다음은 수가 특정된 매개변수가 아닌 

가변 매개 변수에 대해 알아보겠습니다. 

 

앞선 포스팅에서 잠깐 다뤘던 배열을 이용하여

가변적인 매개변수를 대응하도록 하는 것입니다.

 

사용하는 방법은 아래와 같습니다.

int Sum(params int[] arrays)	//params라는 키워드와 배열을 이용한 가변 매개변수 메소드
{
	int x = 0;
    for(int i = 0; i<arrays.Length; i++)	//입력받은 매개변수의 길이만튼 반복문 실행
    {
    	x += arrays[i];
    }
    return x;
}

위 프로그램처럼 사용은 정말 간단합니다.

실제 프로그램울 여러분이 짜보시는건 어떠세요?

혹시 프로젝트 생성 및 실행에 대해 모르시는 분들은

아래 링크 참고해주세요.!!

 

[C# 프로그래밍/기초 다지기] - C# 프로그램 시작하기 - 간단한 콘솔 프로젝트 만들기 #2

 

C# 프로그램 시작하기 - 간단한 콘솔 프로젝트 만들기 #2

안녕하세요. 애드라이프입니다. 이전 포스팅에서는 C# 프로그래밍을 위한 개발 환경 구축을 진행했는데요. 모두 Visual Studio 2017 설치는 마무리 하셨나요? 혹시나 아직 개발 환경 구축을 하지못하신 분들을 위..

increase-life.tistory.com

[C# 프로그래밍/기초 다지기] - C# 프로그램 시작하기 - 간단한 콘솔 프로젝트 만들기 #2.5

 

C# 프로그램 시작하기 - 간단한 콘솔 프로젝트 만들기 #2.5

안녕하세요. 애드라이프 입니다. 전 포스팅에서 C# 콘솔 프로젝트를 만들어보고 간단한 프로그램을 작성해서 실행까지 해보았습니다. 이번 포스팅에서는 #2편의 프로그램을 심층!? 분석하는 시간을 갖도록 하겠습..

increase-life.tistory.com

 

그리고 꿀Tip으로 우리가 메소드를 사용할때

 

static void HumanInfo(string name, strinf age)

 

이렇게 선언하고

 

HumanInfo("애드라이프","20");

 

이렇게 쓰일 겁니다.

 

다른사람이 볼때라던지 매개변수가 많아 지면 어떨까요?

실행구문만 봐서는 저기에 뭘 입력해야 되는지 모르겟죠?

 

그럴때는

HumanInfo(name : "애드라이프",age : "20");

 

이런식으로 메소드를 선언했을때의 변수

이름으로 지정하여 사용할 수 있습니다.

 

첫번째 방식보도 훨씬 보기 편하죠?

나중에 코드를 보더라도 편하게 느껴지실 겁니다.

 

마지막으로 로컬함수에 대한 내용입니다만,

 

우선 이 내용은 자세히 다루진 않겠습니다.

어렵거나 그래서가 아니라 자연스레 익혀지기 때문에

지금부터 부담을 주고 싶지 않거든요.

 

간단하게 말해 로컬함수는

클래스 안에 메소드가 있듯이

메소드 내부에서 함수를 작성하여

사용하는 방식을 말합니다.

 

이전 포스팅에서 메소드는 함수같은거라

했는데 메소드 안에 함수라니요!!?

 

말로만 설명하면 이상하지만

그렇게 이상한 개념은 아닙니다.

바로 프로그램으로 예를 들어보겠습니다.

using static System.Console;

namespace local_fuction
{
    class Program
    {
        static void printConsole()
        {
            string a = "로컬 함수";
            Local_funtion("애드라이프의", "프로그램 입니다.");

            void Local_function(string str1, string str2)
            {
                WriteLine($"{str1} {a} {str2}");
            }
        }
        static void Main(string[] args)
        {
            printConsole();
        }
    }
}

 

위 프로그램에서 선언된 printConsole이라는

메소드 안에 Local_function이라는 로컬 함수가 있습니다.

이런식으로 메소드 안에서 함수처럼 동작하기때문에

메소드 밖에서는 아무런 역할을 하지 못하지만

메소드 안에서 코드의 길이를 줄이거나 정리하는데

탁원할 기능을 합니다.

 

결과는

C# 로컬함수 프로그램 결과

결과랑 함께 보시면 프로그램 이해하는데 

도움이 되실겁니다.

 

이번 포스팅까지해서 메소드에 대해서 알아보았습니다.

어떤분은 좀 어렵게 느껴지셨을 것이고

어떤분은 다 알고 있는 내용일 수도 이지만

한번 더 복습한다는 생각으로 보시면 좋을꺼 같습니다.

 

그럼 다음에는 더 유익한 포스팅으로 돌아오겠습니다.

by 애드라이프 

구독과 공감버튼 눌러주세요!!