개발괴발 공부
Nullable
방프
2021. 4. 22. 21:43
Nullable
- 값타입의 변수에 null을 대입할 수 있게 한다.
- 값타입을 리턴하는 함수에서 null리턴을 할 수 있다.
- 주로 구조체에서 사용한다.
* null 이란 어느곳도 가리키고 있지 않다는 의미
int? a = null
if(!a.HasValue)
a = 100;
Debug.Log(a.Value);
데이터 타입 뒤에 ? 기호를 붙여 이런식으로 사용할 수 있다.
EX 1)
// 값타입의 매개변수를 전달받아서 원하는 값이 있을 경우는 값을 리턴하고
// 없을 경우는 null을 리턴하는 함수 제작 (null비교할수있는 장점)
public int? TestNullable(int k)
{
if (k < 20)
return k;
return null;
}
public void Start(){
int data = 100;
int? tmp = TestNullable(data);
if (tmp.HasValue) // tmp != null
Debug.Log(tmp.Value);
else
Debug.Log("값이 없음!");
}
EX 2)
// 1. CHARACTERINFO 구조체 정의
// 2. 캐릭터 정보(CHARACTERINFO) 10개 생성
// 3. 원소 각각의 이름은 홍길동_1부터 10까지 초기화
// 4. 이름으로 배열에서 같은 데이터를 찾아서 리턴하는 함수 제작 (nullable사용)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
[Serializable]
public struct CHARACTERINFO
{
public string name;
}
public class Example_Nullable : MonoBehaviour
{
public CHARACTERINFO[] characterInfoArr = null;
void Start()
{
// 캐릭터 정보 10개 생성
characterInfoArr = new CHARACTERINFO[10];
// 원소 각각의 이름을 홍길동_1부터 10까지 초기화
for(int i=0; i< characterInfoArr.Length; i++)
{
characterInfoArr[i].name = "홍길동_" + i;
}
// 이름으로 배열에서 같은 데이터를 찾아서 리턴하는 함수
CHARACTERINFO? result = FindName("홍길동_2", characterInfoArr);
if (result.HasValue)
Debug.Log("찾았다!" + result.Value.name);
else
Debug.Log("없다.");
}
public CHARACTERINFO? FindName(string _name, CHARACTERINFO[] infoArr)
{
for(int i=0; i< infoArr.Length; i++)
{
if (characterInfoArr[i].name.Equals(_name))
return characterInfoArr[i];
}
return null;
}
}