11.2.3 여러 변수를 담을 수 있는 가방처럼 튜플 활용
다음에 설명할 내용은 상당히 충격적일 수 있으니 마음의 준비를 단단히 하기 바란다. 튜플 타입은 public이며 읽기/쓰기 가능한 필드를 가진 값 타입이다. 그런데 통상 변경 가능한 값 타입을 사용하는 것은 권장하지 않으며, 모든 필드는 항상 private으로 선언하는 것이 좋다. 일반적인 경우라면 가능한 한 이러한 권고 사항을 준수하는 것이 좋다. 하지만 튜플은 조금 다르다.
대부분의 타입은 원시 데이터를 그대로 나타내기보다는 나름의 의미를 부여하기 위해서 사용된다. 때로는 타입 내에 저장할 데이터에 대한 유효성을 검증하기도 하고, 데이터 간의 상관관계를 강제하기도 한다. 타입이 제공하는 작업들은 대체로 데이터의 값 그 자체보다 값에 부여된 의미에 좀 더 집중한다.
하지만 튜플은 전혀 그렇지 않다. 튜플은 그저 여러 개의 변수를 담은 가방처럼 동작할 뿐이다. 하나의 튜플에 두 개의 변숫값이 존재한다면, 이 두 개의 값은 독립적으로 수정할 수 있고, 아무런 연관성도 가지지 않으며, 강제적 연결 고리도 존재하지 않는다. 튜플을 이용하더라도 마치 개별적인 변수를 사용하는 것과 완전히 동일하게 작업을 수행할 수 있다. 더불어 그 전체를 마치 하나의 값처럼 사용할 수도 있다. 이는 단일 값만 반환할 수 있는 메서드의 경우 특히 중요하다.
그림 11-3은 이를 그림으로 나타낸 것이다. 왼쪽은 세 개의 독립적인 지역 변수를 선언하기 위한 코드와 멘탈 모델을 나타낸 것이고, 오른쪽은 유사한 코드이긴 하지만 두 개의 변수를 하나의 튜플로 묶었다(타원 안). 실제로 오른쪽을 보면 name과 score를 player라는 튜플 타입의 변수로 묶었다. 각각의 변수를 독립적으로 사용하려면 그렇게 해도 되고(예를 들어 player.score를 출력한다거나), 묶음을 하나의 단위처럼 이용할 수도 있다(예를 들어 player에 새 값을 할당한다거나).
튜플을 변수를 담을 수 있는 가방 정도로 생각하면 더 많은 것을 쉽게 이해할 수 있다. 튜플 내의 요소가 이름을 가지는 경우 그 이름을 이용해서 독립적으로 변수에 접근할 수 있다. 하지만 이름이 없을 때는 어떻게 해야 할까?
▲ 그림 11-3 독립된 변수 세 개(왼쪽)와 하나의 튜플을 포함한 변수 두 개(오른쪽)