상세 컨텐츠

본문 제목

#2. 변수와 함수

유니티 학습/세미나 자료

by 남민우_ 2024. 7. 18. 00:26

본문

1. 변수

값이 할당되는 이름

어떤 값을 기억했다가, 이후 필요할 때 가져와서 사용하기 위해서 변수를 선언 및 정의한다.

런타임 중에 얼마든지 접근 가능하다는 특성을 가지고 있다.

int gold = 100;

 

이라고 선언했을 때 변수가 gold 이고 그의 값이 100으로 할당되는 형식이다.

 

2. 함수

미리 정해진 동작을 수행하는 묶음

여러 번 중복되는 코드를 간단하게 묶어 사용하기를 원할 때 호출해서 사용한다.

입력을 받을 수도(매개변수), 결과를 주지 않을수도(void), 결과로 값을 전달할 수도(return) 있다는 특징이 있다.

 

1. 입력을 받는 함수

public void GetCoin(int coin)
{
	myCoin += coin;
}

이 함수가 받는 입력은 매개변수인 'coin'  이 된다.

함수의 외부에서 이 GetCoin 함수를 사용할 때 매개변수의 값을 입력하며 호출하는 방식으로 사용한다

 ex) GetCoin(100);

 

2. 결과를 반환하지 않는 함수

public void PlaySound()
{
	SoundClip();
}

이 함수가 호출될 경우 내부 코드인 SoundClip() 부분을 작동시키고 그 외의 동작은 수행하지 않는다.

1번 - 입력을 받는 함수 예시의 GetCoin 또한 마찬가지이다.

함수의 타입은 반드시 void 여야 한다.

 

3. 결과를 반환하는 함수

public int GetRandNum()
{
	int num = 0;
	num = Random.Range(0, 100); // 0부터 100 사이의 랜덤한 값 반환

	return num;   // <- return 을 통해 이 함수를 호출하는 곳으로 num 반환
}

함수 내부의 return 을 통해 값을 외부로 반환한다.

함수의 타입은  void가 아닌 int, char 등으로 선언하며 return 하려는 값과 동일해야 한다.

 ex) 함수의 타입이 int 라면 num 의 타입도 int 로 동일해야 한다.

 

이때 외부에서는 이 함수를

int myRandNum = GetRandomNum();

과 같은 식으로 활용할 수 있다.

 

 

 2-1. 함수 심화

public class Function()
{
	void Start()
	{
		float circleSize = 30f;
		float radius = GetRadius(circleSize);

		Debug.Log(radius);
	}

	private void GetRadius(float g_CircleSize)
	{
		float pi = 3.14f;
		float tmp = g_CircleSize/ pi;
		float radius = Mathf.Sqrt(tmp); 
			// 여기서의 Mathf.Sqrt() 함수는 C#에서 제공하는 기능으로,
			// 매개변수의 제곱근을 구해준다

		return radius;
	}
}

 

문제 1. 원의 반지름을 구하는 Function() 클래스의 작동 방식(순서)

문제 2. Function() 클래스 안에 radius 라는 변수가 두 개 있다. 왜 오류가 아닌지?

문제 3. 해당 코드에 있는 오류


정답 1. 

  1. Start() 함수 실행
  2. GetRadius 함수에 circleSize 전달
  3. GetRadius 함수 실행
  4. radius 계산 및 반환
  5. radius 출력

정답 2. 

Scope 원칙 : 변수가 관측 가능한 영역이 존재한다.

변수는 자신이 생성된 함수/클래스 내에서만 관측이 가능하다.

Start() 함수 안에 생성된 radius 변수는 Start() 함수 안에서만 관측 가능하고, GetRadius() 함수 안에서는 관측 불가능하다.

반대의 경우도 마찬가지.

따라서 오류가 발생하지 않는다.

 

정답 3.

GetRadius() 함수의 자료형에서 오류 발생

GetRadius() 함수는 코드 상 원의 반지름을 구하고 그 값을 return 을 통해 반환한다.

하지만 함수의 타입이 값을 반환하지 않는 void 타입이라 return 에서 오류가 나타난다.

따라서 반환하려는 값 radius 와 동일한 타입인 float 타입으로 함수의 타입을 바꿔줘야 한다.

private void GetRadius(float g_CircleSize) {  //본문은 동일  }

 

 

'유니티 학습 > 세미나 자료' 카테고리의 다른 글

#6. 오버로드(Overload)  (0) 2024.07.28
#5. 인스턴스(Instance)  (0) 2024.07.24
#4. 벡터 연산  (5) 2024.07.24
#3. 클래스와 오브젝트  (0) 2024.07.18
#1. 유니티 엔진의 이해  (0) 2024.07.17

관련글 더보기