이 코드에는 매개변수를 포함하여 총 네 개의 변수가 사용되었다.
• date
• filteredGames
• highestPlayer
• highestScore
이 중 마지막 두 변수는 긴밀하게 연결되어 있는데, 동일한 시점에 초기화되는 것은 함께 변경된다. 이런 경우라면 독립된 변수를 따로 두는 것보다 다음 예와 같이 튜플을 사용하는 것을 고려해 볼 만하다.
예제 11-12 지역 변수를 튜플을 사용하도록 리팩터링 ▶ HighScoreDisplayWithTuples.cs
public void DisplayHighScoreForDate(LocalDate date)
{
var filteredGames = allGames.Where(game => game.Date == date);
(string player, int score) highest = (null, -1);
foreach (var game in filteredGames)
{
if (game.Score > highest.score)
{
highest = (game.PlayerName, game.Score);
}
}
Console.WriteLine(highest.player == null
? "No games played"
: $"Highest score was {highest.score} by {highest.player}");
}
바뀐 부분은 볼드로 나타냈다. 좀 나아 보이는가? 그런 것도 같다. 튜플을 단순히 변수의 집합으로만 생각한다면 두 코드는 전혀 다를 바가 없다. 하지만 최상위 수준에서 고려해야 하는 개념의 수를 줄임으로써 코드가 좀 더 깔끔해졌다는 느낌을 준다. 사실 책에서 다루는 수준의 짤막한 예제로는 그 차이를 명확히 보이기 어렵다. 하지만 여러 개의 메서드로 쪼개는 것조차 어려운 복잡한 메서드의 경우 튜플 지역 변수를 사용하면 확연히 차이가 드러난다. 같은 아이디어를 지역 변수뿐 아니라 필드에도 적용할 수 있다.