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

28.함수1

by 관이119 2021. 10. 9.

프로그램에서 거의 모든 기본 개념은 함수에서 출발한다.

함수는 특정행동을 하는 내용을 모아놓은 덩어리라고 생각하면 된다.

 

우리가 이때까지 만들던 프로그램은 버튼클릭했을때 작동하게 만들었다.

만약 버튼이 여러개 있는데 다 똑같은 동작을해야할때 어떻게 해야할까?

물론 버튼마다 다 실행되야하는 내용을 적어주면 된다.

그런데 너무 소스가 길어지고 만들어야할게 많다.

비슷한동작이나 같은동작을 할경우는 해당 내용을 한군데 적어놓고 그거 실행하라고 하면 더 편할것이다.

 

함수의 기본형식은 다음과 같다.

함수명()

{

    실행할내용

}

언어에 따라 아래와같이 함수명 앞에 function 을 붙여 주는 언어도 있다.

function 함수명()

{

    실행할내용 

}

 

c#이나 자바같은경우는 위 기본형식외에 추가적으로 몇가지 내용을 더 가지고 있다.

아래내용은 두개언어에서 사용하는 기본 형식이다.

접근제한자 반환타입 함수명()

{

     실행할내용

}

 

접근제한자는 다음강에서 이야기하고 일단 public 이라고 써주자.

예제로 보자.

public void functest()

{

      MessageBox.Show("test");

}

 

public 는 접근제한자 , void 는 아무것도 반환하지않는다는 의미 , functest 는 함수명이다.

함수명뒤에는 괄호를 열고 닫고 해줘야 한다.

위경우는 파라미터(또는 인자) 라는 것이 없어서 괄호를 열고 닫고한것이다.

 

함수는 파라미터를 받을수 있다.

이 파라미터라는것은 외부로부터 받을수 있는 변수를 지정하는것이다.

 

하나의 동작을 하는 덩어리를 만들고 거기에 아무것도 넣을수 없으면 지정된 행동 외에는 아무것도 할수 없다.

그런데 만약 외부에서 특정값을 받을수 있다면 거기에 맞춰 여러가지 행동을 하는 덩어리를 만들수 있다.

우리가 이전에 만든 성적에 따라 등급을 출력하는 프로그램의 경우 통채로 하나의 함수로 만들수 있는데 점수를 외부에서 받아서 등급만 출력해주는 함수로 만들면 그 내용을 통채로 어디서든 가져다 쓸수 있다.

아래 예제를 보자.

 

public void functest(string message)

{

      MessageBox.Show(message);

}

위쪽예제와 차이점은 () 사이에 string message 라는 변수를 지정하고 message 를 출력한것이다.

괄호 사이에 저렇게 변수를 써주면 그변수를 함수내에서 사용할수 있다.

 

만약변수가 여러개 필요할경우는 아래와 같이 여러개를 , 로 연결해서 사용하면 된다.

public void functest(string message1,string message2)

{

      MessageBox.Show(message);

}

 

 

 

다시 정리해보자.

-------------------------------------------------

<파라미터가 없는 함수>

public void functest()

{

      MessageBox.Show("test");

}

<함수를 호출할때 아래와 같이 호출>

functest();

-------------------------------------------------

<파라미터가 1개있는 함수>

public void functest(string message1)

{

      MessageBox.Show(message1);

}

<함수를 호출할때 아래와 같이 호출>

functest("test");

-------------------------------------------------

<파라미터가 2개있는 함수>

public void functest(string message1,string message2)

{

      if(message1 == "test")

            MessageBox.Show(message1);

      else

            MessageBox.Show(message2);

}

<함수를 호출할때 아래와 같이 호출>

string str1 = "aa";

string str2 = "bb";

functest(str1,str2);

-------------------------------------------------

 

위 예제들을 보면 대략적인 감이 잡힐거라고 생각한다.

간단하게 설명하면 

<파라미터가 없는 함수> 는 test 를 출력하는 함수를 호출한것이고

<파라미터가 1개있는 함수> 는 message1 이라는 string 변수를 받아서 출력한것이고

<파라미터가 2개있는 함수> 는 message1 , message2 라는 string 변수를 받아서 message1 변수가 test 라는 문자면 message1 을 출력하고 아니라면 message2를 출력하는 것이다.

 

위에서 반환 타입 위치에 void 라고 써줬는데 void 는 반환값이 없다는 의미이다.

함수에서는 값을 처리하고 어떻게 돌려줄지 설정을 해줘야하는데 그게 위쪽 기본형식에서 반환타입이라고 적어놓은 부분이다.

 

위소스에서는 MessageBox 로 출력만하기때문에 아무것도 돌려주지 않아도 되서 void 라고 반환값을 준것이다.

다음 반환값이 있는 함수를 보자.

<예제1>

public string functest(string message1,string message2)

{

      if(message1 == "test")

            return message1;

      else

            return message2;

}

 

public 뒤에 문자형식인 string 을 지정해주고 함수명은 functest 라고 주고 파라미터는 message1 과 message2 를 넘겨줬다.

그리고나서 message1 변수의 값이 test 라는 문자면 message1 을 리턴해주고 아닐경우는 message2 를 리턴해준다.

리턴해준다는 의미는 결과값을 호출한 대상에게 넘겨준다는 의미이다.

 

함수는 자신을 호출한 대상에게 무언가 돌려줄것을 알려줘야한다.

아무것도 주지않을경우 void 정수를 돌려줄경우 int 문자를 돌려줄경우 string 등 실제로 호출한 대상에게 돌려줄 형식을 지정해주면 된다.

 

그림1

 

그림1처럼 소스를 만들고 functest 위에 마우스를 올려보면 어떤 값을 반환하고 어떤 파라미터를 받는지 나온다.

 

그림2

 

그림1과 같이 대상에 마우스를 올리면 그림2처럼 상세한 내용을 알수 있다.

클래스는 뒤에 배울내용이라 넘어가고 나머지는 이해가 될거라고 생각된다.

 

void 가 아닌 반환값이 있는 함수는 값을 받아서 사용해도 되고 호출만 해도 된다.

함수가 어떤결과값을 보내도 안받아서 안써도 된다.

그림3

 

그림3에서 보면 1번처럼 결과값을 받아서 아무행동도 안해도 되고 2번처럼 결과값을 받아서 출력을 해도된다.

 

 

그림4

 

그외 또다른 주의할점은 반환값이 있는경우 해당형식을 리턴해주지않으면 에러가 생기면서 빌드할수 없다는것이다.

그림4를 보면 일부값만 반환한다고 되있는데 소스에서 if 에서 message1 이 "test" 인경우만 비교되어있다.

즉, message1 이 test 가 아닐경우 return 할수있는 것이 없는상태인데 반환타입에는 string 이라고 되어있어 위와같은 오류가 발생하는것이다.

반환값이 있는경우는 어떤경우라도 리턴을 할수있게 소스코드를 짜야한다.

 

위소스같은경우 아래와 같이변경하면 빌드가 가능하다.

public string functest(string message1,string message2)
{
      if (message1 == "test")
          return message1;

      return "";
}

 

if 조건에 걸리지않으면 빈문자를 리턴한다는 의미이다.

 

 

그림5

 

그림5의 예제를 보자.

함수의 위치는 그림5에 있는것처럼 되어야한다.

namespace 안에 class 안에 함수를 써줘야 한다.

함수를 사용할때 꼭 위치를 확인하고 사용해야한다.

 

***숙제 :  26강에서 만든 구구단 출력기를 함수를 사용해서 만들어보자.

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

30.함수2  (0) 2021.10.09
29.접근제한자, 네임스페이스 , 클래스  (0) 2021.10.09
27.Object  (0) 2021.10.09
26.구구단출력기 만들기  (0) 2021.10.09
25.사칙연산기 만들기  (0) 2021.10.09

댓글