티스토리 뷰

반응형


안녕하세요. Base Of Coding입니다.


이전 강의에선 배열에 대해서 알아봤습니다. 왠지 배열전의 글에선 좀 어렵게 설명한 것 같아 맘에 걸려서


배열 이후부터는 조금 쉽게 설명하면서, 알아가실 수 있도록 쉽게 설명을 한 번 더 첨부해보려고 합니다..


배우시는 분 입장에서 쉽게 설명한다고 한 것 같은데.. 어렵게 느껴지실 수도 있겠구나 라고 생각이 드네요ㅠㅠ 죄송합니다.


이전까지의 강의 목록을 밑에서 보실 수 있습니다^^



자 그럼 함수에 대해서 알아보도록 하겠습니다.




1. 함수?? 그게 뭐지?

- 프로그래밍 관점에서의 함수로 말하자면, 하나의 기능들을 하나에 묶어 놓은 것이라고 생각하시면 편할 것 같습니다.

더 쉽게 말하자면, 메모장 프로그램에 대해서 예를 들어보겠습니다.

메모장을 실행하게 되면, 각각의 기능들이 있습니다. 새로 만들기, 파일 저장, 다른 이름으로 저장, 닫기, 열기 등등.. 여러가지의 기능들이 따로따로 있습니다.

자 그러면, 새로 만들기를 누르게 되면, 어떻게 되나요? 글이 입력되어 있었다면, 저장을 안하고 새로 만들거냐는 말을 묻고 저장하지 않는다고 클릭을 하면 새로 만들게 됩니다. 

새로 만들기를 눌렀다는 가정하에 대화내용입니다.


저장 비교 : 자 기다려봐~ 저장했는 지 안 했는 지 한번 확인해볼게~ ( 0.0001초 후 ) 응 저장하지 않았네, 자 글자 비교해봐

글자 비교 : 어~ 글자도 있는 지 비교를 해볼까? ( 0.0001초 후 ) 어! 글자가 한 글자가 있어. 자 그럼 이제 너가 사용자한테 저장할 건지 물어봐

사용자 다이얼로그 : 음 잠깐만 다이얼로그 좀 만들어서 띄워야되니깐~ ( 0.0001초 후 ) 자 사용자님 저장할까요? 말까요? 클릭해주세요.


이런식으로 하나하나 보이진 않습니다. 그냥 새로 만들기는 새로 만들기 버튼일 뿐이니깐요.


아직도 이해가 가시지 않는다면, 천천히 그럼 알아보도록 하죠. 코드를 보면 이 말이 무슨 말인 지를 아실 수가 있습니다.



2. 함수의 기본

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/*
*   Code Design Develop. Base Of Coding
*   https://includecoding.tistory.com/
*/
 
using UnityEngine;
 
/// <summary>
/// 함수 예제 첫 번째
/// </summary>
 
public class FuncTest : MonoBehaviour 
{
    private void Start()
    {
        BaseFunc();
    }
 
    /// <summary>
    /// 함수를 만들었습니다.
    /// </summary>
    private void BaseFunc()
    {
        Debug.Log("이것이 함수의 기본입니다.");
    }
}


- 자 코드를 한 번 풀이해보겠습니다.


1. Start 함수에선, BaseFunc()라는 함수를 호출합니다. 함수를 사용한다는 말을 함수를 호출한다고도 많이 말하십니다.

2. 자 그러면, 호출한 함수로 넘어가볼까요? 22번째 줄에 private void BaseFunc라는 함수가 있네요.

3. 이 함수를 보니, 디버그 로그 함수가 있습니다. 이것이 함수의 기본입니다. 라는 것을 출력하게 만들어주네요.

4. 유니티에서 실행을 해보니, 이것이 함수의 기본입니다. 라는 문자열이 출력이 됩니다.


자 한 마디로, BaseFunc()는 디버그 로그로 이것이 함수의 기본입니다. 라는 것을 출력하게 만드는 기능이다!라고 생각하시면 됩니다.

여기서, 아니 왜 이 한 줄 실행하려고 3줄이나 적어야 되요?라고 하실 수 있습니다. 물론 이렇게는 함수를 사용하지 않습니다ㅎㅎ

천천히 알아볼까요??


3. 함수를 사용하는 이유!

1. 함수를 이용하여, 기능을 이용하는 여러 줄의 코드를 하나의 함수로 묶어서 사용한다.


- Debug.Log 하나 사용하려고 절대 함수화를 시키진 않을 것 입니다. 그런데 왜 함수를 사용하냐면, 기능 하나를 사용하기 위해서,
50줄의 코드가 발생된다고 생각해보겠습니다. 근데 기능은 한 가지만 있는 것이 아닐겁니다. 또한 이 50줄의 코드를 또 어디선가 사용이 될 수도 있습니다.
자 그렇다면 쉽게 한 번 생각해볼까요?

자 극단적으로, 한 명은 돈을 찍어서 계산을 해야하는 사람 vs 돈을 찍어서 가지고 있는 사람이라고 생각하겠습니다.
이 두 사람은 장을 보기 위해서 마트를 갔습니다. 두 사람은 장을 다 본 뒤에 각각 계산대에 있습니다.
돈을 찍어서 계산을 해야 하는 사람은, 계산을 하기 위해선 일단 나무를 가져옵니다. 그 나무로 종이를 만들고 종이를 만든 다음, 돈으로 가공합니다. 이 과정을 가격에 맞게 만들어내고 있습니다. 굉장히 비효율적이죠?
하지만, 돈을 찍어서 가지고 다니는 사람은, 그냥 그 물건의 가격을 돈으로 가지고 있을겁니다. 굉장히 극단적이지만, 단 하나의 공통점은 돈이라는 것입니다.



2. 함수를 이용해서, 값을 받아올 수가 있다.


- void, int, string, float, long과 같은 자료형이 있습니다. 자료형을 잘 모르신다면, 2장인 변수란 무엇인가?를 참고해주시길 바랍니다.

자, 그러면 함수 원형인, void BaseFunc() 이란 함수가 있었습니다. 이 함수의 뜻은, BaseFunc() 이란 이름을 가진 함수야! 하지만 내가 돌려보낼 값은 void형이니깐

return 할 것이 하나도 없어 그냥 안에 있는 코드들만 실행해주면 돼! 라는 뜻을 가지고 있습니다.


- 그럼 int BaseFunc() 라는 함수는 무엇일까요? 이 함수의 뜻은, 난 BaseFunc()라는 이름을 가진 함수야! 내가 돌려보낼 값은 int형인데, 안에 있는 함수를 실행한 뒤에 int값을 돌려보내줘! 라는 뜻을 가지고 있습니다. 그럼 한 번 코드로 살펴보겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/*
*   Code Design Develop. Base Of Coding
*   https://includecoding.tistory.com/
*/
 
using UnityEngine;
 
/// <summary>
/// 함수 자료형 리턴 예제
/// </summary>
 
public class FuncTest : MonoBehaviour 
{
    private void Start()
    {
        int i = IntegerFunc();
        string s = StringFunc();
        float f = FloatFunc();
 
        Debug.Log(i + " : " + s + " : " + f);
    }
 
    // int형을 리턴하는 함수입니다.
    private int IntegerFunc()
    {
        int integer = 5 + 4;
        return integer;
    }
 
    // string형을 리턴하는 함수입니다.
    private string StringFunc()
    {
        string str = "안녕하세요";
        return str;
    }
 
    // float형을 리턴하는 함수입니다.
    private float FloatFunc()
    {
        float flo = 3.14f;
        return flo;
    }
}


함수를 각각 자료형에 맞게 리턴하는 형식으로 만들어놨습니다.

IntegerFunc에는, 5+4인 값인 9를 가지고 있는 int integer 변수를 리턴하고,

StringFunc에는, 안녕하세요라는 문자열을 가지고 있는 string str 변수를 리턴하고,

FloatFunc에는, 3.14라는 실수를 가지고 있는 float flo 변수를 리턴합니다.


그 리턴한 값을, int i와 string s, float f라는 값이 각각 리턴 타입에 맞게 가지고 있는 것을 Start 함수에서 보실 수가 있습니다.

그렇게 i,s,f 값을 디버그를 이용해서 출력해보면, 9 : 안녕하세요 : 3.14라는 값이 출력이 되게 됩니다. 이 것이 바로, 함수를 이용해서 값을 받아오는 방식입니다.


또한 각각의 함수에 변수를 이용하지 않고, return 9; , return "안녕하세요"; , return 3.14f; 이런 식으로 리턴을 해도 상관 없습니다.


3. 매개변수를 이용하여 그 값을 사용 또는 바꿀 수가 있다.

- 매개변수란, ()이 괄호 안에 타입에 맞는 변수를 만들어 줄 수 있습니다. 하지만, 매개변수가 있는 함수를 호출할 시에는 그 타입에 맞는 변수를 ()안에 넣어줘야만 호출이 가능합니다. 자 그럼 한 번 어떤식인 지 알아보겠습니다. 지역변수는 값이 변하기가 어렵기 때문에, 전역변수를 이용하도록 하겠습니다. 지역과 전역의 차이는, 사용하는 함수 안에 있는 지 밖에 있는 지의 차이입니다. 이것 또한 나중에 천천히 알아보도록 하겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/*
*   Code Design Develop. Base Of Coding
*   https://includecoding.tistory.com/
*/
 
using UnityEngine;
 
/// <summary>
/// 함수 매개변수 예제
/// </summary>
 
public class FuncTest : MonoBehaviour 
{
    private int changeVariable = 0;
 
    private void Start()
    {
        // 1.
        Debug.Log(changeVariable);      // 0이 출력이 됩니다.
 
        // 2.
        ChangeFunc(10);                 // 10이란 값을 매개변수에 보냈습니다.
        Debug.Log(changeVariable);      // 10이란 값이 출력이 됩니다.
 
        // 3.
        ChangeFunc(15);                 // 15란 값을 매개변수에 보냈습니다.
        Debug.Log(changeVariable);      // 15란 값이 출력이 됩니다.
    }
 
    private void ChangeFunc(int variable)
    {
        changeVariable = variable;
    }
}


전역변수로 changeVariable이란, 변수를 하나 만들었고, 0으로 초기화를 했습니다. 물론 0을 붙이지 않아도 전역변수는 알아서 0으로 초기화를 시켜줍니다.


그리고, Start 함수를 한 번 살펴보겠습니다. 제일 처음에, changeVariable에 있는 값을 출력하면, 0이 출력이 될 것 입니다.


그리고, ChangeFunc라는 함수를 실행하는 데 10이란 값을 보내네요? 함수를 살펴보면, int variable이란 매개변수가 있습니다.


그 매개변수에 저장 된 값을 changeVariable에 대입을 해줍니다. 그리고, Start 함수에서, 현재 changeVariable의 값을 출력해보네요. 그럼 10이 출력 될 것이고,


똑같은 방식으로 15란 값을 보내면서 호출합니다.그리고 또 출력해보면 보낸 값인 15가 출력이 됩니다.


매개변수로, 전역변수에 있는 값을 변경시킬 수도 있습니다. 지역변수를 쓸 수 없는 이유는, 지역변수는 해당 함수에서만 사용이 가능하기 때문입니다.


모르고 넘어가셔도 됩니다. 전역변수와 지역변수 또한 강의 내용에 포함되어 있습니다.


4. 쉽게 풀이를 해봅시다.

- 함수를 사용하는 이유를 돈을 찍어서 계산하는 사람 vs 돈을 찍어서 가지고 있는 사람으로 나누어봤습니다. 자 그러면 위에 두 가지는 이렇게 생각하면 좋을 것 같다는 생각에 쉽게 풀어보았습니다.

1. 함수를 사용해서 값을 받아올 수가 있다.와 같은 방식은, 만약에 return 값이 int라고 생각해보겠습니다.
현재 한국에서 사용이 가능한 돈은, 10원 , 100원 , 500원 , 천원 , 오천원, 만원,  오만원권이 있습니다. 수표는 제외시키겠습니다.
자 그렇다면, 각각 돈을 만드는 과정은 다를 것입니다. 하지만, return값은 int와 같죠. 소수점이 없습니다!
그럼, 어느 한 곳은 돈을 만들지만 10원을 리턴하는 기능을 하고 있고, 어떤 한 곳은 돈을 만들지만 100원, 다른 곳은 500원, 천원, 오천원, 만원, 오만원 이런 형식으로 지폐 또는 동전을 찍어내겠죠.? 리턴값을 보내는 함수를 이런 방식으로 생각하시면 좀 더 간단하게 생각이 되지 않을까 싶습니다.

2. 매개변수를 이용하여, 그 값을 사용 또는 바꿀 수가 있다. 와 같은 방식은, 마트라고 생각을 하겠습니다.
그 마트에서 장을 보기 위해선 이 정도의 돈이 필요합니다! 와 같은 미리보기 계산기가 있다고 가정하겠습니다. 
자 이것 저것 찍어보고 장바구니에도 넣어보고 빼보기도 하고 했다가 나중에 내가 현재 가지고 있는 금액을 딱 입력해줍니다. 
그럼 그 계산기에서 손님은 이걸 사면 이 정도의 돈이 남습니다. 또는 이 정도의 돈으로 사기 위해선 얼마가 더 필요하다는 방식으로 값을 보여줄 수도 있습니다. 
매개변수를 활용한 함수는 이런 방식으로 가능할 것 같습니다.

3. 그럼 매개변수와 리턴값을 둘 다 활용한 방식은 어떨까요? 이건 만약에 돈을 찍어서 생산을 해야하긴 하지만
하루에 기계가 돌아갈 수 있는 횟수가 정해져 있다고 가정해보겠습니다.
그럼 매개변수로, 일단 기계가 돌아갈 수 있는 횟수를 넘겨줍니다. 그럼 기계에서 받겠죠? 하지만 이 기계에선 100원짜리만 생산합니다. 자 어제는 1000번을 찍어내라고 입력을 받았지만, 오늘은 100원짜리가 많이 부족한 지 100,000번을 찍어내라고 하네요. 어제는 1000번을 찍어서 10만원 어치 동전을 생산했지만
오늘은 1000만원 어치의 동전을 찍어내게 되겠네요ㅎㅎ 이건, 반복문을 사용해서 이런 방식으로 만들면 되겠습니다.


이번엔 함수에 대해서 한 번 알아봤습니다. 쉽게 풀이를 해보겠다고 돈에 대해서 한 번 대입을 해봤는데 쉽게 이해가 되셨기를 바라면서, 이번 강의 마치겠습니다.
다음 강의는 접근자와 지역 또는 전역변수?에 대해서 알아보도록 하겠습니다. 

Base Of Coding이였습니다. 감사합니다.


반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함