[TIL] 210901

Lee SyongΒ·2021λ…„ 9μ›” 1일
0

TIL

λͺ©λ‘ 보기
14/204
post-thumbnail

πŸ“ 였늘 ν•œ 것

  1. λ°˜μ‘ν˜• CSS 직접 μž‘μ„±ν•΄λ³΄κΈ° (μ΄μ–΄μ„œ)

  2. λ‚΄κ°€ μ§  μ½”λ“œμ™€ κ°•μ˜ λ‚΄μš© 비ꡐ·뢄석 (μ΄μ–΄μ„œ)

  3. javascript ν•™μŠ΅


πŸ“– ν•™μŠ΅ 자료

  1. λ“œλ¦Όμ½”λ”© 'ν”„λ‘ νŠΈμ—”λ“œ 포트폴리였 클둠코딩' (λ°˜μ‘ν˜• nav, λ°˜μ‘ν˜• web site)

  2. λ“œλ¦Όμ½”λ”© 유튜브 'μžλ°”μŠ€ν¬λ¦½νŠΈ κ°•μ˜' (1~3편)

  3. 사전 ν•™μŠ΅ κ°€μ΄λ“œ step 2 (~Types)


πŸ“š 배운 것

πŸ”Ž CSS


1. λ°˜μ‘ν˜• nav

  • toggle-btn에 position: absoluteλ₯Ό μ μš©ν•œ ν›„ right, top을 지정해 μœ„μΉ˜λ₯Ό μ‘°μ •ν•΄μ£Όμ—ˆλ‹€.

2. λ°˜μ‘ν˜• web

  • πŸ™‹β€β™€οΈ 질문 ❗
    λΈŒλΌμš°μ €μ˜ λ„ˆλΉ„κ°€ 변함에 따라 μ»¨ν…Œμ΄λ„ˆμ˜ λ„ˆλΉ„κ°€ 변해도 κ·Έ μ•ˆμ˜ 이미지 λΉ„μœ¨μ„ μœ μ§€ν•œ 채 μ»¨ν…Œμ΄λ„ˆμ— 꽉 차게 이미지λ₯Ό μ€„μ΄λŠ” 방법을 λͺ¨λ₯΄κ² λ‹€. 검색을 톡해 해결은 ν–ˆμ§€λ§Œ, 원리가 μ΄ν•΄λ˜μ§€ μ•ŠλŠ”λ‹€. β€» 이 λΈ”λ‘œκ·Έ μ°Έκ³ 

(1) μ›λž˜ λ‚΄κ°€ 썼던 μ½”λ“œ β†’ λΈŒλΌμš°μ € 크기λ₯Ό μ€„μ΄λ‹ˆκΉŒ outer μ›μ˜ μ’Œμš°κ°€ 같이 μ€„μ–΄λ“œλŠ” 문제 λ°œμƒ

.testimonial-avatar-outer {
  border-radius: 50%;
  width: 200px;
  height: 200px;
  overflow: hidden;
  position: relative;
}

.testimonial-avatar {
  height: 100%;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  margin: auto;
}

(2) ν•΄κ²° λ°©μ•ˆμ„ κ²€μƒ‰ν•΄μ„œ μˆ˜μ •ν•œ μ½”λ“œ

.testimonial-avatar-outer {
  width: 200px;
  height: 200px;
}

/* μ›λž˜ μ—†μ—ˆλŠ”λ° div와 img 사이에 μΆ”κ°€ν•œ div νƒœκ·Έ */
.testimonial-avatar-outer-two {
  border-radius: 50%;
  overflow: hidden;
  position: relative;
  padding-top: 100%;
}

.testimonial-avatar {
  height: 100%;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  margin: auto;
}

β€» λ‹€μ–‘ν•œ λΉ„μœ¨ λ§Œλ“€κΈ° ❗

2:1 λΉ„μœ¨ β†’ padding-top: 50%
1:2 λΉ„μœ¨ β†’ padding-top: 200%
4:3 λΉ„μœ¨ β†’ padding-top: 75%
16:9 λΉ„μœ¨ β†’ padding-top: 56.25%

  • 화면이 μž‘μ•„μ‘Œμ„ λ•Œ projectλ₯Ό μ–‘μ˜†μ— 흰색 배경을 쀄이고 화면에 꽉 차게 λ§Œλ“€κΈ° μœ„ν•΄ λ‚˜λŠ” width: 100%λ₯Ό μ‚¬μš©ν–ˆλŠ”λ°, κ°•μ˜μ—μ„œλŠ” flex-grow: 1을 μ‚¬μš©ν–ˆλ‹€. μ „μžμ˜ 경우 @mediaμ—μ„œ μ •μ˜ν•œ max-width μ΄ν•˜λ‘œ μž‘μ•„μ§€λ©΄ 무쑰건 ν•œ 쀄에 1개의 project만 였게 λœλ‹€. κ·ΈλŸ¬λ‚˜ ν›„μžμ˜ 경우 max-width μ΄ν•˜λ‘œ μž‘μ•„μ Έλ„ μ–΄λŠ μ •λ„λŠ” ν•œ 쀄에 2개의 projectκ°€ μžˆλ‹€κ°€ μ’€ 더 쀄이면 1개의 project둜 바뀐닀.

πŸ”Ž javascript

πŸ“ λ“œλ¦Όμ½”λ”© 유튜브


1. κ°•μ˜ μ „ 사전 μ„€λͺ…

1) HTML에 main.js μ—°κ²°

<script src="main.js" defer></script>

2) async VS defer

  • async : parsing 쀑에 js νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œ λ°›κ³ , HTML에 μ •μ˜λœ μˆœμ„œμ— 상관없이 js 파일이 ν•˜λ‚˜μ”© λ‹€μš΄λ‘œλ“œκ°€ μ™„λ£Œλ  λ•Œλ§ˆλ‹€ parsing을 λ©ˆμΆ”κ³  이λ₯Ό μ‹€ν–‰ν•œλ‹€.

  • defer : parsing 쀑에 js νŒŒμΌμ„ μ „λΆ€ λ‹€μš΄λ‘œλ“œ 받아놓고, parsing이 λλ‚˜λ©΄ HTML에 js 파일이 μ •μ˜λœ μˆœμ„œμ— 따라 μ°¨λ‘€λŒ€λ‘œ μ‹€ν–‰ν•œλ‹€

3) 'use strict'; μ„ μ–Έ

  • js 파일 제일 μœ„μ— 'use strict';λ₯Ό μ„ μ–Έν•΄μ€˜μ•Ό ν•œλ‹€.

  • μ΄λ ‡κ²Œ ν•΄μ£Όλ©΄ μ‹€μˆ˜λ‘œ μ„ μ–Έλ˜μ§€ μ•Šμ€ λ³€μˆ˜μ— 값을 ν• λ‹Ήν•˜λŠ” λ“± 비상식적인 μž‘μ—…μ„ ν–ˆμ„ λ•Œ, 개발자 λ„κ΅¬μ˜ console 창에 였λ₯˜ λ©”μ‹œμ§€κ°€ 뜨게 λœλ‹€.

4) 개발자 도ꡬ(F12)의 console μ°½ 이용

5) Web API

  • λΈŒλΌμš°μ €κ°€ μ œκ³΅ν•˜κ³  이해할 수 μžˆλŠ” ν•¨μˆ˜λ“€μ„ λ§ν•œλ‹€ (javascript에 ν¬ν•¨λœ 것x)
  • λŒ€ν‘œμ μœΌλ‘œ console API도 web API 쀑 ν•˜λ‚˜μ΄λ‹€
  • console.log('Hello World!');
    β†’ 뜻 : console API 쀑 logλΌλŠ” ν•¨μˆ˜λ₯Ό μ΄μš©ν•΄ Hello World! λΌλŠ” λ©”μ‹œμ§€λ₯Ό μ½˜μ†” 창에 좜λ ₯

2. λ³€μˆ˜(variable)

1) λ³€μˆ˜μ˜ μ’…λ₯˜

  • global scopeμ—μ„œ μ„ μ–Έλœ μ „μ—­ λ³€μˆ˜ : μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‹€ν–‰λ˜λŠ” μˆœκ°„λΆ€ν„° 끝날 λ•ŒκΉŒμ§€ 항상 λ©”λͺ¨λ¦¬μ— νƒ‘μž¬λ˜μ–΄ μžˆμœΌλ―€λ‘œ μ΅œμ†Œν•œμœΌλ‘œ μ‚¬μš©ν•΄μ•Ό 함

  • local scopeμ—μ„œ μ„ μ–Έλœ 지역 λ³€μˆ˜ : λ°–μ—μ„œλŠ” μ•ˆμ΄ 보이지 μ•Šκ³ , μ•ˆμ—μ„œλ§Œ 밖을 λ³Ό 수 μžˆλ‹€.

cf. scope : λ³€μˆ˜μ— μ ‘κ·Όν•  수 μžˆλŠ” λ²”μœ„

  • function scope : ν•¨μˆ˜ μ•ˆκ³Ό 밖이 λ‹¨μ ˆλ¨
  • block scope : block의 μ•ˆκ³Ό 밖이 λ‹¨μ ˆλ¨

2) λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” ν‚€μ›Œλ“œ(keyword)

  • var : 더 이상 μ“°λ©΄ μ•ˆλ¨
    • 이유
      • λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κΈ°λ„ 전에 값을 ν• λ‹Ήν•  수 있고, 값을 ν• λ‹Ήν•˜κΈ°λ„ 전에 좜λ ₯도 κ°€λŠ₯ν•˜λ‹€. 즉, λ³€μˆ˜λ₯Ό 어디에 μ„ μ–Έν–ˆλŠ”μ§€μ™€ 상관없이(=블둝을 λ¬΄μ‹œ) 항상 제일 μœ„λ‘œ 선언을 λŒμ–΄μ˜¬λ €μ€€λ‹€. μ΄λŸ¬ν•œ var hoisting은 비상식적인 μž‘μ—…μ„ κ°€λŠ₯μΌ€ ν•΄μ„œ μœ„ν—˜ν•˜λ‹€.

ex.

console.log(me);
me = 3;
var me;

라고 μ“°λ©΄, console 창에 undefinedκ°€ λœ¬λ‹€. μ΄λŠ” 값이 λŒ€μž…λ˜μ§€ μ•Šμ•˜μ„ 뿐 λ³€μˆ˜λŠ” μ„ μ–Έλ˜μ—ˆμŒμ„ μ˜λ―Έν•œλ‹€. 맨 밑에 μžˆλŠ” var me;λ₯Ό 제일 μœ„λ‘œ λŒμ–΄μ˜¬λ € μΈμ‹ν•˜λŠ” 것이닀. λ°˜λ©΄μ—, let을 μ‚¬μš©ν•˜λ©΄ console 창에 λ³€μˆ˜κ°€ μ„ μ–Έλ˜μ§€ μ•Šμ•˜λ‹€λŠ” 였λ₯˜ λ©”μ‹œμ§€κ°€ 뜨게 λœλ‹€.

  • let (λ©”λͺ¨λ¦¬μ—μ„œ 읽고 λ°”κΏ” μ“°κΈ° κ°€λŠ₯)

    • ν•œλ²ˆ 값을 할당해도 변경이 κ°€λŠ₯ν•˜λ‹€ (mutable type)

    • ES6μ—μ„œ 좔가됨

  • constant (λ©”λͺ¨λ¦¬μ—μ„œ 읽기만 κ°€λŠ₯, λ°”κΏ” μ“°κΈ° λΆˆκ°€λŠ₯)

    • ν•œλ²ˆ 값을 ν• λ‹Ήν•˜λ©΄ μ ˆλŒ€λ‘œ λ³€κ²½ν•  수 μ—†λ‹€ (immutable type)

    • μ›¬λ§Œν•˜λ©΄ constλ₯Ό μ‚¬μš©ν•˜κΈΈ μΆ”μ²œν•œλ‹€ (λ³΄μ•ˆ, μ‹€μˆ˜ 방지)


πŸ“ 사전 ν•™μŠ΅ κ°€μ΄λ“œ, λ“œλ¦Όμ½”λ”© 유튜브


1. javascriptκ°€ μ›Ή νŽ˜μ΄μ§€λ₯Ό μ‘°μž‘ν•˜λŠ” κ³Όμ •

  • HTML μš”μ†Œ μ°ΎκΈ°
  • μ›Ή ν™”λ©΄ μƒμ˜ λ™μž‘λ“€μ„ 감지 (μ΄λ²€νŠΈμ— κ΅¬λ…ν•˜κ³  μ‘λ‹΅ν•˜κΈ°)
  • HTML μˆ˜μ •Β·μ‚­μ œΒ·μƒμ„±

2. 주석

  • javascript β†’ ν•œ 쀄 : //, μ—¬λŸ¬ 쀄 : /* */

  • HTML β†’ <!-- -->

  • CSS β†’ /* */

3. μ‹λ³„μž(identifier)

  • λ³€μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ μ§€μ–΄μ£ΌλŠ” 이름

  • λ³€μˆ˜

    • λ³€ν•  수 μžˆλŠ” 값을 담은 μ €μž₯μ†Œ
    • λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” 방법 : var, let, const
  • 숫자, μ•ŒνŒŒλ²³, $, _ μ‚¬μš© κ°€λŠ₯

  • 숫자둜 μ‹œμž‘ν•  수 μ—†κ³ , javascript ν‚€μ›Œλ“œ(μ˜ˆμ•½μ–΄)λŠ” μ‚¬μš©ν•  수 μ—†λ‹€

  • μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ =λŠ” =λ₯Ό κΈ°μ€€μœΌλ‘œ '였λ₯Έμͺ½μ— μœ„μΉ˜ν•œ κ°’'을 'μ™Όμͺ½μ˜ λ³€μˆ˜'μ—κ²Œ λŒ€μž…/ν• λ‹Ή ν•œλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.

4. 데이터 νƒ€μž… (κ°’μ˜ μ’…λ₯˜)

  • μ›μ‹œ νƒ€μž… : λ”λŠ” μž‘κ²Œ λ‚˜λˆŒ 수 μ—†λŠ” ν•œ 가지 μ•„μ΄ν…œ, value(κ°’) μžμ²΄κ°€ λ©”λͺ¨λ¦¬μ— μ €μž₯됨
    • 숫자
    • λ¬Έμžμ—΄
    • boolean (true/false)
    • undefined
    • null
    • symbol
  • 객체 νƒ€μž… : object(객체)λ₯Ό κ°€λ¦¬ν‚€λŠ” referenceκ°€ λ©”λͺ¨λ¦¬μ— μ €μž₯됨
    • object
      ~ ν•œ 가지 μ•„μ΄ν…œλ“€μ„ μ—¬λŸ¬ 개 묢은 것
      ~ function도 λ³€μˆ˜μ— κ°’μœΌλ‘œ 할당이 κ°€λŠ₯함
  • immutable 데이터 νƒ€μž… : μ›μ‹œ νƒ€μž…, frozen objects
  • mutable 데이터 νƒ€μž… : 기본적으둜 μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œμ˜ λͺ¨λ“  objects

1) boolean

  • false둜 λ³€ν™˜λ˜λŠ” κ°’ :
    0 | -0 | false | undefined | null | NaN | "" | '' | ``

  • true둜 λ³€ν™˜λ˜λŠ” κ°’ : κ·Έ μ™Έμ˜ κ°’ λͺ¨λ‘

const what = 1 > 4;
console.log(`value: ${what} type: ${typeof what}`) // value: false type: boolean

2) undefined, null, NaN

  • undefined : μ •μ˜λ˜μ§€ μ•ŠμŒ, 값이 λŒ€μž…λ˜μ§€ μ•Šμ€ μƒνƒœλ₯Ό μ˜λ―Έν•˜λŠ” κ°’

  • null : μ˜λ„μ μœΌλ‘œ 값이 μ—†μŒμ„ λ‚˜νƒ€λ‚΄κ³  싢을 λ•Œ μ‚¬μš©λ˜λŠ” κ°’

  • NaN : μœ νš¨ν•˜μ§€ μ•Šμ€ 숫자 연산을 μ‹€ν–‰ν–ˆμ„ λ•Œ λ‚˜νƒ€λ‚˜λŠ” κ°’


3) 숫자(number)

  • % : λ‚˜λ¨Έμ§€ 값을 κ΅¬ν•˜λŠ” μ—°μ‚°μž

  • ** : κ±°λ“­μ œκ³±μ„ κ΅¬ν•˜λŠ” μ—°μ‚°μž

console.log(2 ** 3); // 2의 3승
  • 증가 / κ°μ†Œ μ—°μ‚°μž

πŸ’‘ a = a + 1 = a += 1 = ++a

( -, *, / )도 λ§ˆμ°¬κ°€μ§€, κ·ΈλŸ¬λ‚˜ //aλ‚˜ **aλŠ” μ—†λ‹€)

let a = 1;
console.log(a = a + 1); // 2
console.log(a += 1); // 3
console.log(++a); // 4

πŸ’‘ 사전·사후 증가 (κ°μ†Œλ„ λ§ˆμ°¬κ°€μ§€)

// counterλΌλŠ” λ³€μˆ˜μ˜ 값을 λ’€μ—μ„œ λ°”κΏ€ κ²ƒμ΄λ―€λ‘œ const 말고 let μ‚¬μš©
let counter = 1;

// 사전 증가
const preincrement = ++counter;
/*
μˆœμ„œ
counter = counter + 1;
preincrement = counter;
*/
console.log(`preincrement: ${preincrement}, counter: ${counter}`); // preincrement: 2, counter: 2

// 사후 증가
const postincrement = counter++;
/*
μˆœμ„œ
postincrement = counter;
counter = counter + 1;
*/
console.log(`postincrement: ${postincrement}, counter: ${counter}`); // postincrement: 2, counter: 3
  • Infinity/-Infinity : μ–΄λ–€ 수λ₯Ό 0/-0으둜 λ‚˜λˆ„μ—ˆμ„ λ•Œ λ‚˜μ˜€λŠ” κ°’

  • isNaN ν•¨μˆ˜ : μ–΄λ–€ 값이 NaN(Not A Number)인지 νŒλ³„ν•˜κΈ° μœ„ν•΄ μ‚¬μš©

var a = 5;
var b = isNaN(a);
console.log(b); // false
  • typeof μ—°μ‚°μž : μ–΄λ–€ μ’…λ₯˜μ˜ 값인지 νŒλ³„ν•˜κΈ° μœ„ν•΄ μ‚¬μš©, 값은 항상 λ¬Έμžμ—΄λ‘œ λ‚˜νƒ€λ‚¨ ("number", "object", "function"...)
var a = typeof 3;
console.log(a); // "number"

4) λ¬Έμžμ—΄(string)

  • 항상 λ”°μ˜΄ν‘œλ₯Ό λΆ™μ—¬μ„œ μ“΄λ‹€

  • λ¬Έμžμ—΄μ€ 더할 수 μžˆλ‹€

var result = "a" + "b";
console.log(result); // ab

β€» ν…œν”Œλ¦Ώ λ¬Έμžμ—΄(=template literals=template string) ❗

  • λ°±ν‹± κΈ°ν˜Έμ™€ ${...} μ‚¬μš©
const c = "a" + "b";
console.log(`value: ${c} type: ${typeof c}`); // value: ab type: string

const Jimmy = "Jimmy";
const man = `Bye, ${Jimmy}!`;
console.log('Bye, ' + Jimmy + '!'); // Bye, Jimmy!
console.log('value: ' + man + ' type: ' + typeof man); // value: Bye, Jimmy! type: string
console.log(`value: ${man} type: ${typeof man}`); // value: Bye, Jimmy! type: string
  • \n, \t, \ 더 이상 μ“Έ ν•„μš” 없이 (enter, tab, ') κ·ΈλŒ€λ‘œ ν‘œν˜„ κ°€λŠ₯
console.log('I\'m ' + 'Syong'); // I'm Syong

console.log(`string literals: ${1 + 3}
  ''''
3 + 2 = ${1 + 4}`);
/*
string literals: 4
  ''''
3 + 2 = 5
*/
  • number β‰  "number" 주의!
var number = 30;
var something = typeof number;

console.log(number === something); // false (∡ number β‰  "number")
  • λ¬Έμžμ—΄μ˜ 길이 .length Β  β€» 곡백도 ν¬ν•¨ν•œλ‹€
var str = "happy ";
console.log(str.length); // 6

console.log("sad".length); // 3
  • 인덱슀 [ ] Β  β€» 1 이 μ•„λ‹ˆλΌ 0 λΆ€ν„° μ‹œμž‘ν•œλ‹€
var str = "happy";
console.log(str[0]); // "h"

console.log("sad"[2]); // "d"

πŸ“Œ λ¬Έμžμ—΄ λ©”μ„œλ“œ

  1. toLowerCase()
  • λͺ¨λ‘ μ†Œλ¬Έμžλ‘œ
console.log('You hAve BeEn DiSHonest'.toLowerCase());
// you have been dishonest
  1. toUpperCase()
  • λͺ¨λ‘ λŒ€λ¬Έμžλ‘œ
console.log('No wAy!'.toUpperCase()); // NO WAY!
  1. indexOf('찾을 문자')
  • μ°Ύκ³  싢은 λ¬Έμžκ°€ λ¬Έμžμ—΄μ˜ λͺ‡ 번째 μžλ¦¬μ—μ„œ μ‹œμž‘ν•˜λŠ”μ§€
console.log('Are you sure?'.indexOf(' yo')); // 3
  1. slice(μΆ”μΆœ μ‹œμž‘ν•  문자 인덱슀, μΆ”μΆœ 끝낼 문자 인덱슀)
  • 'μΆ”μΆœ 끝낼 문자 인덱슀'λŠ” μΆ”μΆœ 값에 ν¬ν•¨λ˜μ§€ μ•ŠλŠ”λ‹€
console.log('My name is Syong.'.slice(1, 5)); // y na
  1. split('기쀀이 될 문자')
  • 기쀀이 될 문자λ₯Ό κΈ°μ€€μœΌλ‘œ 자λ₯Έ λ¬Έμžμ—΄μ„ 각 λ°°μ—΄ μš”μ†Œμ— 담은 λ’€ ν•΄λ‹Ή λ°°μ—΄ 객체λ₯Ό λ°˜ν™˜ν•΄μ€€λ‹€
console.log('I?doubt?that'.split('?'));
// (3) ['I', 'doutb', 'that']
console.log('Why would you doubt my word?'.split(''));
/*
(28) ['W', 'h', 'y', ' ', 'w', 'o', 'u', 'l', 'd', ' ', 'y',
'o', 'u', ' ', 'd', 'o', 'u', 'b', 't', ' ', 'm', 'y', ' ',
'w', 'o', 'r', 'd', '?']
*/
  1. startsWith('검색할 λ¬Έμžμ—΄')
  • λ¬Έμžμ—΄μ΄ νŠΉμ • λ¬Έμžμ—΄λ‘œ μ‹œμž‘ν•˜λŠ”μ§€ 확인해쀀닀
  • true/false 값을 좜λ ₯ν•œλ‹€
console.log('what are you doing?'.startsWith('what ')); // true
  1. endsWith('검색할 λ¬Έμžμ—΄')
  • λ¬Έμžμ—΄μ΄ νŠΉμ • λ¬Έμžμ—΄λ‘œ λλ‚˜λŠ”μ§€ 확인해쀀닀
  • true/false 값을 좜λ ₯ν•œλ‹€
console.log('I am doing FiNe'.endsWith('iNe')); // true
  1. includes('검색할 λ¬Έμžμ—΄')
  • 검색할 λ¬Έμžμ—΄μ΄ ν•΄λ‹Ή λ¬Έμžμ—΄μ— ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€λ₯Ό 확인해쀀닀
  • true/false 값을 좜λ ₯ν•œλ‹€
console.log('hi ken'.includes(' ke')); // true
  1. repeat(횟수)
  • 주어진 λ¬Έμžμ—΄μ„ 횟수만큼 λ°˜λ³΅ν•œ 값을 λ°˜ν™˜ν•œλ‹€
console.log('6'.repeat(3)); // 666

5) Symbol

  • λ§΅μ΄λ‚˜ 자료 κ΅¬μ‘°μ—μ„œ λ™μ‹œλ‹€λ°œμ μœΌλ‘œ 일어날 수 μžˆλŠ” μ½”λ“œμ—μ„œ μš°μ„ μˆœμœ„λ₯Ό 주고자 ν•˜λŠ” λ“± κ³ μœ ν•œ μ‹λ³„μžκ°€ ν•„μš”ν•  λ•Œ μ‚¬μš©

  • 주어진 string이 같아도 각기 λ‹€λ₯Έ κ³ μœ ν•œ μ‹λ³„μžλ₯Ό λ§Œλ“€ 수 μžˆλ‹€

  • 주어진 string이 같을 λ•ŒλŠ” 같은 μ‹λ³„μžλ₯Ό λ§Œλ“€κ³  μ‹ΆμœΌλ©΄ .for을 μΆ”κ°€ν•˜λ©΄ λœλ‹€

  • symbol의 valueλ₯Ό μ˜¬λ°”λ₯΄κ²Œ 좜λ ₯ν•˜κΈ° μœ„ν•΄ 뒀에 .description을 μΆ”κ°€ν•œλ‹€

const symbol1 = Symbol('hi'); // 였λ₯Έμͺ½μ€ λ°˜λ“œμ‹œ 'λŒ€λ¬Έμž S'둜 써야 함
const symbol2 = Symbol('hi');
console.log(symbol1 === symbol2); // false

const symbol3 = Symbol.for('hi');
const symbol4 = Symbol.for('hi');
console.log(symbol3 === symbol4); // true

console.log(`value: ${Symbol1.description} type: ${typeof Symbol1}`); // value: hi typeof: symbol

6) 객체(object)

const syong = {name: 'syong', age: 21};
syong.age = 22;

constλ₯Ό μ‚¬μš©ν–ˆμœΌλ―€λ‘œ ν•œλ²ˆ ν• λ‹Ήλœ objectλŠ” λ‹€λ₯Έ object둜 λ³€κ²½ν•  수 μ—†λ‹€. κ·ΈλŸ¬λ‚˜ object μ•ˆμ˜ λ³€μˆ˜μΈ nameκ³Ό age 값은 λ³€κ²½ κ°€λŠ₯ν•˜λ‹€.


5. 동적 타이핑 (dynamic typing)

1) 정적 νƒ€μž… μ–Έμ–΄ ex) C, JAVA ...

  • λ³€μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ νƒ€μž…λ„ κ²°μ •ν•΄μ„œ 같이 μ„ μ–Έν•΄μ€€λ‹€.

2) 동적 νƒ€μž… μ–Έμ–΄ ex) javascript...

  • λ³€μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ νƒ€μž…μ„ μ„ μ–Έν•˜μ§€ μ•Šκ³ , ν”„λ‘œκ·Έλž¨μ΄ λ™μž‘ν•  λ•Œ(runtime에) ν• λ‹Ήλœ 값에 λ”°λΌμ„œ νƒ€μž… 변경이 κ°€λŠ₯ν•˜λ‹€.

  • 쒋은 아이디어가 μžˆμ–΄μ„œ λΉ λ₯΄κ²Œ ν”„λ‘œν† νƒ€μž…μ„ ν•˜κ³  싢을 λ•ŒλŠ” 맀우 μœ μš©ν•˜λ‹€.

  • κ·ΈλŸ¬λ‚˜ λ‹€μˆ˜κ°€ μ°Έμ—¬ν•˜λŠ” 규λͺ¨ μžˆλŠ” ν”„λ‘œμ νŠΈμ—μ„œλŠ” μ£Όμ˜κ°€ ν•„μš”ν•˜λ‹€. 이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ‚˜μ˜¨ 게 typescript이닀.

let text = "hello";
console.log(text.charAt(0)); // h
console.log(text[0]); // h

text = `1` + 5; // 5도 문자둜 μžλ™ 인식
console.log(`value: ${text} type: ${typeof text}`); // value: 15 type: string

text = '8' / '2'; // λ‘˜ λ‹€ 숫자둜 μžλ™ 인식
console.log(`value: ${text} type: ${typeof text}`); // value: 4 type: number

console.log(text.charAt(0)); // error (∡ textλŠ” 더 이상 λ¬Έμžμ—΄μ΄ μ•„λ‹˜)

πŸ™‹β€β™€οΈ 질문

  1. μ—¬κΈ° λ°”λ‘œκ°€κΈ° β†’ ν•΄κ²° (210925)

✨ 내일 ν•  것

  1. javascript 기초 볡슡

  2. λ“œλ¦Όμ½”λ”© 유튜브 'μžλ°”μŠ€ν¬λ¦½νŠΈ κ°•μ˜' (4~6편)

  3. git 컀밋 κΈ°μ€€ μ•Œμ•„λ³΄κΈ°

profile
λŠ₯λ™μ μœΌλ‘œ μ‚΄μž, ν–‰λ³΅ν•˜κ²ŒπŸ˜

0개의 λŒ“κΈ€