λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μ‹œλ„/ꡭ비지원

[D+39] μŠ€μ½”ν”„, ν΄λ‘œμ €, JSON

by πŸ‡λ°•λ΄‰λ΄‰πŸ‡ 2022. 11. 16.

 

 

ꡭ비지원 D+39

-  μŠ€μ½”ν”„, ν΄λ‘œμ €, JSON -

 


 

μŠ€μ½”ν”„

- λ³€μˆ˜κ°€ μœ νš¨μ„±μ„ κ°€μ§€λŠ” λ²”μœ„λ₯Ό λ‚˜νƒ€λ‚΄λ©°, μ΄λ•Œμ˜ μœ νš¨μ„±μ€ μ½κ±°λ‚˜ μ“Έ 수 μžˆλŠ” 것을 λ‚˜νƒ€λ‚Έλ‹€.

- ν”„λ‘œμ„ΈμŠ€ λ©”λͺ¨λ¦¬ 맡의 ꡬ쑰에 μ˜μ‘΄μ μ΄λ‹€.

- μ„ μ–Έλœ μœ„μΉ˜μ— λ”°λΌμ„œ μŠ€μ½”ν”„κ°€ κ²°μ •λœλ‹€.

- 같은 이름을 가진 λ³€μˆ˜κ°€ μ„ μ–Έ 된 경우 μŠ€ν¬ν¬κ°€ κ²ΉμΉ  수 μžˆλ‹€.

 

• μŠ€μ½”ν”„μ˜ μ’…λ₯˜

μŠ€μ½”ν”„μ˜ μ’…λ₯˜λŠ” μ „μ—­ μŠ€μ½”ν”„μ™€ μ§€μ—­μŠ€μ½”ν”„λ‘œ λ‚˜λ‰˜λŠ”λ° μ „μ—­μŠ€μ½”ν”„μ—μ„œ μœ νš¨ν•œ μ˜μ—­μ€ <script>...</script>λ‚΄μ˜ 전체이며, μ§€μ—­μŠ€μ½”ν”„μ—μ„œ μœ νš¨ν•œ μ˜μ—­μ€ ν•¨μˆ˜ μžμ‹ κ³Ό κ·Έ μ•ˆμ— μžˆλŠ” ν•˜μœ„ μ˜μ—­μ΄λ‹€.

 

μ΄λ•Œ μš°λ¦¬κ°€ κΈ°μ–΅ν•΄μ•Όν•  것은 μ „μ—­ μŠ€μ½”ν”„μ™€ 지역 μŠ€μ½”ν”„λŠ” λ‘˜μ΄ 겹칠수 밖에 μ—†λ‹€λŠ” νŠΉμ§•μ„ 가지고 있으며, μŠ€μ½”ν”„λŠ” κ°€κΉŒμš΄ 것이 μš°μ„ μˆœμœ„λ₯Ό 가진닀.

 

var a = 'a';    // μ „μ—­ μŠ€μ½”ν”„

const func1 = function()
{
	let b = 'b';        // 지역 μŠ€μ½”ν”„
	const c = 'c';      // 지역 μŠ€μ½”ν”„

        console.log(a);     // a
        console.log(b);     // b
        console.log(c);     // c
};

func1();

console.log(a);     // a
console.log(b);     // error!
console.log(c);     // error!

 

• μ§€μ—­μŠ€μ½”ν”„μ˜ νŠΉμ§• #1 - ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„ vs 블둝 레벨 μŠ€μ½”ν”„

이전에 ES5λ₯Ό μ‚¬μš©ν•΄μ™”λ˜ λ‹Ήμ‹œμ— ν‚€μ›Œλ“œλŠ” λͺ¨λ‘ var둜 μ‚¬μš©ν•΄μ™”μœΌλ©°, 좔후에 ES6κ°€ λ„μž…λœ 이후에 letκ³Ό constκ°€ μƒˆλ‘­κ²Œ λ“±μž₯ν•˜κ²Œ λ˜μ—ˆλ‹€.

μ΄λ•Œ 이 λ‘κ°œμ˜ κ°€μž₯ 큰 차이점은 varλŠ” ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„μ΄κ³ , letκ³Ό constλŠ” 블둝 레벨 μŠ€μ½”ν”„λΌλŠ” 것이닀.

 

- ν•¨μˆ˜λ ˆλ²¨ μŠ€μ½”ν”„

function test ()
{
	var a = 'a';

	for(var b = 0; b < 5; b++)
	{
		var c = 0;
	}

	console.log(a); // a
	console.log(b); // 5
	console.log(c); // 0
}

test();
console.log(a); // error --> testν•¨μˆ˜μ—μ„œ 벗어났닀.
console.log(b); // error --> testν•¨μˆ˜μ—μ„œ 벗어났닀.
console.log(c); // error --> testν•¨μˆ˜μ—μ„œ 벗어났닀.

ν•¨μˆ˜λ ˆλ²¨ μŠ€μ½”ν”„λŠ” varν‚€μ›Œλ“œμ— μ μš©λ˜λŠ” κ²ƒμœΌλ‘œ varκ°€ μ‚¬μš©λœ λ³€μˆ˜λ₯Ό 뢈러올 λ•Œ varκ°€ μ‚¬μš©λœ ν•¨μˆ˜ λ²”μœ„λ‚΄μ—μ„œλŠ” 무쑰건 뢈러올 수 μžˆλ‹€λŠ” 것이닀.

 

접근성이 μ’‹λ‹€λŠ” μž₯점을 가지고 μžˆμ§€λ§Œ μž¬ν™œμš©μ„ κ°€μž₯ν•œ 였용이 λ°œμƒλ  μš°λ €κ°€ μžˆλ‹€.

 

- λΈ”λ‘λ ˆλ²¨ μŠ€μ½”ν”„

const myFunc = function()
{
	let a = 'a';
	const b = 'b';

	for(let i = 0; i < 5; i++)
	{
		let c = 'c';
		let d = 'd';
	}

	console.log(a); // a
	console.log(b); // b
	console.log(c); // error --> forλ¬Έ λΈ”λ‘μ—μ„œ 벗어났닀.
	console.log(d); // error --> forλ¬Έ λΈ”λ‘μ—μ„œ 벗어났닀.

}

myFunc();

λΈ”λ‘λ ˆλ²¨ μŠ€μ½”ν”„λŠ” λ§κ·ΈλŒ€λ‘œ "{ }" 블둝 μ™ΈλΆ€μ—μ„œλŠ” λ³€μˆ˜λ₯Ό 뢈러올 수 μ—†μœΌλ©°, const와 let이 이에 ν•΄λ‹Ήν•œλ‹€.

 

• μ§€μ—­μŠ€μ½”ν”„μ˜ νŠΉμ§• #2 - μŠ€μ½”ν”„ 체인

μ½”λ“œμ˜ μŠ€μ½”ν”„ μ˜μ—­μ„ ν™•μΈν•˜λ‹€ 보면 ν•¨μˆ˜μ˜ μ€‘μ²©κ΅¬μ‘°λ‘œ 인해 μŠ€μ½”ν”„λ„ 쀑첩 ꡬ쑰가 μƒκΈ°λŠ” 것을 확인할 수 μžˆλ‹€.

 

λ‚΄ μ˜μ—­μ— νŠΉμ • λ³€μˆ˜κ°€ μ—†μœΌλ©΄ μƒμœ„ν•¨μˆ˜μ— μžˆλŠ” λ³€μˆ˜λ₯Ό 찾으둜 λ‹¨κ³„μ μœΌλ‘œ μ˜¬λΌκ°€ ν•„μš”λ³€μˆ˜λ₯Ό 찾게 λ˜λŠ”λ° μ΄λ•Œ μŠ€μ½”ν”„κ°€ λ‹¨κ³„μ μœΌλ‘œ μ—°κ²°λ˜μ–΄ μžˆλŠ” 것을 확인할 수 μžˆλŠ”λ° 이λ₯Ό μŠ€μ½”ν”„ 체인이라고 ν•œλ‹€.

 

μ£Όμ˜ν•΄μ•Όν•  점은 ν•˜μœ„μ—μ„œ μƒμœ„λ‘œ 접근은 κ°€λŠ₯ν•˜μ§€λ§Œ μƒμœ„μ—μ„œ ν•˜μœ„λ‘œλŠ” 접근이 λΆˆκ°€λŠ₯ν•˜λ‹€. (= 단방ν–₯이닀)

 


ν΄λ‘œμ €

• μ§€μ—­μŠ€μ½”ν”„μ˜ νŠΉμ§• #3 - ν΄λ‘œμ €

ν΄λ‘œμ €λŠ” λ‚΄λΆ€ ν•¨μˆ˜μ—μ„œ μ™ΈλΆ€ν•¨μˆ˜λ‘œ μŠ€μ½”ν”„ 체이닝을 ν†΅ν•΄μ„œ μ™ΈλΆ€ν•¨μˆ˜μ˜ λ³€μˆ˜λ‘œ μ ‘κ·Ό κ°€λŠ₯ν•œ ν•¨μˆ˜μ˜ 쑰합을 μ˜λ―Έν•œλ‹€.

즉, μŠ€μ½”ν”„μ²΄μ΄λ‹μ„ μ΄μš©ν•΄μ„œ Data의 정보은닉을 κ΅¬ν˜„ν•  수 μžˆλ‹€λŠ” 것이닀.

 

const bookInfo = {
	title : 'μ•ŒκΈ°μ‰¬μš΄ μžλ°”μŠ€ν¬λ¦½νŠΈ',
    price : 10000,
    type : 'ebook'
};

bookInfo.title = 'μ•ŒκΈ°μ‰¬μš΄ μžλ°”';

 

μ—¬κΈ° μ±…μ˜ 정보λ₯Ό λ‹΄κ³ μžˆλŠ” 객체가 μžˆλ‹€κ³  μƒκ°ν•΄λ³΄μž.

그런데 κ°μ²΄λŠ” "객체λͺ….μ±…μ œλͺ©"을 μž…λ ₯ν•΄μ„œ μ±…μ˜ 제λͺ©μ„ λ³€κ²½ν•  수 μžˆλ“―μ΄ λ³€μˆ˜λ₯Ό privateν•˜κ²Œ μ„€μ •ν•  수 μ—†λ‹€λŠ” 단점을 가지고 μžˆμ–΄ λˆ„κ΅¬λ‚˜ μ±… 제λͺ©μ„ μ–΄λ– ν•œ μ ˆμ°¨μ—†μ΄ λ³€κ²½ν•  수 있게 λ˜λŠ” 것이닀.

 

μžλ°”μ—μ„œλŠ” 클래슀λ₯Ό μ•ˆμ— λ³€μˆ˜λ₯Ό private둜 μ„€μ •ν•΄μ€˜μ„œ μ™ΈλΆ€μ—μ„œ λ§ˆμŒλŒ€λ‘œ λ³€μˆ˜λ₯Ό λ³€κ²½ν•˜μ§€ λͺ»ν•˜κ³  λ³€κ²½ν•΄λ‹¬λΌλŠ” λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•΄μ„œ λ³€κ²½ν•˜μ˜€λ‹€.

 

const makeInstance = function(title)
{
	return {
		getTitle : function()
		{
			return title;
		},
		setTitle : function(_title)
		{
			title = _title;
		}
	};
}

const book1 = makeInstance("μ•ŒκΈ°μ‰¬μš΄ μžλ°”μŠ€ν¬λ¦½νŠΈ");

// λ©”μ†Œλ“œμ²˜λŸΌ μ΄μš©ν•΄ λ³€μˆ˜μ— μ ‘κ·Ό κ°€λŠ₯
book1.getTitle();
book1.setTitle("μ•ŒκΈ°μ‰¬μš΄ μžλ°”");

 

이λ₯Ό μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œ κ°μ²΄μ•ˆμ—λŠ” ν•¨μˆ˜λ„ λ‹΄μ„μˆ˜ μžˆλ‹€λŠ” νŠΉμ§•κ³Ό νŒŒλΌλ―Έν„°μ˜ λ³€μˆ˜κ°€ μ™ΈλΆ€μ—μ„œ μ ‘κ·Όν•  수 μ—†λŠ” ν΄λ‘œμ €μ˜ νŠΉμ§•μ„ ν™œμš©ν•΄ μžλ°”μ™€ λΉ„μŠ·ν•œ κΈ°λŠ₯ κ΅¬ν˜„ν•  수 있게 ν‘œν˜„ν•  수 μžˆλ‹€.

 

μ΄λ ‡κ²Œ κ΅¬ν˜„ν•˜κ²Œ 되면 개발자의 μž…μž₯에선 μ½”λ“œλ₯Ό κ΅¬ν˜„ν•˜λŠ”λ° λ³΅μž‘ν•˜λ‹€λŠ” 단점이 μžˆμ§€λ§Œ, μ‚¬μš©μž μž…μž₯μ—μ„œλŠ” λ©”μ†Œλ“œμ™€ μ›ν•˜λŠ” κ°’λ§Œ λ„£μ–΄μ£Όλ©΄ 되기 λ•Œλ¬Έμ— μ‹¬ν”Œν•˜λ‹€λŠ” μž₯점을 가지고 μžˆλ‹€.

 

• ν”„λ‘œν† νƒ€μž…

const ar1 = [1, 2, 3, 4, 5];
const ar2 = ['ab', 'cd'];

console.log(ar1);
console.log(ar2);

μœ„μ™€ 같은 μ½”λ“œλ₯Ό μ§œμ„œ μ½˜μ†”λ‘œ 확인해보도둝 ν•˜μž.

 

그러면 λ°°μ—΄μ˜ 정보와 ν•¨κ»˜ ν”„λ‘œν† νƒ€μž…μ΄λΌκ³  ν•˜λŠ” 게 μžˆλŠ” 것을 확인할 수 μžˆλ‹€.

 

ν”„λ‘œν† νƒ€μž…μ„ ν΄λ¦­ν•΄μ„œ 확인해보면 μ–΄λ§ˆμ–΄λ§ˆν•œ λ‚΄μš©λ“€μ΄ μžˆλŠ” 것을 확인할 수 μžˆλŠ”λ° 이λͺ¨λ“ κ²ƒλ“€μ€ 배열에 κ΄€λ ¨λœ λ©”μ†Œλ“œμ΄λ‹€.

 

μ΄λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ—”μ§„μ΄ λŒμ•„κ°€λŠ” 원리λ₯Ό μ•Œλ©΄ 이해할 수 μžˆλŠ”λ° μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” λ¨Όμ € μ½”λ“œμ˜ ν˜•νƒœλ₯Ό μ­‰ ν™•μΈν•˜λ©΄μ„œ λ³€μˆ˜κ°€ μ–΄λ– ν•œ νƒ€μž…μΈμ§€μ— λŒ€ν•΄ νŒŒμ•…ν•œλ‹€.

κ·ΈλŸ¬λ©΄μ„œ λ§Œμ•½ λ³€μˆ˜μ•ˆμ— 데이터 νƒ€μž…μ΄ 배열일 경우 배열에 ν•„μš”ν•œ κΈ°λŠ₯κ΅¬ν˜„μ΄ 될 수 μžˆλ„λ‘ λ°°μ—΄ ν”„λ‘œν† νƒ€μž…μ„ λΆ™μ—¬μ£ΌλŠ” 것이닀.

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μš°λ¦¬λŠ” 각 λ°μ΄ν„°νƒ€μž…μ— κ΄€λ ¨ν•œ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆκ²Œλ˜λŠ” 것이닀.

 

ν”„λ‘œν† νƒ€μž…μ€ 마치 항상 λΆ™μ–΄μžˆλŠ” DNA와 κ°™κΈ° λ•Œλ¬Έμ— μžŠμ§€ μ•Šλ„λ‘ ν•œλ‹€.

 


JSON

- JavaScript Object Notation μžλ°”μŠ€ν¬λ¦½νŠΈ 객체 ν‘œκΈ°λ²•

- 데이터λ₯Ό μ €μž₯ν•˜κ±°λ‚˜ 전솑할 λ•Œ 주둜 μ‚¬μš©ν•œλ‹€.

- (key-value) ν˜•μ‹μœΌλ‘œ μ΄λ£¨μ–΄μ Έμžˆλ‹€.

- κ°„λ‹¨ν•˜κ³  직관적이닀.

- ν˜Έν™˜μ„±μ΄ μ’‹λ‹€.

- JSON.stringify(), JSON.parse()

 

const book = [
	{
		title : 'μ•ŒκΈ° μ‰¬μš΄ μžλ°”μŠ€ν¬λ¦½νŠΈ',
		price : 20000,
		type : 'paper'
	},
	{
		title : 'μžλ°”μŠ€ν¬λ¦½νŠΈ',
		price : 0,
		type : 'ebook'
	}
];

// 데이터λ₯Ό λ³΄λ‚Όλ•Œμ—” λ¬Έμžλ°μ΄ν„°λ‘œ λ³΄λ‚΄μ€˜μ•Όν•œλ‹€.
const json_text = JSON.stringify(book, null, 2);
console.log(json_text);

// json_textλ₯Ό λ°›κ³ λ‚˜μ„œ λ‹€μ‹œ κ°μ²΄ν™”ν•΄μ•Όν•œλ‹€.
const json_object = JSON.parse(json_text);
console.log(json_object);

 

 

λ°˜μ‘ν˜•

λŒ“κΈ€