[프로그래머스 Lv.0] a와 b 출력하기

CHAEY·2023년 8월 25일
0

코딩테스트

목록 보기
2/8
post-thumbnail

코딩테스트 연습
🟡언어 : Javascript

🤖 문제

문자열 출력하기

문제 설명
정수 a와 b가 주어집니다. 각 수를 입력받아 입출력 예와 같은 형식으로 출력하는 코드를 작성해 보세요.

제한사항

-100,000 ≤ a, b ≤ 100,000

입출력 예

입력 #1
4 5
출력 #1
a = 4
b = 5

💡 나의 풀이

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

let input = [];

rl.on('line', function (line) {
    input = line.split(' ');
    
}).on('close', function () {
    const input1 = Number(input[0]);
    const input2 = Number(input[1]);
    
    if(input1>=-100000 && input1 <=100000&&input2>=-100000 && input2 <=100000){
        console.log('a = '+input1);
        console.log('b = '+input2);
    }
});

❇️ 알게된 점

input 배열은 전역 변수로 선언

변수의 유효 범위(variable scope)

1. 지역 변수(local variable)

⭐ 지역 변수(local variable) : 함수 내에서 선언된 변수
⭐ 지역 변수는 변수가 선언된 함수 내에서만 유효하며, 함수가 종료되면 메모리에서 사라짐
⭐ 함수의 매개변수 또한 함수 내에서 정의되는 지역 변수처럼 동작

  function localNum() {

    var num = 10; // 지역 변수 num에 숫자 10 대입

    document.write("함수 내부에서 변수 num의 타입은 " + typeof num + "입니다.<br>"); // number

}

localNum();       // 함수 localNum()을 호출함.

document.write("함수의 호출이 끝난 뒤 변수 num의 타입은 " + typeof num + "입니다."); // undefined
  var b = "A가a나A다a"

    b.replace(/a/g,"")
    // 결과 : "A가나A다"

    b.replace(/a/gi,"")
    // 결과 : "가나다"

2. 전역 변수(global variable)

⭐ 전역 변수(global variable) : 함수의 외부에서 선언된 변수
⭐ 프로그램의 어느 영역에서나 접근할 수 있으며, 웹 페이지가 닫혀야만 메모리에서 사라짐

var num = 10; // 전역 변수 num 선언

function globalNum() {

    document.write("함수 내부에서 변수 num의 값은 " + num + "입니다.<br>"); // 10

    num = 20; // 전역 변수 num의 값을 함수 내부에서 변경

}

globalNum();  // 함수 globalNum()을 호출

document.write("함수의 호출이 끝난 뒤 변수 num의 값은 " + num + "입니다."); // 20

3. const,let

_ 🛡️ const : 상수 (변치 않는 값을 갖는 변수 - 항상 같은 수)

    - 값 재할당 X
    const myName = 'NY KIM';
	myName = 'Nana';  //TypeError: Assignment to constant variable
    
    - 반드시 값 할당
    const a;
	console.log(a); //SyntaxError: Missing initializer in const declaration

_ 🕯️ let

    - 다른 값 재할당 O
    let meal = 'Bulgogi';
	meal = 'Bibimbap';_

나중에 다른 값 줄 거야!: let
값 안 바꿀 건데: const

3. var 문제점

⭐ 스코프(scope) 란 변수가 사용될 수 있는 영역

  • 함수스코프
  1. var 는 함수 스코프라서 함수 밖에서 사용하면 에러가 발생한다.
function error() {
    var a = 1;
}
console.log(a);     // ReferenceError: a is not defined
  1. var 키워드 없이 변수를 선언하면 전역 변수가 된다.
function global() {
    a = 1;
}
function local() {
    console.log(a);
}
global();
local();    // 1 출력
  1. for 문에서 선언된 변수가 사라지지 않는다.
    for 문 뿐만 아니라 while, switch, if 문 등 함수 내부에서 작성되는 모든 코드가 같은 문제를 안고 있다.
for (var i = 0; i < 10; i++) {
    console.log(i);     // 0 ~ 9 출력
}
console.log(i);     // 10 출력
  • 호이스팅(hoisting)
    var 로 정의된 변수는 해당 스코프의 최상단으로 끌어올려진다.
  1. 변수를 선언 없이 사용하면 참조 에러가 발생한다.
console.log(a);     // ReferenceError: a is not defined
  1. 하지만 다음 코드는 에러가 발생하지 않는다.
console.log(a);     // undefined
var a = 1;
  1. 호이스팅에 의해 위 코드는 아래와 같이 취급된다.
var a = undefined;
console.log(a);     // undefined
a = 1;
  1. 심지어 변수 선언 전에 값을 할당할 수도 있다.
console.log(a);     // undefined
a = 2;
console.log(a);     // 2
var a = 1;
=> 이런 호이스팅 개념은 코드를 직관적이지 않게 만들며, 버그가 발생하여도 정확한 원인을 찾기 힘들게 만든다.
  • 항상 재할당 가능
    var 는 재할당 가능한 변수로만 만들 수 있다.
    따라서 상수처럼 고정된 값을 변수로 선언해서 이용해야 할 때에도 변경될 위험이 존재

4. const,let 문제점 해결

⭐ ES6 에서 const 와 let 을 이용하는 새로운 변수 정의 방법이 생김

  • 블록 스코프
    대부분의 언어에서 블록 스코프를 사용
    블록 스코프에서는 블록을 벗어나면 변수를 사용할 수 없다.
  1. 블록을 벗어나도 살아있던 var 변수와 달리 const, let 변수는 블록을 벗어나면 관리해줄 필요가 없다.
if (true) {
    const a = 0;
}
console.log(a);     // ReferenceError: a is not defined
  • 호이스팅(hoisting)
    const, let 도 호이스팅 되지만, 변수를 선언하기 전에 사용하려하면 에러발생
  1. const, let 은 서로 다른 스코프에서 같은 이름의 변수를 사용할 때 실수를 방지
console.log(a);      // ReferenceError: Cannot access 'a' before initialization
const a = 1;
  1. 아래 코드에서 a 는 다른 블록 스코프지만 상위에 선언되었기 때문에 1 이 출력
const a = 1;
{
    console.log(a);     // 1
}
  1. 하지만 아래 코드에서는 참조 에러가 발생한다. 하위 블록 스코프에서 호이스팅으로 인해 const a = 2 로 할당 되기 전까지는 사용이 불가능하다. 이처럼 같은 이름의 변수를 사용할 때의 실수를 방지해준다.
const a = 1;
{
    console.log(a);
    const a = 2;
}
  • 재할당 불가능 const

const 로 정의된 변수 : 재할당 불가능, const 로 정의된 객체의 내부 속성값은 수정 가능
let 으로 선언된 변수 : 재할당 가능

const arr = [1, 2];
arr[0] = 3;
arr.push(4);
console.log(arr);   // [3, 2, 4]

💗자세한 내용은 아래 블로그에 이해하기 쉽게 설명
https://nykim.work/72

0개의 댓글