[목표]
- 자바스크립트 특징 이해하기 : 그냥 아 그렇구나하고 넘어가는게 아니라...
[느슨한 타입이란]
- 타입없이 변수를 선언하는 것
- 자바스크립트가 변수를 선언할 때 타입없이 var(variable 약어)로만 선언함
- 느슨한타입과 반대되는 말은 강력한타입, 강력한타입은 반대로 변수를 선언할 때 타입을 선언해야함
1 2 3 4 5 6 7 | /* javascript (loose typing) */ var a = 1 // typeof(a) === Number var b = "str" // typeof(b) === String /* java (strong typing) */ int a = 1; String b = "str" | cs |
- 타입없이 선언했다고해서 변수의 타입이 없는 것은 아님 : 내부적으로 정해짐
- 내부적으로 변수의 타입이 관리되기때문에 변수의 타입이 바뀔 때가 있음
1 2 3 | console.log(1+1+1) // 3 console.log(1+1+"1") // 21 console.log("1"+1+1) // 111 | cs |
=> 정수가 문자열을 만나 연산되는 순간 문자열로 바뀜
- 느슨한 타입 체크때문에 예상치 못한 오류가 발생할 수 있음
[느슨한 타입 체크 위험 막기]
- 사칙 혹은 비교 연산에 의해(개발자가 기입한 값이나, 사용자가 랜덤으로 기입한 값) 변수의 타입이 변경될 수 있음
- 이를 막기위한 들어오는 값 타입 변경, 타입 체크 기능이 있음
1) 일치연산자 ( === )
1 2 3 4 5 6 | var a = 1 // typeof(a) // "number" console.log( 1 == true ) // true, 비교 연산을 할 때 a는 내부적으로 boolean으로 변경되고, == 비교 연산 결과 true (1은 true) console.log( 1 === true ) // === (일치연산자) 를 가지고 비교 연산을 하면, 중간에 타입 변경없이 첫 타입으로 타입 + 값 비교 | cs |
- 내부적으로 타입 변경되는 것 없이 값을 비교하고싶다면 == (동등연산자)가 아닌 === (비교연산자)를 사용해야함
- 다시 말하지만, 선언을 할 때만 타입을 선언하지않을 뿐 내부적으로 변수의 타입이 정해짐
- 이를 막기 위한 방법을 지금 알아보고 있음(일치연산자)
2) parse~~~ : 명시적으로 타입 변환하는 함수
- 크롬 개발자도구 콘솔창을 켜서 아래 코드 결과 확인해볼 것
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | var str = prompt("입력해주세요") /* prompt로 받는 입력값은 string (문자열)로 타입이 정해짐 */ typeof(str) // "string" /* 값을 입력받아 그대로 사칙 연산하면 문자열이기때문에 명시적으로 변수의 타입을 변경시킨 뒤 사칙연산을 하면 됨 */ parseInt(a) /* 입력받은 값이 숫자였다면 숫자가 나올 것이고, 숫자 아닌 아무 문자나 문자열을 입력했다면 NaN이 출력될 것 NaN은 숫자가 아니라는 뜻으로 parseInt로 명시적인 타입 변경 오류 결과 */ | cs |
- parseInt 이외에도 타입 변경 관련 함수가 있음 : 찾아보기!
[느슨한 타입]
- 처음 개발할 때에는 var 로 모든 변수의 선언이 해결되니깐 편해서 좋음
- 그러나 내부적으로 변수의 타입이 정해지고, 일부 연산자에 의해 의도치않은 변경이 이뤄질 수 있음
- 이를 막기위한 방법들이 있음
- 자바스크립트의 변수 타입 선언 특징이 느슨한 타입이라는 것을 인지해야함
[참고자료]
1) bestalign's dev blog (github) : http://bestalign.github.io/2015/10/21/understanding-loose-typing-in-javascript/
'javascript' 카테고리의 다른 글
[자바스크립트] 함수 호이스팅 (0) | 2017.04.20 |
---|---|
[자바스크립트] 함수 내부 동작 (0) | 2017.04.19 |
[웹기본개념] 어플리케이션 캐시 (0) | 2017.04.18 |
[웹기본개념] DOM 그리고 DOM api (0) | 2017.04.18 |
[자바스크립트] 프로토타입체인 (0) | 2017.04.16 |
댓글