λ³€μˆ˜λž€?

κ°’μ˜ μœ„μΉ˜(μ£Όμ†Œ)λ₯Ό κΈ°μ–΅ν•˜λŠ” μ €μž₯μ†Œμ΄λ‹€. μ—¬κΈ°μ„œ κ°’μ˜ μœ„μΉ˜λž€ 값이 μœ„μΉ˜ν•˜κ³  μžˆλŠ” λ©”λͺ¨λ¦¬ μƒμ˜ μ£Όμ†Œλ₯Ό μ˜λ―Έν•œλ‹€.

즉, λ³€μˆ˜λž‘ 값이 μœ„μΉ˜ν•˜κ³  μžˆλŠ” λ©”λͺ¨λ¦¬ μ£Όμ†Œμ— μ ‘κ·Όν•˜κΈ° μœ„ν•΄ μ‚¬λžŒμ΄ 이해할 수 μžˆλŠ” μ–Έμ–΄λ‘œ λͺ…λͺ…ν•œ μ‹λ³„μžμ΄λ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ λ³€μˆ˜

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” λ™μ νƒ€μž…μ–Έμ–΄μ΄κΈ° λ•Œλ¬Έμ— λ³€μˆ˜μ˜ νƒ€μž… 지정 없이 값이 ν• λ‹Ή λ˜λŠ” κ³Όμ •μ—μ„œ μžλ™μœΌλ‘œ λ³€μˆ˜μ˜ νƒ€μž…μ΄ κ²°μ •λœλ‹€.(Type Inference) λ”°λΌμ„œ λ³€μˆ˜μ— μ—¬λŸ¬κ°€μ§€ νƒ€μž…μ˜ 값을 자유둭게 ν• λ‹Ή ν•  수 μžˆλ‹€.


데이터 νƒ€μž…

데이터 νƒ€μž…(Data Type)은 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” λ°μ΄ν„°μ˜ μ’…λ₯˜λ₯Ό λ§ν•œλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ 데이터 νƒ€μž…μ€ μ›μ‹œνƒ€μž…κ³Ό 객체 νƒ€μž…μœΌλ‘œ λ‚˜λˆ„μ–΄ 진닀.

 

μ›μ‹œνƒ€μž…( primitive data type)

- boolean

- null

- undefined

- number

- string

- symbol(ES6)

 

객체 νƒ€μž…(object / reference type)

- object

 

μ›μ‹œ νƒ€μž…(Primitive Data Type)

μ›μ‹œ νƒ€μž…μ€ λ³€κ²½ λΆˆκ°€λŠ₯ν•œ κ°’(immutable value)이며 pass-by-value(값에 μ˜ν•œ 전달)이닀.

 

number

Java의 경우 μ •μˆ˜μ™€ μ‹€μˆ˜λ₯Ό κ΅¬λΆ„ν•˜μ—¬ int, long, double λ“±κ³Ό 같이 λ‹€μ–‘ν•œ 숫자 νƒ€μž…μ΄ μ‘΄μž¬ν•˜μ§€λ§Œμžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” number ν•˜λ‚˜μ˜ 숫자 νƒ€μž…λ§Œ μ‘΄μž¬ν•œλ‹€.+) Infinity : μ–‘μ˜ λ¬΄ν•œλŒ€, -Infinity : 음의 λ¬΄ν•œλŒ€, NaN : μ‚°μˆ  μ—°μ‚° λΆˆκ°€ (not-a-number)

 

string

λ¬Έμžμ—΄ νƒ€μž…μ€ ν…μŠ€νŠΈ 데이터λ₯Ό λ‚˜νƒ€λ‚΄λŠ”λ° μ‚¬μš©ν•œλ‹€. λ¬Έμžμ—΄μ€ λ°°μ—΄μ²˜λŸΌ 인덱슀λ₯Ό 톡해 μ ‘κ·Όν•  수 μžˆλŠ”λ° 이와 같은 νŠΉμ„±μ„ κ°–λŠ” 데이터λ₯Ό μœ μ‚¬λ°°μ—΄μ΄λΌ ν•œλ‹€.κ·Έλ ‡λ‹€κ³ ν•΄μ„œ λ°°μ—΄μ²˜λŸΌ λ³€κ²½ν•  수 μžˆλŠ” 것은 μ•„λ‹ˆλ‹€.  μž¬ν• λ‹Ήμ€ κ°€λŠ₯ν•˜λ‹€.

 

boolean

λΆˆλ¦¬μ–Έ νƒ€μž…μ˜ 값은 논리적 μ°Έ, 거짓을 λ‚˜νƒ€λ‚΄λŠ” true와 false 뿐이닀.λΉ„μ–΄μžˆλŠ” λ¬Έμžμ—΄κ³Ό null, undefined, 숫자 0은 false둜 κ°„μ£Όλœλ‹€.

 

undefined

undefined νƒ€μž…μ˜ 값은 undefinedκ°€ μœ μΌν•˜λ‹€. μ„ μ–Έ 이후 값을 ν• λ‹Ήν•˜μ§€ μ•Šμ€ λ³€μˆ˜λŠ” undefined값을 가진닀. μ΄λŠ” λ³€μˆ˜ 선언에 μ˜ν•΄ ν™•λ³΄λœ λ©”λͺ¨λ¦¬ 곡간을 처음 할당이 μ΄λ£¨μ–΄μ§ˆ λ•Œ κΉŒμ§€ 빈 μƒνƒœλ‘œ 내버렀두지 μ•Šκ³  μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 undefined둜 μ΄ˆκΈ°ν™”ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

 

이렇기 λ•Œλ¬Έμ— κ°œλ°œμžκ°€ μ˜λ„μ μœΌλ‘œ 값을 ν• λ‹Ήν•˜μ§€ μ•Šμ„ λ•ŒλŠ” ν—·κ°ˆλ¦¬μ§€ μ•Šκ²Œ null을 ν• λ‹Ήν•œλ‹€.

null

null νƒ€μž…μ˜ 값은 null이 μœ μΌν•˜λ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λ³„ν•˜λ―€λ‘œ null은 Null, NULLκ³Ό λ‹€λ₯΄λ‹€.null은 μ˜λ„μ μœΌλ‘œ λ³€μˆ˜μ— 값이 μ—†λ‹€λŠ”κ²ƒμ„ λͺ…μ‹œ ν•  λ•Œ μ‚¬μš©ν•œλ‹€. μ΄λŠ” λ³€μˆ˜κ°€ κΈ°μ–΅ν•˜λŠ” λ©”λͺ¨λ¦¬ μ–΄λ“œλ ˆμŠ€μ˜ μ°Έμ‘° 정보λ₯Ό μ œκ±°ν•˜λŠ” 것을 μ˜λ―Έν•˜λ©° μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 λˆ„κ΅¬λ„ μ°Έμ‘°ν•˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬ μ˜μ—­μ— λŒ€ν•΄ 가비지 μ½œλ ‰μ…˜μ„ μˆ˜ν–‰ν•  것이닀.

 

νƒ€μž…μ„ λ‚˜νƒ€λ‚΄λŠ” λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•˜λŠ” typeof μ—°μ‚°μžλ‘œ null값을 연산해보면 null이 μ•„λ‹Œ objectκ°€ λ‚˜μ˜¨λ‹€ κ·ΈλŸ¬λ―€λ‘œ nullνƒ€μž…μ„ 확인할 λ•ŒλŠ” typeof말고 === μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•΄μ•Όν•œλ‹€

var foo = null;
console.log(typeof foo === null); // false
console.log(foo === null);        // true

symbol

심볼(symbol)은 ES6μ—μ„œ μƒˆλ‘œ μΆ”κ°€λœ 7번째 νƒ€μž…μœΌλ‘œ λ³€κ²½ λΆˆκ°€λŠ₯ν•œ μ›μ‹œ νƒ€μž…μ˜ 값이닀. 심볼은 주둜 μ΄λ¦„μ˜ 좩돌 μœ„ν—˜μ΄ μ—†λŠ” μœ μΌν•œ 객체의 ν”„λ‘œνΌν‹° ν‚€λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€.

// 심볼 keyλŠ” μ΄λ¦„μ˜ 좩돌 μœ„ν—˜μ΄ μ—†λŠ” μœ μΌν•œ 객체의 ν”„λ‘œνΌν‹° ν‚€
var key = Symbol('key');
console.log(typeof key); // symbol

var obj = {};
obj[key] = 'value';
console.log(obj[key]); // value

 


κ°μ²΄νƒ€μž…(Object type, Reference type)

κ°μ²΄λŠ” 데이터와 κ·Έ 데이터에 κ΄€λ ¨ν•œ λ™μž‘(절차,방법,κΈ°λŠ₯)을 λͺ¨λ‘ 포함할 수 μžˆλŠ” κ°œλ…μ  μ‘΄μž¬μ΄λ‹€.

κ°μ²΄λŠ” μ›μ‹œνƒ€μž…μ„ μ œμ™Έν•œ λ‚˜λ¨Έμ§€ 값듀이 λͺ¨λ‘ 객체이고 κ°μ²΄λŠ” pass-by-reference(참쑰에 μ˜ν•œ 전달) λ°©μ‹μœΌλ‘œ μ „λ‹¬λœλ‹€.


λ³€μˆ˜

λ³€μˆ˜λŠ” var,let,const ν‚€μ›Œλ“œλ₯Ό 톡해 μ„ μ–Έν•˜κ³  ν• λ‹Ήμ—°μ‚°μžλ₯Ό 톡해 값을 ν• λ‹Ήν•œλ‹€. 그리고 μ‹λ³„μžμΈ λ³€μˆ˜λͺ…을 μ‚¬μš©ν•΄ λ³€μˆ˜μ— μ €μž₯된 값을 μ°Έμ‘°ν•œλ‹€.

 

동적 타이핑(Dynamic Typing)

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 동적 νƒ€μž…(dynamic/ weak type)언어이닀. 이것은 λ³€μˆ˜μ˜ νƒ€μž… 지정 없이 값이 ν• λ‹Ήλ˜λŠ” κ³Όμ •μ—μ„œ κ°’μ˜ νƒ€μž…μ— μ˜ν•΄ μžλ™μœΌλ‘œ νƒ€μž…μ΄ κ²°μ • 될 κ²ƒμ΄λΌλŠ” λœ»μ΄λ‹€. λ”°λΌμ„œ 같은 λ³€μˆ˜μ— μ—¬λŸ¬ νƒ€μž…μ˜ 값을 ν• λ‹Ήν•  수 μžˆλ‹€.

이λ₯Ό 동적 타이핑(Dynamic Typing)μ΄λΌν•œλ‹€.

 

 

 

μ°Έκ³ 

poiemaweb.com/js-data-type-variable

 

Data type & Variable | PoiemaWeb

λ³€μˆ˜λŠ” κ°’μ˜ μœ„μΉ˜(μ£Όμ†Œ)λ₯Ό κΈ°μ–΅ν•˜λŠ” μ €μž₯μ†Œμ΄λ‹€. κ°’μ˜ μœ„μΉ˜λž€ 값이 μœ„μΉ˜ν•˜κ³  μžˆλŠ” λ©”λͺ¨λ¦¬ μƒμ˜ μ£Όμ†Œ(address)λ₯Ό μ˜λ―Έν•œλ‹€. 즉, λ³€μˆ˜λž€ 값이 μœ„μΉ˜ν•˜κ³  μžˆλŠ” λ©”λͺ¨λ¦¬ μ£Όμ†Œ(Memory address)에 μ ‘κ·Όν•˜κΈ° μœ„ν•΄

poiemaweb.com

 

πŸ’‘ Destructuring Assignment (ꡬ쑰 λΆ„ν•΄ ν• λ‹Ή)

ꡬ쑰 λΆ„ν•΄ ν• λ‹Ήμ΄λž€ 말 의미 κ·ΈλŒ€λ‘œ 객체, λ°°μ—΄μ˜ ꡬ쑰λ₯Ό λΆ„ν•΄ν•˜μ—¬ λΆ„ν•΄ν•œ 값을 λ³€μˆ˜μ— ν• λ‹Ήν•œλ‹€κ³  μƒκ°ν•˜λ©΄ λœλ‹€.

(ꡬ쑰 λΆ„ν•΄ ν• λ‹Ή ꡬ문은 λ°°μ—΄μ˜ κ°’μ΄λ‚˜ 객체의 속성을 λ³„κ°œμ˜ λ³€μˆ˜λ‘œ μΆ”μΆœν•  수 μžˆκ²Œν•˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ 식)


πŸ’‘ λ°°μ—΄ ꡬ쑰 λΆ„ν•΄ ν• λ‹Ή 

let arr = ["dong","hwi"];

// λ°°μ—΄ ꡬ쑰 λΆ„ν•΄ 
let [firstName, surname] = arr;

console.log(firstName);
console.log(surname);

// λ°°μ—΄μœΌλ‘œ μ ‘κ·Όν•˜μ§€ μ•Šκ³  λ³€μˆ˜λ‘œ μ‚¬μš© ν•  수 있게 됐닀.

split(' ') ν•¨μˆ˜λ₯Ό ν™œμš© ν•  μˆ˜λ„ μžˆλ‹€.

let [firstname, surname] = "kim dong".split(' ');

* ꡬ쑰 λΆ„ν•΄ 할당을 ν•œλ‹€κ³  ν•΄μ„œ 기쑴의 arrλŠ” λ°”λ€Œμ§€ μ•ŠλŠ”λ‹€.

 

1. μ‰Όν‘œλ₯Ό μ‚¬μš©ν•˜μ—¬ μš”μ†Œλ₯Ό λ¬΄μ‹œν•  수 μžˆλ‹€.

// 두 번째 μš”μ†ŒλŠ” ν•„μš”ν•˜μ§€ μ•ŠμŒ
let [firstName, , title] = ["Julius", "Caesar", "Consul", "of the Roman Republic"];

alert( title ); // Consul

2. ν• λ‹Ή μ—°μ‚°μž μ’ŒμΈ‘μ—” 뭐든지 올 수 μžˆλ‹€.

ν• λ‹Ή μ—°μ‚°μž μ’ŒμΈ‘μ—” ν• λ‹Ή ν•  수 μžˆλŠ” 것이라면 μ–΄λ–€ 것이든지 올수 μžˆλ‹€.(객체 ν”„λ‘œνΌν‹°λ„ κ°€λŠ₯)

let user = {};
[user.name, user.surname] = "kim hwi".split(' ');

console.log(user.name);

3. entries()둜 λ°˜λ³΅ν• μˆ˜ μžˆλ‹€.

let user = {
	name : 'john',
	age:30
};

for(let[key, value] of Object.entries(user)){
	console.log(`${key} : ${value}`);
}

4.'...'둜 λ‚˜λ¨Έμ§€ μš”μ†Œ λ°°μ—΄λ‘œκ°€μ Έμ˜€κΈ°

let [name1, name2, ...rest] = ['a','b','c','d','e'];

console.log(name1);
console.log(name2);

console.log(rest[0]);	// c
console.log(rest[1]);	// d

rest말고 λ‹€λ₯Έ λ³€μˆ˜λͺ…도 μ‚¬μš© κ°€λŠ₯ν•˜λ‹€. ν•˜μ§€λ§Œ λ³€μˆ˜λͺ… μ•žμ— . μ„Έκ°œλ₯Ό κΌ­ μ§€μΌœμ€˜μ•Όν•œλ‹€.


πŸ’‘ 객체 ꡬ쑰 λΆ„ν•΄ ν• λ‹Ή

let options = {
	title: "menus",
    width:100,
    height:200
};

let {title, width, height} = options;

console.log(title);
console.log(width);
console.log(height);

μ°Έκ³ 

ko.javascript.info/destructuring-assignment

 

ꡬ쑰 λΆ„ν•΄ ν• λ‹Ή

 

ko.javascript.info

 

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ μ—¬λŸ¬κ°€μ§€ 객체 μ΄ˆκΈ°ν™” 방법듀이 μžˆλŠ”λ° ES6μ—μ„œ 객체λ₯Ό μ΄ˆκΈ°ν™” ν•  λ•Œ 객체의 속성과 κ°’μ˜ 이름이 동일 ν•  경우 μ’€ 더 κ°„νŽΈν•˜κ²Œ 객체λ₯Ό μ΄ˆκΈ°ν™” ν•  수 μžˆλŠ” 방법이 λ‚˜μ™”λ‹€.

Shorthand Properties

예제λ₯Ό 보면 더 λΉ λ₯΄κ²Œ 이해할 수 μžˆλ‹€.

var animation ='λͺ¨μ•„λ‚˜';
var movies = ['삼진그룹 μ˜μ–΄ν† μ΅λ°˜','μ •μ§ν•œ 후보'];

// μžλ°”μŠ€ν¬λ¦½νŠΈ
var favorite ={
    animation : animation,
    movies : movies
};
// ES6
var favorite ={
    animation,
    movies
};

μ΄λ ‡κ²Œ ν”„λ‘œνΌν‹°μ˜ key의 이름과 value의 이름이 κ°™λ‹€λ©΄ μΆ•μ•½ν•΄μ„œ μ‚¬μš© ν•  수 μžˆλ‹€. 

πŸ’‘ κΈ°μ‘΄ν•¨μˆ˜ vs ν™”μ‚΄ν‘œ ν•¨μˆ˜

κΈ°μ‘΄ μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜

// ν•¨μˆ˜ν‘œν˜„μ‹
let test = function(){console.log("μ•ˆλ…•")};	// μ•ˆλ…•

// ν™”μ‚΄ν‘œ ν•¨μˆ˜
let test = () => console.log("μ•ˆλ…•");	// μ•ˆλ…•

ν™”μ‚΄ν‘œ ν•¨μˆ˜ 

ν™”μ‚΄ν‘œ ν•¨μˆ˜λŠ” 항상 읡λͺ… ν•¨μˆ˜μ΄λ‹€.

// λ§€κ°œλ³€μˆ˜ X
let test = () => console.log('μ•ˆλ…•');
console.log(test);
test();

//	() => console.log('μ•ˆλ…•')
//	μ•ˆλ…•

// λ§€κ°œλ³€μˆ˜ 1개
let test = x => x;
test(1);
// 1

// λ§€κ°œλ³€μˆ˜ 2개
let test =(a,b) => {return a+b};
test(1,2)
// 3

// return이 μ—†λŠ” 경우
let test = (a,b) => {a+b};
test(1,2);
// undefined

// μ—¬λŸ¬μ€„μ„ μž‘μ„±ν•΄μ•Όν•˜λŠ” 경우
let test = (a,b) => {
	let c = 3;
	return a+b+c;
    }
test(1,2);
// 6


{}λ₯Ό μ‚¬μš©ν•˜λŠ” 경우 return을 κΌ­ μ‚¬μš©ν•΄μ•Όν•œλ‹€.

{}λŠ” μ½”λ“œλ₯Ό μ—¬λŸ¬μ€„ μž‘μ„±ν•΄μ•Όν•  λ•Œ μ‚¬μš©ν•œλ‹€.


πŸ’‘ κΈ°λ³Έκ°’ λ§€κ°œλ³€μˆ˜ (default function paramerter)

κΈ°μ‘΄ μžλ°”μŠ€ν¬λ¦½νŠΈ

function multi(a,b)
{
    b = (typeof b != 'undefined') ? b : 1;
    return a * b
}

console.log(multi(5,2));	// 10
console.log(multi(5));		// 5

 

ES6

// ES2015(ES6)
function multi(a,b=1)
{
	return a * b;
}

console.log(multi(5,2));	// 10
console.log(multi(5));		// 5

- κΈ°μ‘΄μ—λŠ” λ””ν΄νŠΈλ₯Ό μ§€μ •ν• μˆ˜ μ—†μ–΄ μ½”λ“œμ•ˆμ—μ„œ 섀정을 ν•΄μ•Ό ν–ˆμ§€λ§Œ ES6μ—μ„œλŠ” λ°”λ‘œ μ„€μ •ν• μˆ˜ 있게 λ˜μ—ˆλ‹€.

 

 

++ this λΆ€λΆ„ μΆ”κ°€ν•˜κΈ°

 

μ°Έκ³ 

velog.io/@ki_blank/JavaScript-%ED%99%94%EC%82%B4%ED%91%9C-%ED%95%A8%EC%88%98Arrow-function

 

JavaScript - ν™”μ‚΄ν‘œ ν•¨μˆ˜(Arrow function)

ν™”μ‚΄ν‘œ ν•¨μˆ˜λŠ” ES6λ¬Έλ²•μž…λ‹ˆλ‹€. function ν‚€μ›Œλ“œ μ‚¬μš©ν•΄μ„œ ν•¨μˆ˜λ₯Ό λ§Œλ“  것보닀 κ°„λ‹¨νžˆ ν•¨μˆ˜λ₯Ό ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν™”μ‚΄ν‘œ ν•¨μˆ˜λŠ” 항상 읡λͺ…μž…λ‹ˆλ‹€. 1. ν™”μ‚΄ν‘œ ν•¨μˆ˜μ˜ 기본문법 콜백 ν•¨μˆ˜μ—μ„œλ„ μ‚¬μš©

velog.io

ko.javascript.info/arrow-functions-basics

 

ν™”μ‚΄ν‘œ ν•¨μˆ˜ κΈ°λ³Έ

 

ko.javascript.info

jeong-pro.tistory.com/110

 

ES6 ν™”μ‚΄ν‘œ ν•¨μˆ˜(arrow function) 변경점 μš”μ•½ (μ‚¬μš©λ²•, thisλ“±)

Arrow function 1. μ‚¬μš©λ²• 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 //기쑴의 function sample var double = function(x){     return x*2; } //arrow function sample const double =..

jeong-pro.tistory.com

 

+ Recent posts