두 변수를 swap하는 방법은?

Park, Jinyong·2020년 4월 9일
2

Small, but Valuable.

목록 보기
10/19

How to swap two variables in JavaScript.

temp 변수를 이용한 방법

가장 기본적인 방법이고 생각하기 쉬운 방법이다. 두 컵의 내용물을 섞이지 않게 서로 바꾸는 방법과 같다.

let
  a = 'a',
  b = 'b',
  temp;

temp = a;
a = b;
b = temp;
console.log('a: ' + a + ', b: ' + b); // 'a: "b", b: "a"'

XOR 방법

XOR swap algorithm으로 불리는 방법이다. 하지만 Integer일 때만 사용할 수 있는 방법이다. 숫자로 된 문자열이나 실수는 정수로 변환된다.

let
  a = 10, // or '10', 10.11
  b = 100; // or '10', 100.111

a = a ^ b;
b = a ^ b;
a = a ^ b;
console.log('a: ' + a + ', b: ' + b); // 'a: 100, b: 10'

덧셈/뺄셈 연산자를 이용한 방법

number 타입의 값을 바꿀 때 사용할 수 있는 방법이다. 문자열은 문자열의 + 동작으로 인해 swap되지 않는다. 연산 과정에서 JavaScript 내부동작의 영향으로 소수부에 변화가 발생할 가능성이 있다.

let
  a = 10, // or 10.11
  b = 100; // or 100.111

a = a + b;
b = a - b;
a = a - b;
console.log('a: ' + a + ', b: ' + b); // 'a: 100, b: 10'

배열을 이용한 swap

한 줄로 작성 가능한 방법이다.
하지만 읽기 어렵다는 이유로 꺼려진다.

let
  a = 5,
  b = 'abc';

b = [a, a = b][0];
console.log('a: ' + a + ', b: ' + b); // 'a: "abc", b: 5'

원리는 배열을 생성할 때 a의 값이 복사가 되고 a = b 연산 실행 그리고 배열의 0번째 값ab에 할당한다. 재밌는 방법이다.

구조 분해 할당을 이용한 방법

ES6에 추가된 구조 분해 할당(Destructuring_assignment)을 이용해 swap하는 방법이다. 익스플로러에선 지원하지 않지만 많은 사람들이 추천하고 있다!

let
  a = 5,
  b = 'abc';

[a, b] = [b, a]
console.log('a: ' + a + ', b: ' + b); // 'a: "abc", b: 5'

[참고] https://en.wikipedia.org/wiki/Swap_(computer_programming)#Using_a_temporary_variable

1개의 댓글

comment-user-thumbnail
2021년 8월 26일

잘 읽고 갑니다 !!

답글 달기