더북(TheBook)

11.6.2 지역 변수

튜플은 메서드가 out 매개변수나 반환 타입을 따로 작성하여 사용하지 않고도 여러 개의 값을 단번에 반환하도록 하는 것이 주요 목적이었다. 하지만 그렇다고 해서 반드시 이 용도로만 튜플을 사용할 필요는 없다.

단일 메서드 내에서 여러 변수를 튜플로 묶어 사용하는 경우도 드물지 않다. 특히, 여러 변수가 동일한 접두사를 공유한다면 튜플을 사용하는 것을 고려해 볼 수 있다. 예를 들어 예제 11-11에는 게임을 개발할 때 사용했을 법한 메서드가 있는데, 이 메서드는 특정 날짜에 최고 점수를 획득한 플레이어를 출력하는 메서드다. LINQ to Object에는 이미 Max 메서드가 있기 때문에 프로젝션 시 손쉽게 최고 점수를 얻을 수 있지만, 시퀀스 내에서 해당 점수를 가진 요소 자체를 가져올 방법은 없다.

Note ≡


다른 방법으로 OrderByDescending(...).FirstOrDefault()를 호출하는 방법도 있다. 하지만 값 하나를 얻기 위해 전체를 정렬해야 한다. MoreLinq 패키지를 사용하면 MaxBy 메서드를 이용해서 부족한 부분을 해소할 수 있다. 다른 대안으로 highestGame 변수와 비교 시 사용한 Score 속성을 각기 다른 변수에 담는 방법도 있다. 다만 좀 더 복잡하면 적합하지 않을 수 있다.

예제 11-11 날짜별 최고 점수를 출력 ▶ HighScoreDisplayWithoutTuples.cs

public void DisplayHighScoreForDate(LocalDate date)
{
    var filteredGames = allGames.Where(game => game.Date == date);
    string highestPlayer = null;
    int highestScore = -1;
    foreach (var game in filteredGames)
    {
        if (game.Score > highestScore)
        {
            highestPlayer = game.PlayerName;
            highestScore = game.Score;
        }
    }
    Console.WriteLine(highestPlayer == null
        ? "No games played"
        : $"Highest score was {highestScore} by {highestPlayer}");
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.