[JS/TS] temp 변수 내다 버린 비구조할당 swap으로 값 바꾸기

쿼카쿼카·2024년 1월 14일
1

JS / TS

목록 보기
12/14

과거의 swap

let a = 1, b = 2;

function swap() {
  const temp = a;
  a = b;
  b = temp  
}

console.log(a, b) // 1, 2
swap()
console.log(a, b) // 2, 1
  • 'a = b; b = a;하면 되는 거 아님?' 이렇게 생각했던 나는 temp의 존재를 부정했다.
  • js는 한줄 씩 실행되기 때문에 내 생각처럼 진행하면 아래 처럼 대참사가 일어난다.
let a = 1, b = 2;

a = b; // a === 2, b === 2
b = a; // a === 2, b === 2

console.log(a, b) // 2, 2
  • 온 세상이 yee다.

temp는 a의 값을 잠시 저장해서 a에 다른 값이 들어가도 기존 a를 저장하는 역할을 해줬다.

  • 하지만 내가 작성한 코드는 2개 이상의 swap이 일어나 함수 보기가 조금 찝찝했다.
if(min > max) {
  const temp = min; // 일반 min, max temp
  const inputTemp = inputMin; // input에 입력한 min, max temp
  const chickenTemp = chickenMin; // chicken의 min, max temp;
  const noiJeolTemp = noiJeolMin; // 뇌절 min, max temp;
  min = max;
  max = temp;
  inputMin = inputMax;
  inputMax = inputTemp;
  chickenMin = chickenMax;
  chickenMax = chickenTemp;
  noiJeolMin = noiJeolMax;
  noiJeolMax = noiJeolTemp;
}
  • 하나 바꾸려면 적어도 3줄이 필요하고, 하나하나 변수도 생성해줘야 한다.
  • 100개를 바꿔야하면 300줄을 작성해야 하는데 노가다판이 따로 없다.(지금 생각해보니 함수를 만들어두면 되네요. 이런 게 인사이트?)
  • 하지만 우리는 성장하고🤦‍♂️ 기록하고💁‍♂️ 꿈꾸는🤸‍♂️ 개발자니까 비구조할당을 사용해서 swap을 진행한다.

비구조할당 swap

if(min > max) {
  [min, max] = [max, min];
  [inputMin, inputMax] = [inputMax, inputMin];
  [chickenMin, chickenMax] = [chickenMax, chickenMin];
  [noiJeolMin, noiJeolMax] = [noiJeolMax, noiJeolMin];
}
  • 개당 3줄짜리 코드를 1줄로 줄이고, temp라는 변수를 생성하지도 않았다. 어릴 적 temp를 부정하던 나는 미래 몇 수를 내다 본 게 아닐ㄲ
  • 이런 swap 방법을 배운 적은 없지만 비구조 할당 하나를 배우면 열에 써먹을 줄 아는 이런 모습이 진정한 게이발자가 아닐까? 하는 생각이 든다.
  • 물론 위 방법은 사수님이 찾았다. 당신 없이 못 살아~~
profile
쿼카에요

0개의 댓글