hustle_D 2025. 6. 15. 15:08
반응형

C# 에서 함수에 대해서 설명할때 특이점만 설명하도록 하겠다.

 

XML 문서 주석으로 함수 설명 작성하기

Vusual Studio로 프로그램을 만들때 함수를 어떻게 사용할지에 대한 설명을 작성하기 위해서 / 세개를 사용해서 주석을 달 수 있다.

함수의 위에 ///를 입력하면

이렇게 <summary></ summary > 구문이 생성되는데 이를 XML 문서 주석이라고 한다.

이 내부에 함수에 대한 설명, 매개변수, 반환값에 대한 설명을 작성한다.

만약 아래와 같은 메서드가 존재할때 

위에서 했던것과 같이 /// 를 입력하면  

이렇게 자동으로 파라미터(매개변수), return 값에 대한 태그가 추가된다.

이 안에 내용을 아래와 같이 임의로 작성하고 

 

Main메서드에서 이 메서드를 사용할 때

해당 메서드 위에 마우스롤 호버해보면 

이렇게 메서드에 대한 설명이 출력된다.

매개변수에 대한 설명은 함수의 매개변수에 마우스를 호버할때 확인된다.

 

이를 통해 사용 뿐만 아니라 유지보수 할때 이 내용을 기반으로 가독성을 높일 수 있다.

 

기본 매개변수

매개변수에 값을 넣지 않더라도 기본 값이 자동으로 할당되어 메서드 호출을 할 수 있게 해주는 방법이 가능하다.

간단히 말하자면 메서드의 매개변수에 기본값을 지정해줄 수 있고 값이 전달되지 않으면 기본값으로 실행하고, 값이 전달되면 전달되는 값으로 실행하게 된다.

보다시피 두번째 전달인자를 전달하지 않더라도 기본값인 10을 할당해서 실행되게 된다.

또한 기본값이 있는 매개변수에 값을 전달해도 

정상적으로 잘 출력하는 것을 볼 수 있다.

 

명명된 매개변수

매개변수의 변수명을 메서드를 호출할때 지정해서 매개변수로 전달하면 순서가 다르더라도 원하는 값을 원하는 순서로 작성하는 것이 가능하다.

이때는 :(콜론)기호를 사용해서 원하는 매개변수명:값의 쌍으로 전달하면 된다.

이렇게 직접 매개변수명을 지정하면 순서에 상관없이 값을 전달할 수 있게된다.

 

함수의 오버로딩

함수는 동일한 이름으로 두개 이상 등록하는 것은 불가능하다.

다만 함수의 매개변수의 갯수, 타입이 다르다면 동일한 함수명으로 함수를 선언 및 사용이 가능하게 되는데 이렇게 동일한 함수명으로 매개변수의 갯수와 타입이 다른 함수를 선언하는 것을 오버로딩이라고 한다.

 

이렇게 동일한 명칭의 메서드가 있을때는 전달하는 매개변수의 갯수, 타입에 따라 호출하는 메서드가 달라지게 된다.

 

화살표 함수

자바스크립트와 비슷하게 C#에서도 화살표 함수를 생성하는 것이 가능하다.

다만 여러줄로 구성된 함수는 화살표 함수로 변경이 불가능하다

 

이 화살표 함수를 사용할때 return 값이 있는 경우는 return 값에 해당하는 내용만을 작성하면 이 결과를 반환한다.

기존의 함수와 비교하자면 

static int Plus(int n, int m)
{
	return n + m;
}

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

static int Plus(int n, int m) => n + m;

이렇게 변환이 가능하다.

 

이렇게 하나의 표현식만을 가지는 화살표 함수를 식 본문 함수라고 부른다.

 

로컬 함수

하나의 블럭 내부에서 사용되는 함수를 로컬 함수라고 한다.

보면 메인 함수를 갖고 있는 클래스에서 메인 함수 외부에서 정의되는 함수는 전역함수라고 할 수 있고 메인함수 내부 혹은 전역함수 내부에서 정의되는 함수의 경우는 로컬함수라고 할 수 있다.

 

전역 함수의 경우 메인 내부에서 사용되기 위해서는 메인이 이미 static으로 선언되어 있기에 

이 메인 함수 내부에서 사용 되기 위해서는 사용될 함수 또한 static으로 정적 함수로 선언되어있어야 한다.

그 이유는 정적 변수 및 함수는 실행 시점에 이미 사용 가능하도록 메모리에 올라가 있게 되는데 Main함수의 외부에 존재하는 전역변수 혹은 전역함수들을 정적 변수 혹은 정적 함수가 아니게 선언해두면 이미 올라가 있는 Main이 사용할수 없기 때문이다.

적정 변수 혹은 함수는 실행 시점에 이미 생성되어 있기에 인스턴스를 필요로 하지 않고 비 정적 변수 혹은 함수들은 인스턴스가 있어야만 생성되어 사용이 가능하기 때문이다.

 

그렇기에 Main에만 해당하는 내용이 아니라 정적 함수의 내부에서 사용될 전역 변수 혹은 전역 함수의 경우에는 정적 변수 혹은 정적 함수로 선언되어야만 한다.

 

이와는 반대로 지역 변수 혹은 지역 함수는 궂이 정적으로 선언되지 않더라도 Main에서 정의 및 선언 되기 때문에 문제가 없다

그래서 선언할때 static 키워드를 궂이 사용하지 않더라도 문제가 없다.

 

Main함수 args 배열에 값 전달하기

Main함수의 args에는 해당 프로젝트가 빌드되어 생성된 exe파일을 실행할때 같이 전달되는 옵션 혹은 파라미터를 담아 가져온다.

Ctrl + F5를 해서 코드를 실행할때 아래쪽 콘솔 창을 보면 

이렇게 경로가 확인된다.

해당 경로로 가보면 아래와 같이 exe파일이 있는 것을 볼 수 있는데 

Ctrl + F5는 디버깅을 따로하지 않고 빌드를 하고 실행하는 과정으로 이를 통해서 exe, 실행파일을 생성한다.

그리고 이렇게 생성된 파일을 cmd를 사용해서 실행하는 것이 가능한데 

코드를 아래와 같이 전달하는 args를 foreach를 사용해서 출력하는 코드로 변경하고 

Ctrl + F5를 눌러 빌드를 해준 다음에 위 실행 과정에서 exe파일 뒤로 띄어쓰기를 기준으로 값을 추가로 작성해서 실행해보면

이렇게 띄어쓰기를 기준으로 파라미터들을 배열로 받아오는 것을 알 수 있다.

 

이전 프로젝트에서 물론 C#은 아니고 파이썬이긴 했다만 옵션값을 미리 지정해두고 이를 파라미터로 전달해서 옵션에 해당하는 코드를 실행하는 방법을 사용하는것을 봤었고 이 args가 이런 이유에서 사용되는 것으로 보인다.

class Program
{
    static void Main(string[] args)
    {
        bool isShow = false;
        bool isLong = false;

        foreach (var arg in args)
        {
            if(arg == "--show")
            {
                isShow = true;
            }
            if(arg == "--long")
            {
                isLong = true; 
            }
        }

        if (isShow)
        {
            Console.WriteLine("동영상을 보여주는 로직을 진행했습니다");
        }
        else
        {
            Console.WriteLine("동영상을 보여주지 않는 로직을 진행했습니다");
        }

        if (isLong)
        {
            Console.WriteLine("긴 버전의 동영상을 실행하게 하는 로직을 진행했습니다");
        }
        else
        {
            Console.WriteLine("기본 버전의 동영상을 실행하게 하는 로직을 진행했습니다");
        }
    }
}

코드를 위와 같이 변경한 후에 Ctrl + F5로 빌드를 하고 다시 cmd에서 exe를 그냥 실행해보면

이렇게 동영상을 보여주지 않고 기본 버전 동영상을 보여주는 default 버전으로 프로그램이 실행되는데 여기서 exe 뒤로 --show --long을 전달하면

이렇게 실행의 분기를 변경할 수 있는 값으로 활용이 가능하다.

 

그리고 기존에 다른 사람들이 만들어둔 프로그램의 경우는 이렇게 옵션값이 지정되었을때에 대해서 코드를 수정해야할 수 있는데 디버깅 자체를 이런식으로 빌드하고 실행하는 등의 과정은 하나의 프로그램에서 진행하는게 아니라 cmd도 쓰고 visual studio도 쓰는 등의 번거로움이 있기 때문에 Visual Studio에서는 기본으로 환경 설정 값에 이러한 파라미터를 빌드할때 같이 전달할 수 있도록 해주는 기능이 존재한다.

 

솔루션 탐색기(Ctrl + Alt + L) > 프로젝트 우클릭 > 속성에 들어가면

 

디버그 > 일반 > 디버그 시작 프로필 UI열기를 누르면

 

아래와 같이 시작 프로필이라고 해서 창이 열리는데

 

 여기서 명령줄 인수의 값에 --show를 넣어주고 

창을 꺼주고 Ctrl + F5를 눌러서 프로젝트를 실행해보면

위 처럼 --show 파라미터, 옵션값을 전달하면서 프로젝트를 실행하게 해주는 것을 볼 수 있다.

 

 

반응형