본문 바로가기
[ Program ]/c#스터디

32.인텔리센스/오버로딩

by 관이119 2021. 10. 9.

인텔리센스는 프로그램을 편하게 할수있게 해주는 가이드이다.

비주얼스튜디오 에서 제공하는 내용으로 이클립스에서도 비슷한 기능이 있다.

우리는 메세지 출력할때 MessageBox 를 입력하고 . 을 누르면 Show 라는 함수를 쉽게 쓸수있고 파라미터로 어떤값을 넣어줘야하는지도 나온다.

만약 우리가 비주얼스튜디오가 아닌 메모장에서 해당코드들을 직접입력하면 저런도움을 받을수 없다.

내가 아는 한도내에서는 비쥬얼스튜디오처럼 인텔리센스 기능이 잘되있는 툴은 없다.

 

우리가 계속 사용하고 있는 MessageBox 기준으로 알아보자.

MessageBox 를 코딩하고 . 을 찍으면 MessageBox 에 있는 사용가능한 것들이 나온다.

MessageBox 라는 클래스에 속하는 함수들인데 그중 우리는 Show 를 선택해서 사용할수 있다.

그림1

 

그림1에서 보면 선택할수 있는 함수와 각 함수에 대한 설명이 나온다.

이렇게 전체적으로 가이드 해주는걸 인텔리센스라고 부른다.

저중에서 Show 함수를 선택하고 파라미터를 넣기 위해 ( 를 입력해주면 DialogResult 라는 것을 반환하고 string 을 파라미터로 받고 (+20 오버로드) 라고 되있다.

 

우리가 함수를 만들때 사용자가 어떤행동을 할지 완벽하게 예측할 수 없다.

모든사용자가 프로그램을 완벽하게 동일하게 사용하는것도 아니다.

즉, 함수인자가 여러형태로 들어오게 만들면 편한데 지금 우리가 사용하고 있는 show 함수역시 마찬가지이다.

 

그림2

 

그림2와 같은 화면이 뜨면 빨간색으로 표시해놓은 화살표를 눌러보자.

 

 

그림3

 

그림3과 같이 7번째를 보면서 순서대로 넣어보자.

파라미터가 4개있는데 순서대로 따라서 넣어보자.

처음 string text 라고 되있는건 우리가 하던대로 출력해줄 string 타입의 텍스트를 넣어주면 된다.

두번째 string caption 이라고 되있는건 string 타입의 텍스트를 넣어주면 messagebox 상단에 제목으로 표시된다.

 

그림4

 

 

세번째 파라미터는 그림4와 같이 입력하는 형식을 넣고 . 을 누르면 선택할수 있는 옵션이 뜬다.

그중 YesNo 를 선택해보자.

 

그림5

 

네번째파라미터는 그림5 와 같이 입력하고 warning 를 선택해보자.

 

그림6

 

그리고 나서 실행하면 그림6과 같은 결과를 볼수 있다.

우리가 선택한대로 나오는것이다.

title 라는 제목표시줄과 content 라는 내용 그리고 선택한 yes,no 버튼 그리고 Warning 마크까지 나왔다.

 

우리가 이 함수를 만든다고 생각해보자.

고객사에서 텍스트박스에 글씨를 입력하면 출력하는 프로그램을 만들어달라고해서 처음 메세지를 출력하는 함수를 만든다.

public void Show(string text)

{

    내용을 출력할 코드;

}

처음 저 함수를 만들었는데 고객사가 기능확장을 요청해왔다.

제목을 입력한대로 표시하게 해달라고 한다.

그러면 또 함수를 만든다.

public void Show_title(string text,string title)

{

    내용을 출력할 코드;

    제목을 출력할 코드;

}

그런데 다음날 또 기능확장을 요청한다.

예 아니오 선택을 할수 있게 해달라고 한다.

그러면 또 함수를 만든다.

public void Show_title_yesnobutton(string text,string title,MessageBoxButtons buttons)

{

    내용을 출력할 코드;

    제목을 출력할 코드;

    buttons 파라미터에 따라 버튼을 보여줄코드;

}

이미 함수가 3개가 만들어졌다.

그러면 고객사에서 어떤화면에는 메세지 출력만 하게 하면되고 다른화면에서는 yes,no 버튼이 있어야되고 이러면서 설명을 해주면 우리는 화면마다 각각 다른 함수를 호출해야 할것이다.

A 화면에서는 show("aaa");

B 화면에서는 show_title_yesnobutton("content","title",MessageBoxButtons.YesNo);

이런식으로 말이다.

 

소스코드가 복잡해질수록 , 고객 요구사항이 늘어갈수록 함수는 늘어가고 우리프로그램도 점점 복잡해진다.

어차피 동일한 메세지 박스를 호출해야하고 파라미터만 다르게하면 알아서 그 메세지 박스형태를 출력해주면 되지 않을까 생각해볼수 있다.

그래서 함수를 오버로딩 할수 있게 만들어두고 그런형태로 show 를 만들어둔것이다.

MessageBox.show 함수를 보면 +20 오버로딩 이라고 되있는데 이런형태로 파라미터만 다르게 넣어주면 다른행동을 할수 있는 함수가 20개가 있다는 의미이다.

닷넷프레임워크에서 미리 저런함수를 만들어뒀기 때문에 우리는 편하게 가져다 쓰기만 하면된다.

만드는 방법도 간단하다.

같은함수명에 파라미터만 다르면 된다.

파라미터 개수가 다르거나 파라미터 형식이 다르면 된다.

public string aa(string n)

{

      return n;

}

public string aa(string m)

{

      return $"{m}입니다.";

}

예를 들면 위와 같은 함수두개를 동시에 만들고 aa("test") 라고 호출하면 컴파일러는 어떤 함수를 호출해야 되는지 알수 없게 되버린다.

동일한 함수 명칭에 동일한 파라미터를 받으니 구분할수 없게 되버리는 것이다.

 

그림7

 

그림7을 보면 어떤값이 들어와도 문자로 만들어서 출력할수 있게 오버로딩한 내용이다.

소스는 쉽게 이해할수 있을거라고 생각한다.

 

사실 우리가 직접프로그램하면서 오버로딩할경우는 많지않다.

대부분 저런형태가 필요한 경우는 모든곳에서 공통으로 사용하는 무언가(dll, 프레임워크,공용함수등) 를 만들때이다.

하지만 꼭 이런원리로 이렇게 만들어놨구나 정도는 알고 넘어가야한다.

그리고 년차가 쌓이면서 공통으로 사용하는 무언가를 직접 만들때 저런식으로 가져다 쓰는쪽의 편의를 생각하면서 만들수도 있을것이다.

 

 

***숙제 : 어떤경우에 오버로딩을 사용하면 좋을지 생각해서 이야기해보자. 코드를 만들필요는없음.

'[ Program ] > c#스터디' 카테고리의 다른 글

34.클래스(생성자,소멸자)  (0) 2021.10.09
33.갑자기실습  (0) 2021.10.09
31.업데이트내역 프로그램만들기 / splite  (0) 2021.10.09
30.함수2  (0) 2021.10.09
29.접근제한자, 네임스페이스 , 클래스  (0) 2021.10.09

댓글