본문 바로가기

공부/유니티

[Unity] 튜플(Tuple)

코드를 작성하다보면 가끔 한 번에 여러 값을 반환해주고 싶을 때가 있다.

자료형이 동일한 경우라면 'List'와 같은 컬렉션을 활용하여 반환해줄 수 있겠지만, 

각각의 자료형이 다르다면 일일히 전역 변수로 선언하거나, struct 구조체를 사용하여 반환해주어야 한다.

 

하지만 메소드 내부에서만 값을 주고받는다면 전역 변수로 선언해주기도 애매하고,

각각의 변수의 이름을 정하는 것도 상당히 귀찮을 수 있다.

 

이런 상황에서 튜플을 사용하기 좋은데, 튜플은 간단한 데이터들을 그룹화하여 반환할 수 있는 자료구조로

코드의 가독성을 높이고 변수의 선언과 명명에 드는 수고를 덜어준다.


튜플과 구조체의 차이
  tuple struct
형식  참조 타입  값 타입
정의 방식  각 요소의 이름을 정의해줄 필요가 없다.  각 구조체를 명시적으로 정의해야한다.
특성  불변성  가변성 (this()를 사용하여 불변성으로 수정 가능)

사용방법

1. 각 요소의 이름없이 튜플 생성

요소의 순서대로 Item1, Item2, ... 로 데이터를 읽을 수 있다.

// 명시적인 타입 지정
(int, float) data = (1, 1.1f);
Debug.Log($"요소1 {data.Item1}, 요소2 {data.Item2}");

// var을 이용한 타입 추론
var data = (1, 1.1f);
Debug.Log($"요소1 {data.Item1}, 요소2 {data.Item2}");

 

2. 튜플의 각 요소에 이름을 지정

데이터를 읽을 때, 원하는 이름으로 불러올 수 있다.

// 튜플 요소에 변수 선언 해주기
(int a, float b) data = (1, 1.1f);
Debug.Log($"요소1 {data.a}, 요소2 {data.b}");

// 튜플의 인스턴스에 이름 지정해주기
// var로도 이름 지정 가능
(int, float) data = (a: 1, b: 1.1f);
Debug.Log($"요소1 {data.a}, 요소2 {data.b}");

 

3. 튜플 구조 분해 할당

튜플의 값 데이터를 분리할 수 있다.

var data = (1, 1.1f);
(int a, float b) = data;
Debug.Log($"요소1 {a}, 요소2 {b}");

사용 예시
  • 더하기빼기 계산기
public (int sum, int subtract) Calculate(int a, int b)
{
    int plus = a + b;
    int minus = a - b;

    return (plus, minus);
}

void Start()
{
    var result = Calcuate(10, 7);
    Debug.Log(result.sum);          // 출력: 17
    Debug.Log(result.subtract);     // 출력: 3
}

 

  • BMI 측정하기
public class Person
{
    public string name;
    public int age;
    public string location;
    public float height;
    public float weight;

    public Person(string name, int age, string location, float height, float weight)
    {
        this.name = name;
        this.age = age;
        this.location = location;
        this.height = height;
        this.weight = weight;
    }

    // 이름과 bmi를 반환하는 메소드
    public (string name, float bmi) GetBMI()
    {
        float bmi = weight / (height * height);
        return (name, bmi);
    }
}

public class TupleExample
{
    void Start()
    {
        Person person = new Person("Maca", 25, "서울", 180f, 80.0f);

        var bmiInfo = person.GetBMI();
        Debug.Log($"Name: {bmiInfo.name}, BMI: {bmiInfo.bmi}");
    }
}

 

'공부 > 유니티' 카테고리의 다른 글

[Unity] Foreach를 써도 괜찮은 걸까?  (0) 2024.01.29
[Unity] Unity Analytics Service  (0) 2024.01.29
[Unity] Assembly와 Namespace  (0) 2024.01.28
[Unity] string과 가비지 컬렉터  (0) 2024.01.28
[Unity] Generic Collection  (0) 2024.01.28