πŸ” ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ FE λ°λΈŒμ½”μŠ€ 5κΈ° TIL 231109

Jun 2k (Jun2)Β·2023λ…„ 11μ›” 12일
0
post-thumbnail

πŸ’» Intro

이번 μ£Ό κΈˆμš”μΌκΉŒμ§€ CSS둜 μ›ν•˜λŠ” μ›ΉνŽ˜μ΄μ§€ ν΄λ‘ μ½”λ”©ν•˜λŠ” 과제λ₯Ό μ œμΆœν•΄μ•Ό ν•΄μ„œ λͺ©~금 λ™μ•ˆμ˜ νƒ€μž…μŠ€ν¬λ¦½νŠΈ κ°•μ˜λ₯Ό μž μ‹œ λ―Έλ€„λ’€μ—ˆλ‹€.
CSS 과제λ₯Ό μ–΄λ ΅κ²Œ λ§ˆλ¬΄λ¦¬ν•˜κ³  주말을 ν†΅ν•΄μ„œ νƒ€μž…μŠ€ν¬λ¦½νŠΈ κ°•μ˜λ₯Ό λ‹€μ‹œ λ“£κ³  μƒˆλ‘œ μ•Œκ²Œ 된 λ‚΄μš©μ„ μ •λ¦¬ν•˜λ €κ³  ν•œλ‹€.
마침 λ”κΈ°νŒ€κ³Ό μš°λ¦¬νŒ€μ˜ μ„μ£Όλ‹˜, μ˜ˆμ§„λ‹˜κ³Ό ν•¨κ»˜ νƒ€μž…μŠ€ν¬λ¦½νŠΈ μŠ€ν„°λ””λ„ λ‹€μŒ μ£Ό μ›”μš”μΌλΆ€ν„° μ§„ν–‰ν•  μ˜ˆμ •μ΄λ‹ˆ 본격적으둜 νƒ€μž…μŠ€ν¬λ¦½νŠΈ 곡뢀에 λ‚˜μ„œλ €κ³  ν•œλ‹€.



🧐 였늘 μƒˆλ‘­κ²Œ 배운 것

νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ„€μΉ˜

  • μ„€μΉ˜ λͺ…λ Ήμ–΄
    npm init -y : package.json λ§Œλ“€κΈ°
    npm i -D typescript : νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ˜μ‘΄μ„± μ„€μΉ˜

  • μ—„κ²©ν•œ 문법을 μ μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” tsconfig.json νŒŒμΌμ— λ‹€μŒκ³Ό 같이 섀정을 μΆ”κ°€ν•œλ‹€.
    "strict": true : use strict와 동일
    "include": ["src/**/*.ts"] : src 폴더 λ‚΄ λͺ¨λ“  ν•˜μœ„ κ²½λ‘œμ— .ts νŒŒμΌλ“€μ— μ μš©ν•˜κ² λ‹€λŠ” λ²”μœ„ 섀정이닀.

  • TS νŒŒμΌμ„ JS파일둜 λ³€ν™˜ν•˜κΈ° μœ„ν•œ μ„€μ • μΆ”κ°€
    package.json에 λ‹€μŒκ³Ό 같이 파일 μœ ν˜•κ³Ό λ³€ν™˜ν•œ νŒŒμΌμ„ μ„€μ •ν•œλ‹€.


eslint와 prettier

JS 문법을 ν™•μΈν•΄μ£ΌλŠ” eslint와 μ½”λ“œ 가독성을 ν–₯μƒμ‹œμΌœμ£ΌλŠ” prettier둜 ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•  λ•Œ 도움이 많이 되기 λ•Œλ¬Έμ— μ‚¬μš©μ„ ꢌμž₯ν•œλ‹€.
λ‹€λ§Œ prettierκ°€ eslint의 문법 체크에 가끔씩 좩돌이 μΌμ–΄λ‚˜λŠ” κ²½μš°κ°€ 있기 λ•Œλ¬Έμ— μ„€μΉ˜ μ‹œ 이에 λŒ€ν•œ 섀정을 μΆ”κ°€ν•΄μ£ΌλŠ” 것이 μ’‹λ‹€.

λͺ…λ Ήμ–΄λŠ” λ‹€μŒκ³Ό 같이 μž…λ ₯ν•˜λ©΄ λœλ‹€.
npm i -D eslint prettier eslint-plugin-prettier eslint-config-prettier

λ˜ν•œ typescript에 λŒ€ν•œ eslint parser 및 plugin 섀정도 μΆ”κ°€ν•΄μ£Όμž!
npm i -D @typescript-eslint/parser @typescript-eslint/eslint-plugin

νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ νƒ€μž… μ§€μ • 방식

기본적으둜 λ³€μˆ˜λͺ…: νƒ€μž… ν˜•νƒœλ‘œ 지정이 κ°€λŠ₯ν•˜κ³  λ°°μ—΄, κ°μ²΄μ—μ„œλ„ 각각의 μΈμžμ™€ λ°˜ν™˜κ°’ μ˜†μ— λ˜‘κ°™μ€ λ°©μ‹μœΌλ‘œ νƒ€μž…μ„ μ§€μ •ν•˜λ©΄ λœλ‹€.
7μ£Όμ°¨ κ³Όμ œμ—μ„œ μ§„ν–‰ν–ˆλ˜ μ •ν•©μ„± 체크λ₯Ό νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ ν•΄μ£ΌλŠ” λŠλ‚Œμ΄μ—ˆλ‹€.

μƒˆλ‘­κ²Œ 배운 νƒ€μž…μ€ Enum νƒ€μž…μ΄μ—ˆλ‹€.
μ΄λ„˜ νƒ€μž…μ€ νƒ€μž… + κ°’(데이터)의 μ§‘ν•©μœΌλ‘œ μ—­λ°©ν–₯ 맀핑이 κ°€λŠ₯ν•˜λ‹€. 단, 숫자둜 값을 μ§€μ •ν–ˆμ„ 경우만 μ—­λ°©ν–₯ 맀핑이 κ°€λŠ₯ν•˜λ‹€. λ¬ΈμžλŠ” λΆˆκ°€λŠ₯ν•˜λ‹€.

보톡은 인덱슀λ₯Ό 톡해 값을 μ–»λŠ”λ° μ—­λ°©ν–₯ λ§€ν•‘μœΌλ‘œ 값을 톡해 인덱슀λ₯Ό μ–»λŠ” 것을 λ”°λ‘œ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  ꡬ할 수 μžˆλ‹€.

μ•„λž˜μ™€ 같이 TSμ—μ„œ μž‘μ„±ν•œ Enum은 Jsμ—μ„œ ν‚€κ°€ 인덱슀, valueκ°€ κ°’μœΌλ‘œ λ§€ν•‘λœ 객체둜 λ³€ν™˜λœλ‹€.

enum NumberList { One, Two, Three }
console.log(NumberList[0]) // 'One'
console.log(NumberList.One) // 0
const NumberList = {
  0: 'One', 1: 'Two', 2: 'Three'
}

Enum μš”μ†Œ μ€‘κ°„μ—μ„œ indexλ₯Ό λ”°λ‘œ μ„€μ •ν•  μˆ˜λ„ μžˆλ‹€.
μ£Όμ˜ν•  점은 μ§€μ •ν•œ index 뒀에 μžˆλŠ” μš”μ†ŒλŠ” μžλ™μœΌλ‘œ μ§€μ • 인덱슀 λ‹€μŒλΆ€ν„° 지정이 λœλ‹€.

enum NumberList { Zero, Two = 2, Three }
console.log(NumberList[0]) // 'Zero'
console.log(NumberList.Zero) // 0
console.log(NumberList.Two) // 2
console.log(NumberList.Three) // 3
console.log(NumberList[2]) //  'Two'

Void νƒ€μž…

값을 λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ” ν•¨μˆ˜μ˜ λ°˜ν™˜ νƒ€μž…μ΄λ‹€.
예λ₯Ό λ“€μ–΄ 값을 λ°˜ν™˜ν•˜μ§€ μ•Šκ³  console.log만 μ°λŠ” ν•¨μˆ˜κ°€ Void νƒ€μž…μ΄λ‹€.

const hello: (msg: string) => void = msg => {
  console.log(`Hello ${msg}`)
}

μœ„ 방법은 μ•”μ‹œμ μœΌλ‘œ voidλ₯Ό μ§€μ •ν•˜λŠ” 것이고 λͺ…μ‹œμ μœΌλ‘œ μ§€μ •ν•˜κ³  μ‹ΆμœΌλ©΄ λ‹€μŒκ³Ό 같이 λ§Œλ“€ μˆ˜λ„ μžˆλ‹€.

const hello: (msg: string) => undefined = msg => {
  console.log(`Hello ${msg}`)
  return undefined
}

Tuple(νŠœν”Œ) νƒ€μž…

κ³ μ •λœ 길이(length)λ₯Ό κ°€μ§€λŠ” λ°°μ—΄ νƒ€μž…μ΄λ‹€.
인덱슀λ₯Ό λ²—μ–΄λ‚˜κ²Œ 값을 μ§€μ •ν•˜λ©΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.
ν•œμ •λœ 데이터λ₯Ό λ‹€λ£° λ•Œ μœ μš©ν•  κ±° κ°™λ‹€. ex. μœ μ € 정보

const userA: [number, string, boolean] = [1, "Ikjun", true]
const userB: [number, string, boolean] = [2, "Ikjun2", false, 'Hi']
// '[number, string, false, string]' ν˜•μ‹μ€ '[number, string, boolean]' ν˜•μ‹μ— ν• λ‹Ήν•  수 μ—†μŠ΅λ‹ˆλ‹€.

νŠœν”Œμ—μ„œ μ£Όμ˜ν•  점은 λ°°μ—΄ 길이λ₯Ό λ³€ν™”μ‹œν‚¬ 수 μžˆλŠ” pushλ‚˜ splice λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜κ²Œ 되면 νŠœν”Œμ˜ 길이가 λ³€ν•˜κ²Œ λœλ‹€.
λ”°λΌμ„œ 데이터가 νŠœν”Œ νƒ€μž…μΌ λ•ŒλŠ” λ°°μ—΄ κ΄€λ ¨ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ”λ° μžˆμ–΄μ„œ μ£Όμ˜ν•΄μ•Ό μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€.

Never νƒ€μž…

μ–΄λ–€ 것도 ν• λ‹Ήν•  수 μ—†λŠ” νƒ€μž…μœΌλ‘œμ¨ μƒˆλ‘œμš΄ 값을 ν• λ‹Ήν•˜λ €κ³  ν•˜λ©΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.
Never νƒ€μž…μ€ μ •μƒμ μœΌλ‘œ μ’…λ£Œλ˜μ§€ μ•ŠλŠ” ν•¨μˆ˜μ˜ λ°˜ν™˜κ°’ νƒ€μž…μœΌλ‘œ μ§€μ •ν•  수 μžˆλ‹€.
예λ₯Ό λ“€μ–΄ λ‹€μŒκ³Ό 같은 μ—λŸ¬λ₯Ό throwν•˜λŠ” ν•¨μˆ˜μ— μ‚¬μš©ν•  수 μžˆλ‹€κ³  ν•œλ‹€.

const errorFunc: (m: string) => never = (msg) => {
  throw `μ—λŸ¬ λ°œμƒ = ${msg}`
}

try {
  errorFunc('Never μ—λŸ¬ λ°œμƒ ν•¨μˆ˜') // 'μ—λŸ¬ λ°œμƒ = Never μ—λŸ¬ λ°œμƒ ν•¨μˆ˜'
} catch (e) {
  console.err(e)
}

Any νƒ€μž…

Never νƒ€μž…κ³Ό μ •λ°˜λŒ€μ΄λ‹€. μ–΄λ–€ 것도 ν• λ‹Ήν•  수 μžˆλŠ” νƒ€μž…μ΄λ‹€.
처음 νƒ€μž…μŠ€ν¬λ¦½νŠΈλ₯Ό μ ‘ν–ˆμ„ λ•Œ μ˜¨κ°– 데이터에 anyλ₯Ό μ‚¬μš©ν–ˆλ˜ 기얡이 μžˆλ‹€. 그럴꺼면 νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ™œ μ‚¬μš©ν•˜λƒκ³  μΉœκ΅¬μ—κ²Œ 놀림을 λ°›μ•˜μ—ˆλ‹€...

νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” μ—„κ²©ν•œ 문법을 μ μš©ν•˜λŠ” 것이 λͺ©μ μ΄κΈ° λ•Œλ¬Έμ— μ΅œλŒ€ν•œ any νƒ€μž…μ„ μ‚¬μš©ν•˜λŠ” 것을 μ§€μ–‘ν•΄μ•Ό ν•œλ‹€.


Unknown νƒ€μž…

Any νƒ€μž…κ³Ό λΉ„μŠ·ν•˜μ§€λ§Œ 쑰금 λ‹€λ₯΄λ‹€.
μ–΄λ–€ 것도 ν• λ‹Ή ν•  수 μžˆμ§€λ§Œ! μ •ν™•νžˆ 무엇인지 μ•Œ 수 μ—†λŠ” νƒ€μž…μ΄λ‹€. 말 κ·ΈλŒ€λ‘œ Unknown이닀.
νƒ€μž…μ΄ λ­”μ§€ λͺ¨λ₯΄κΈ° λ•Œλ¬Έμ— λ‹€λ₯Έ νƒ€μž…μ—μ„œλŠ” 할당이 λΆˆκ°€λŠ₯ν•˜λ‹€.
Unknown νƒ€μž…μ€ 이후 νƒ€μž… κ°€λ“œλ₯Ό 톡해 νƒ€μž…μ— 따라 데이터λ₯Ό μ§€μ •ν•˜λŠ”λ° μ‚¬μš©λœλ‹€.


Union(μœ λ‹ˆμ˜¨) νƒ€μž…

2개 μ΄μƒμ˜ νƒ€μž…μ΄ ν—ˆμš©λ˜λŠ” νƒ€μž…μ΄λ‹€. |을 μ‚¬μš©ν•΄μ„œ νƒ€μž…μ„ κ΅¬λΆ„ν•΄μ„œ μ§€μ •ν•˜λ‹€.
νƒ€μž…μ΄ λ³€ν•  수 μžˆλŠ” λ³€μˆ˜λ₯Ό μ„€μ •ν•  λ•Œ μœ μš©ν•  수 μžˆμ„ κ±° κ°™λ‹€.


Intersection νƒ€μž…

2개 μ΄μƒμ˜ νƒ€μž…μ„ λ³‘ν•©λœ νƒ€μž…λ‹ˆλ‹€. Unionν•˜κ³ λŠ” μ’€ λ‹€λ₯΄λ‹€.
Union은 ν•΄λ‹Ή νƒ€μž…μ— μ—¬λŸ¬ νƒ€μž…(| or)이 λ“€μ–΄κ°ˆ 수 μžˆλŠ” κ°œλ…μ΄κ³ 
Inersection은 각기 λ‹€λ₯Έ νƒ€μž… λ­‰μΉ˜κ°€ &(and)둜 μ—°κ²°λœ κ°œλ…μ΄λ‹€.
기쑴에 μ‘΄μž¬ν•˜λŠ” νƒ€μž…μ˜ μž¬μ‚¬μš©μ„±μ„ λ†’μ—¬μ€€λ‹€.


νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ νƒ€μž… μΆ”λ‘ 

νƒ€μž…μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” νƒ€μž…μ„ κΌ­ λͺ…μ‹œμ μœΌλ‘œ μ§€μ •ν•˜μ§€ μ•Šμ•„λ„ 3κ°€μ§€ κ·Όκ±°λ₯Ό 기반으둜 νƒ€μž…μ„ μΆ”λ‘ ν•˜λŠ” 둜직이 ν¬ν•¨λ˜μ–΄ μžˆλ‹€.

  1. μ΄ˆκΈ°ν™”λœ λ³€μˆ˜
  2. 기본값이 μ§€μ •λœ λ§€κ°œλ³€μˆ˜
  3. λ°˜ν™˜μ΄ μžˆλŠ” ν•¨μˆ˜

μœ„μ˜ 3κ°€μ§€ κ²½μš°μ—λŠ” μ΄ˆκΈ°ν™”λœ κ°’μ΄λ‚˜ κΈ°λ³Έκ°’ 및 λ°˜ν™˜κ°’μ˜ ν˜•νƒœλ₯Ό λ°”νƒ•μœΌλ‘œ νƒ€μž…μ„ μΆ”λ‘ ν•˜κΈ° λ•Œλ¬Έμ— 일일이 νƒ€μž…μ„ μ§€μ •ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.

ν•˜μ§€λ§Œ 일일히 νƒ€μž…μ„ μ§€μ •ν•˜λŠ” 것이 λ­”κ°€ 맘이 νŽΈν•  κ±° κ°™λ‹€. λ‚˜μ€‘μ— μ΅μˆ™ν•΄μ§€λ©΄ νƒ€μž… 좔둠을 ν™œμš©ν•΄μ„œ νƒ€μž… 지정을 μƒλž΅ν•΄μ•Όκ² λ‹€.


νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ νƒ€μž… 단언

좔둠이 μžˆλ‹€λ©΄ 단언도 μžˆλ‹€. λ‹¨μ–Έμ»¨λŒ€λΌλŠ” 말처럼 λ”± μž˜λΌμ„œ 이거야! ν•˜λŠ” κ°œλ…μ΄λ‹€.
as와 ! (Non-null 단언 μ—°μ‚°μž)λ₯Ό 톡해 단언할 수 μžˆλ‹€.

특히 λ…Έμ…˜ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ μΏΌλ¦¬μ…€λ ‰ν„°λ‘œ HTMLλ₯Ό μ°Ύμ•„μ˜¬ λ•Œ JSλŠ” κ·Έ μš”μ†Œκ°€ 없을 λ•ŒλŠ” 이후 클래슀λͺ… μ§€μ •μ΄λ‚˜ μΆ”κ°€ν•  λ•Œ if문으둜 μΆ”κ°€λ₯Ό ν•΄μ€˜μ•Ό ν•œλ‹€. μ—λŸ¬λŠ” λ‚˜μ§€ μ•Šμ§€λ§Œ μ˜ˆμ™Έ μΌ€μ΄μŠ€λ₯Ό μΆ”κ°€ν•΄μ•Ό ν•˜λŠ” 것이닀.

ν•˜μ§€λ§Œ tsλŠ” μ—λŸ¬λ₯Ό ν‘œμ‹œν•˜κΈ° λ•Œλ¬Έμ— μš”μ†Œλ₯Ό μ°Ύμ•„μ˜€μ§€ λͺ»ν–ˆμ„ λ•Œ (null일 λ•Œ)λ₯Ό λ°°μ œν•˜κ³  as둜 HTMLElementμž„μ„ 단언해주면 λ¬Έμ œκ°€ ν•΄κ²°λœλ‹€.
이후 νƒ€μž… κ°€λ“œλ₯Ό μ§€μ •ν•΄μ€˜μ•Ό μ™„μ „νžˆ μ—λŸ¬λ₯Ό λ°©μ§€ν•  수 μžˆμ§€λ§Œ 1차적으둜 νƒ€μž… μ§€μ •μ—μ„œμ˜ μ—λŸ¬λ₯Ό 막을 수 μžˆλ‹€.

  • ν• λ‹Ή 단언
    μ•„λž˜μ™€ 같이 λ³€μˆ˜λ₯Ό μ„ μ–Έλ§Œ ν•˜κ³  ν• λ‹Ήν•˜μ§€ μ•Šκ³  μ‚¬μš©ν•˜κ±°λ‚˜ λΆˆλŸ¬μ™€μ•Ό ν•  λ•Œ !둜 ν• λ‹Ή 단언을 ν•΄μ£Όμ§€ μ•ŠμœΌλ©΄ tsλŠ” μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚¨λ‹€.
let num!:number
console.log(num)

νƒ€μž… κ°€λ“œ

νƒ€μž… 좔둠이 κ°€λŠ₯ν•œ λ²”μœ„ μ•ˆμ—μ„œ νƒ€μž…μ„ 보μž₯ν•˜λ„λ‘ ν•˜μ—¬ λŸ°νƒ€μž„μ—λŸ¬ μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•Šλ„λ‘ ν•˜λŠ” μ½”λ“œκ°€ νƒ€μž… κ°€λ“œμ΄λ‹€.

이것은 TSμ—μ„œλ§Œμ΄ μ•„λ‹ˆλΌ JSμ—μ„œλ„ μœ νš¨ν•œ μ½”λ“œμ΄λ‹€.
typeof, instanceof, in 등을 μ‚¬μš©ν•΄μ„œ κ΅¬ν˜„ν•  수 μžˆλ‹€.
κΈ°μ‘΄ JS κ³Όμ œλ‚˜ ν”„λ‘œμ νŠΈ μ§„ν–‰ μ‹œμ—λ„ νƒ€μž… κ°€λ“œλ₯Ό ν™œμš©ν–ˆμ—ˆλ‹€.

νƒ€μž… κ°€λ“œλ₯Ό ν•¨μˆ˜ ν˜•νƒœλ‘œ λ§Œλ“€ λ•Œμ—λŠ” ν•¨μˆ˜μ˜ λ°˜ν™˜κ°’μ— ν™•μΈν•˜κ³  싢은 λ°μ΄ν„°μ˜ νƒ€μž…μ„ λͺ…μ‹œν•΄μ€˜μ•Ό ν•œλ‹€.
μ•„λž˜ isUserA ν•¨μˆ˜λŠ” user 데이터가 UserA νƒ€μž…μΈμ§€λ₯Ό ν™•μΈν•˜λŠ” ν•¨μˆ˜μ΄λ‹€.
ν•¨μˆ˜μ˜ λ°˜ν™˜κ°’μ— is ν‚€μ›Œλ“œλ₯Ό 톡해 ν•¨μˆ˜κ°€ 참일 경우 user λ°μ΄ν„°μ˜ νƒ€μž…μ„ λͺ…μ‹œν•΄μ€€ 것이닀.


νƒ€μž… 별칭 (Alias)

μ›ν•˜λŠ” νƒ€μž…μ„ μ»€μŠ€ν…€ν•˜μ—¬ μƒˆλ‘œμš΄ νƒ€μž… 쑰합을 λ§Œλ“€ 수 μžˆλ‹€.

type MyTypeName = string | number
type MyArray = MyTypeName[]
type UserA = {
  name: string
  age: number
}
type UserB = {
  isValid: boolean
}
type UserX = UserA & UserB

μ‹€μ§ˆμ μœΌλ‘œ νƒ€μž… 별칭을 μ‚¬μš©ν•΄μ„œ λ‚΄κ°€ μ›ν•˜λŠ” νƒ€μž…μ˜ 쑰건을 λ§ˆμŒλŒ€λ‘œ μ§€μ •ν•  수 μžˆμœΌλ‹ˆ λ³΅μž‘ν•œ νƒ€μž… 쑰건도 κ΅¬ν˜„ κ°€λŠ₯ν•˜λ©° μž¬μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€.



πŸ‘€ λŠλ‚€μ 

πŸ‘ Keep

7μ£Όμ°¨ κ³Όμ œμ—μ„œ state μ •ν•©μ„± 및 효율적 λ Œλ”λ§μ„ μœ„ν•œ state 변화에 λŒ€ν•œ 체크λ₯Ό ν•˜λŠ” μ½”λ“œλ₯Ό κ΅¬ν˜„ν–ˆμ—ˆλŠ”λ° 이것이 κ³§ typescript의 κΈ°λŠ₯κ³Ό λ™μΌν–ˆλ‹€. 과제λ₯Ό μ—΄μ‹¬νžˆ ν•˜λ‹ˆ μ—°κ²°λ˜λŠ” 뢀뢄이 λ§Žμ•„ μ’‹λ‹€.

😱 Problem

CSS 과제λ₯Ό μ§„ν–‰ν•˜λ‹€λ³΄λ‹ˆ 아직 flex와 grid의 ν™œμš© 및 scss μ‚¬μš©μ΄ μ΅μˆ™ν•˜μ§€ μ•Šμ•˜λ‹€. κ°•μ˜λ₯Ό λ“€μ—ˆλ‹€κ³  μ•„λŠ” 것이 μ•„λ‹ˆλΌλŠ” 것을 λ‹€μ‹œκΈˆ κΉ¨λ‹¬μ•˜λ‹€.

😜 Try

CSS의 flex 및 gridλ₯Ό ν†΅ν•œ λ°˜μ‘ν˜• λ ˆμ΄μ•„μ›ƒκ³Ό SCSS의 mixin을 μ‚¬μš©ν•΄μ„œ CSS 과제λ₯Ό λ¦¬νŒ©ν† λ§ν•΄μ•Όκ² λ‹€. νƒ€μž…μŠ€ν¬λ¦½νŠΈλ„ 주말에 걸쳐 μΈν„°νŽ˜μ΄μŠ€κΉŒμ§€ 곡뢀λ₯Ό μ™„λ£Œν•  μ˜ˆμ •μ΄λ‹€.



πŸ˜… ν•΄λ‹Ή λ‚΄μš©μ€ κ³΅λΆ€ν•˜λ©΄μ„œ μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€. ν‹€λ¦° λΆ€λΆ„μ΄λ‚˜ μ˜€ν•΄ν•˜κ³  μžˆλŠ” 뢀뢄이 μžˆλ‹€λ©΄ ν”Όλ“œλ°± λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.

profile
ν”„λ‘ νŠΈμ—”λ“œ 개발자 쀀비쀑...

0개의 λŒ“κΈ€