JavaScript

JavaScript

kimddakki 2022. 5. 3. 13:04
동적 타입 언어 JavaScript

Type : 어떤 부류의 형(型). 순화어는 `유형', `모양', `생김새'.

타입이란 한글로 자료형입니다. 

 

자바스크립트는 동적 타입(Dynamic/Weak Type) 언어이다.

변수의 타입 지정(Type annotation)없이 값이 할당되는 과정에서 자동으로 변수의 타입이 결정(타입 추론, Type Inference)된다. 즉, 변수는 고정된 타입이 없다. 따라서 같은 변수에 여러 타입의 값을 자유롭게 할당할 수 있다.

 


정적 언어 (Statically typed language)  Statically 정적으로 Static : 고정된

정적 언어란 '타입 (자료형)'을 컴파일(Compile : 엮다)시에 결정하는 것이다.

코드를 짤 때 변수에 들어갈 값의 형태를 직접 명시 해주어야 한다.

Ex) C, Java, C++, C# ...

int i = 1;

float num = 1.03;

 

특징

컴파일 시에 타입에 대한 정보를 결정하기 때문에 속도↑

타입 에러로 인한 문제점을 초기에 발견할 수 있어 타입의 안정성↑

코드 작성시 변수명을 결정해 줘야함.

동적언어 (Dynamically typed langudage) 

동적타입 언어(Dynamically typed languages)는 컴파일 시 자료형을 정하는 것이 아니라 런타임 시 결정됩니다.

const num = 1;

let str = "kim";

 

타입 없이 변수만 선언하여 값 지정 가능

 

특징

런타임까지 타입에 대한 결정을 끌고 갈 수 있기 때문에 유연성이 높음

컴파일시 타입을 명시해주지 않아도 되기 때문에 빠르게 코드를 작성할 수 있음

실행 도중에 변수에 예상치 못한 타입이 들어와 타입에러가 발생할 수 있음

 


JavaScript 타입 종류

데이터 타입

더보기

데이터 타입이란 프로그래밍 언어에서 사용할 수 있는 데이터의 종류를 이야기한다.

코드 내에서 사용되는 데이터는 메모리에 저장하고 참조 할 수 있어야 한다.

데이터 타입은 데이터를 메모리에 저장 할 때 메모리 공간의 크기와 할당할 수 있는 유효한 값인지 그리고 메모리에 저장되어 있는 2진수 데이터를 어떻게 해석할 지(숫자면 number, 문자열이면 string, 등등~)에 대한 정보를 컴퓨터'와' 개발자에게 제공한다.

원시 타입(Primitive Data Type)    Primitive 원어 (원시사회의, 원시적인)

Number : 숫자

타 언어의 경우 정수와 실수를 구분하여 int, long, float ,double등으로 구분하지만 자바스크립트는 하나만 존재한다.

ECMAScript 표준 : 부동소수점(浮動小數點, floating point ) 형

 

부동 소수점 

더보기

실수 : 소수 부분을 포함하는 수

소수 : 0과 1 사이의 수

 

부동 소수점 데이터 형식

 -> 컴퓨터 내부에서 실수를 표현하는 방법

123.25 부동 소수점으로 표현

123 = 1111011

0.25 x2 0.5 x2 1.00

0.01

 

1111011.01 => 1.111011101 x 2^6

부호 : 음수 -> 1

지수부 : 127 + 6 = 133 => 1000 0101 (소수점의 위치를 풀이하는 지수부)

가수부 : 11101101 (유효숫자를 나타내는 가수부)

부호 지수부분 가수부분 나머지 0으로 채움

1    10000101  11101101000000000000000

// number Type

const integer: number = 10; // 정수
const double: number = 10.12; // 실수
const negative: number = -20; // 음의 정수
const binary: number = 0b01000001; // 2진수
const octal: number = 0o101; // 8진수
const hex: number = 0x41; // 16진수

console.log(integer); //10
console.log(double); // 10.12
console.log(negative); // -20

// 자바스크립트는 2, 8, 16진수 데이터 타입을 제공하지 않기에 모두 10진수로 해석 됨
console.log(binary); //65
console.log(octal); //65
console.log(hex); //65

console.log(binary === octal); //true

String : 끈 프로그래밍의 세계에서는 문자 여러개가 한번에 묶여져 있는 문자열을 스트링이라고 부르게 된다.

 

"", '', ``으로 감싸진 아이들은 다 string!!이다!!
 
// C같은 언어와 다르게 JavaScript 문자열은 원시 타입이며 변경 불가능하다.
var str = "Hello";
str = "world";

//첫번째 구문이 실행되면 메모리에 문자열 'Hello'가 생성되고 식별자 str은 메모리에 생성된 문자열 'Hello'의 메모리 주소를 가리킨다.
// 그리고 두번째 구문이 실행되면 이전에 생성된 문자열 'Hello'을 수정하는 것이 아니라 새로운 문자열 'world'를 메모리에 생성하고 식별자 str은 이것을 가리킨다.
//이때 문자열 'Hello'와 'world'는 모두 메모리에 존재하고 있다.변수 str은 문자열 'Hello'를 가리키고 있다가 문자열 'world'를 가리키도록 변경되었을 뿐이다.

// 문자열은 유사 배열이다.
for (let i: number = 0; i < str.length; i++) {
  console.log(str[i]);
}

// 문자열을 변경 할 수 없다.
// str[0] = "S"; // Error.message : 'String' 형식의 인덱스 시그니처는 읽기만 허용됩니다.

// but 문자열 재할당은 가능하다.
// -> 기존 문자열을 변경하지 않고 새로운 문자열을 할당하는 것
// 다른 메모리에 새롭게 문자열을 생성하고 str이 이것을 가리키는 것
// str이 다른 곳을 계속 가리키는 것이다!!

str = "string";
console.log(str);

str = "String";
console.log(str);

str += " test";
console.log(str);

str = str.substring(0, 3);
console.log(str);

str = str.toUpperCase();
console.log(str);

 

Boolean :명사나 형용사로서의 불린(Boolean)은 조지 불(영국의 수학자)의 이름에서 따온 말

더보기

 1854년에 '사고의 법칙'이라는 책을 썼던 그는 AND, OR, NOT 이라는 이진 연산자를 사용해 이진 정보를 처리할 수 있는 모델을 만들 수 있도록 해주었는데, 인간의 정신작용 또한 인식된 정보를 '참' 또는 '거짓'이라는 두 개의 환원된 정보로 처리하는 과정에서 이루어진다고 생각했다.

const foo: boolean = true;
const bar: boolean = false;
console.log(typeof foo);
console.log(typeof bar);

// null, undefined, 숫자 0은 false로 간주된다.

undefined : 찾으시는 주소가 없습니다

 

// undefined은 undefined 값이 유일하다.
// 선언 이후 할당하지 않은 변수는 undefined값을 가진다.

// 변수 선언 시 그 공간은 대부분 쓰레기 값(Garbage value)로 들어 있다.
// 이 것을 허용하지 않고 JS가 undefined로 초기화 한다.

let foo;
console.log(foo); // undefined

// 명시적으로 값을 주고 싶으면 null로 초기화하자!! 
// undefined는 자바스크립트 엔진에 의해 초기화 된 값임 
// 이걸 보고 값이 할당 된 적이 없구나 라고 개발자가 간파할 수 있다.

null : null은 값이 없음을 뜻한다. 그 값이 0 조차도 아니다!! // Not Null, NULL

// null은 null 이 유일! 대/소문자 구분도 함!!
// 프로그래밍 언어에서 null은 의도적으로 변수에 값이 없다는 것을 명시할 때 사용한다

let foo: any = "kim";
foo = null;

// typeof 연산자로 null 값을 연산해보면 object가 나온다 ㅠㅠ 설계상의 오류
// so null 을 확인하고 싶으면 ===을 사용하자
console.log(typeof foo); // objet
console.log(foo === null); // true

원시 타입 외의 타입은 전부 객체 타입이다!!
더보기

객체는 데이터와 그 데이터에 관련한 동작(절차, 방법, 기능)을 모두 포함할 수 있는 개념적 존재이다. 달리 말해, 이름과 값을 가지는 데이터를 의미하는 프로퍼티(property)와 동작을 의미하는 메소드(method)를 포함할 수 있는 독립적 주체이다.

자바스크립트는 객체(object) 기반의 스크립트 언어로서 자바스크립트를 이루고 있는 거의 “모든 것”이 객체이다. 원시 타입(Primitives)을 제외한 나머지 값들(배열, 함수, 정규표현식 등)은 모두 객체이다. 또한 객체는 pass-by-reference(참조에 의한 전달) 방식으로 전달된다.


 

 

Data type & Variable | PoiemaWeb

변수는 값의 위치(주소)를 기억하는 저장소이다. 값의 위치란 값이 위치하고 있는 메모리 상의 주소(address)를 의미한다. 즉, 변수란 값이 위치하고 있는 메모리 주소(Memory address)에 접근하기 위해

poiemaweb.com