본문 바로가기
  • 불확실한 내일을 위해
유니티 C#/C#

C#기초 - 메서드(Method)란? (인수, 반환값, void 뜻)

by 그린초코 2023. 5. 2.

스크립트를 처리 블록으로 분해하고 이름을 붙여서 사용할 수 있는데, 이것을 "메서드(Method)"라고 한다.

메서드는 주로 처리를 기능 단위로 묶거나, 메서드에 값을 전달해 계산하거나 계산 결과를 돌려받을 수 있도록 한다.

유니티 C# 를 실행했을 때 항상 기본적으로 입력되있던 Start 와 Update도 메서드이다. 

 

메서드로 건내는 값을 "인수(argument)" 라고 하고, 메서드에서 돌려받는 값을 "반환값(return value)" 이라고 한다.

그리고 메서드를 정의할 때 입력 값으로 변수를 선언하게 되는데(=메서드명) 이를 "매개변수(parameter)"라고 한다. 

인수는 여러 개 건넬 수 있지만 반환값은 한 개로 정해져있다.

 

작성방법의 기본 구조는 아래와 같다.

반환값의 데이터형 메서드명(데이터형 인수1, 데이터형 인수2 ...)
{
    메서드 처리;
    return 반환값;
}

메서드를 호출하는 방법은 아래와 같다.

메서드명(인수1, 인수2...)

인수와 반환값은 같이 있을 수도 있고 없을 수도 있다.

인수가 없으면 비어있고, 반환값이 없으면 void 라는 함수를 사용해서 표시한다. 

 

인수가 비어있으면 "메서드명()"

반환값이 없으면 "void 메서드 (인수1, 인수1..)"

인수와 반환값 모두 없으면 "void 메서드 ()" 

이런식으로 표현된다.

 

상황에 따른 예를 들어보면 아래와 같다. 

 

<예시1 : 인수와 반환값이 모두 있는 메서드 >

 

아래와 같은 예시문을 보았을 때 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        int answer;
        answer = Add(1, 2);
        Debug.Log(answer);
        
        int Add(int x, int y)
        {
            int sum = x + y;
            return sum;
        }
    }
    // Update is called once per frame
    void Update()
    {

    }
}

아래처럼 써도 결과는 같다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour
{
    // Start is called before the first frame update
    int Add(int x, int y)
    {
        int sum = x + y;
        return sum;
    }
    void Start()
    {
        int answer;
        answer = Add(1, 2);
        Debug.Log(answer);
    }
    // Update is called once per frame
    void Update()
    {

    }
}

결과 : 3

여기서 해석을 해보면, 

 

int Add 는 반환값의 데이터형과 메서드명

int x 와 int y 는 데이터형 인수 1, 데이터형 인수 2 

int sum 는 두 인수의 합

return sum 에서 sum은 반환값이다.

 

answer = Add(1, 2); 를 써서 메서드를 호출했고 

Debug.Log(answer); 를 통해 answer = Add(1, 2); 의 반환값이 콘솔창에 출력된 것이다. 

 

<예시2 : 인수와 반환값이 모두 없는 메서드 >

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour
{
    // Start is called before the first frame update
    void say()
    {
        Debug.Log("Hi");
    }
    void Start()
    {
        say();
    }
    // Update is called once per frame
    void Update()
    {

    }
}

결과 : Hi 

콘솔창에 문자를 출력할 뿐 호출자의 값을 반환하지 않는다. (반환값이 없다)

void say () 를 해석하면,

반환값이 없으므로 void 함수, 메서드명은 say 이고, 인수가 없어서 괄호 () 안은 공백이다.

이 때 say 메서드를 사용할 위치는 Start 메서드를 벗어나도 test 클래스 안이면 상관없다. 

* 참고로 반환값이 없는 메서드를 사용할 때 함수 void를 사용한다.  

 

<예시3 : 인수는 있고 반환값은 없는 메서드 >

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour
{
    // Start is called before the first frame update
    void say(string name)
    {
        Debug.Log("Hi " + name);
    }
    void Start()
    {
        say("Jane");
    }
    // Update is called once per frame
    void Update()
    {

    }
}

결과값 : Hi Jane

say("Jane"); 를 써서 say 메서드를 호출하면 string name (string 은 문자열임) 에서 name 에 Jane 이 대입된다.

 

<예시4 : 인수에 변수를 지정한 메서드 >

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour
{
    // Start is called before the first frame update
    int Add(int x, int y)
    {
        int sum = x + y;
        return sum;
    }
    void Start()
    {
        int answer;
        int num1 = 1;
        int num2 = 2;
        answer = Add(num1, num2);
        Debug.Log(answer);
    }
    // Update is called once per frame
    void Update()
    {

    }
}

결과값 : 3

이런식으로 변수 지정해서 사용할 수도 있다.

728x90

댓글