본문 바로가기
C#

C# 에서 temp 없이 값 교환하는 법, 이렇게 간단해도 될까요?

by Oz Driver 2025. 5. 4.

 

C#을 처음 배울 때, 두 변수의 값을 서로 바꾸려면 보통 다음과 같이 작성했습니다.

int temp = a;
a = b;
b = temp;

 

하지만 C# 7.0부터는 이 과정을 단 한 줄로 처리할 수 있습니다.

(a, b) = (b, a);

 

왜 이렇게 되는 걸까요?

이 문법은 튜플 분해 할당(Tuple Deconstruction) 기능을 이용한 것입니다.

• (a, b)는 왼쪽에 위치한 변수 그룹

• (b, a)는 오른쪽에 위치한 값 그룹

이 둘을 한 쌍으로 묶어 한 번에 할당하기 때문에 가능한 문법입니다.

즉, (a, b) = (b, a); 는

1. 오른쪽의 (b, a) 튜플을 먼저 평가한 다음

2. 각각의 값을 왼쪽의 a, b에 동시에 할당하는 방식입니다.

 

이 구조 덕분에 temp 와 같은 임시 변수를 사용하지 않아도 두 값을 안전하게 교환할 수 있게 된 것입니다.

 

리스트 요소 간 교환도 가능합니다

이 문법은 단순한 변수뿐 아니라 리스트 요소에도 적용할 수 있습니다.

List<int> numbers = new List<int> { 5, 6, 4 };
(numbers[1], numbers[0]) = (numbers[0], numbers[1]);

 

이 코드는 numbers[0] 과 numbers[1] 의 값을 서로 바꾸는 예시입니다.
역시 한 줄로 간결하게 표현할 수 있고, 별도의 temp 변수도 필요하지 않습니다.

 

이 문법은 언제부터 가능했을까요?

해당 기능은 C# 7.0부터 지원되었습니다.
C# 7.0은 2017년 3월, Visual Studio 2017과 함께 정식 출시되었습니다.

이 버전부터 다양한 새로운 문법이 도입되었는데, 그중에서도 이 튜플 스왑 문법은 코드의 간결함을 크게 높여주는 기능으로 주목받고 있습니다.

 

IDE에서 알려주는 힌트

최근 Visual Studio나 JetBrains Rider와 같은 IDE에서는 기존의 스왑 방식으로 코드를 작성하면 다음과 같은 경고가 나타날 수 있습니다.

IDE0180: 'temp'를 사용한 전통적인 교환 방식 대신 튜플 기반 스왑을 사용하세요.

이는 튜플 문법을 사용하면 더 간결하고 안전하게 코드를 작성할 수 있다는 의미입니다.

 

이처럼 C#도 시간이 흐르면서 더 간결하고 읽기 쉬운 문법을 적극적으로 도입하고 있습니다.
튜플 분해 할당을 활용하면 스왑뿐 아니라 다양한 구조에서도 코드의 가독성과 효율성을 높일 수 있으니, 꼭 한 번 사용해 보시기를 권장드립니다.