[TypeScript] Section 2. TypeScript 기초(2)

μ„œμ§„Β·2023λ…„ 10μ›” 31일

TypeScript

λͺ©λ‘ 보기
2/4
post-thumbnail

πŸ“ ν•¨μˆ˜ νƒ€μž…

βœ… parameter의 νƒ€μž…μ„ μ •μ˜ν•˜λŠ” 방식

function sum1(a: number, b: number) {
	return a+b;
}

sum(10, 20); 

βœ… ν•¨μˆ˜μ˜ λ°˜ν™˜ 값에 νƒ€μž…μ„ μ •μ˜ν•˜λŠ” 방식

function sum2(): number {
  // return 'λ―Όμ„œ';
  return 10; 
}

🚨 return κ°’μœΌλ‘œ 숫자λ₯Ό λ„£μ–΄μ£Όμ§€ μ•ŠμœΌλ©΄ κ²½κ³  λ°œμƒ !

βœ… ν•¨μˆ˜μ— νƒ€μž…μ„ μ •μ˜ν•˜λŠ” 방식

function sum3(a: number, b: number): number {
	return a+b;
}

+) νƒ€μž… μ§€μ • 말고도 μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜ μ„ μ–Έκ³Ό 차이점이 μžˆλ‹€λ©΄?

νƒ€μž…μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” νŒŒλΌλ―Έν„°λ₯Ό μ œν•œν•˜λŠ” νŠΉμ„±μ„ κ°€μ§„λ‹€!
즉 νŒŒλΌλ―Έν„°μ˜ κ°œμˆ˜κ°€ μ„ μ–Έλœ 것과 λ§žμ•„μ•Ό μ—λŸ¬ 없이 μ‹€ν–‰λœλ‹€ ~

// μžλ°”μŠ€ν¬λ¦½νŠΈ
function sum(a+b) {
	return a+b;
}

// -> μ—λŸ¬ 없이 10κ³Ό 20만 νŒŒλΌλ―Έν„°λ‘œ λ°›κ³  30을 returnν•΄μ€€λ‹€.
sum(10,20,30,40,50); 

같은 μ½”λ“œλ₯Ό νƒ€μž…μŠ€ν¬λ¦½νŠΈμ—μ„œ μž‘μ„±ν•œλ‹€λ©΄?

// νƒ€μž…μŠ€ν¬λ¦½νŠΈ
function sum(a: number, b: number): number {
	return a+b;
}

sum(10,20); // ⭕️  

// Expected 2 arguments, but got 5 μ—λŸ¬ λ°œμƒ !
sum(10,20,30,40,50); // ❌
// Expected 2 arguments, but got 1 μ—λŸ¬ λ°œμƒ !
sum(10); // ❌

πŸ“ μ˜΅μ…”λ„ νŒŒλΌλ―Έν„° (선택적 νŒŒλΌλ―Έν„°)

μΆ”κ°€μ μœΌλ‘œ λ“€μ–΄μ˜¬ 수 μžˆλŠ” νŒŒλΌλ―Έν„°μ— λŒ€ν•΄μ„œ ?λ₯Ό λ„£μ–΄μ„œ μ„ μ–Έν•œλ‹€.
?λ₯Ό λ„£μ–΄μ„œ μ„ μ–Έν•  경우 ν•΄λ‹Ή νŒŒλΌλ―Έν„°λ₯Ό 써도 되고 μ•ˆ 써도 λœλ‹€λŠ” 것을 μ˜λ―Έν•˜κ²Œ λœλ‹€.

function log(a: string, b?: string) {
	...
}

log('hellow world'); // νŒŒλΌλ―Έν„°λ₯Ό ν•˜λ‚˜λ§Œ μž‘μ„±ν•˜μ—¬λ„ μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€ !
log('hello ts', 'abc'); 

πŸ“ κΈ°λ³Έ μ΄ˆκΈ°ν™” λ§€κ°œλ³€μˆ˜

ν•¨μˆ˜λ₯Ό μ •μ˜ν•  λ•Œ λ§€κ°œλ³€μˆ˜μ— 미리 μ΄ˆκΈ°ν™” 값을 ν• λ‹Ήν•˜μ—¬ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.
ν•¨μˆ˜ 호좜 μ‹œ ν•΄λ‹Ή λ§€κ°œλ³€μˆ˜λ₯Ό μƒλž΅ν•œλ‹€λ©΄ μ΄ˆκΈ°ν™”κ°’μ΄ ν• λ‹Ήλœλ‹€ !

function honeyWeb( name: string, bestStudy = 'TacoStudy') {
    return name + " " + bestStudy;
}


honeyWeb('seojin') // 'seojin TacoStudy'
honeyWeb('minseo', undefined); // 'minseo TacoStudy'
honeyWeb('hoeun', 'reactStudy'); // 'hoeun reactStudy'
honeyWeb('hyein', 'TacoStudy', 'simsimsStudy'); // ❌

πŸ“ μΈν„°νŽ˜μ΄μŠ€

μΈν„°νŽ˜μ΄μŠ€λŠ” λ‘κ°œμ˜ μ‹œμŠ€ν…œ 사이에 μƒν˜Έ 간에 μ •μ˜ν•œ 약속 ν˜Ήμ€ κ·œμΉ™μ„ ν¬κ΄„ν•˜μ—¬ μ˜λ―Έν•œλ‹€. ν˜Ήμ€ 객체의 껍데기 λ˜λŠ” 섀계도라고 ν•  수 μžˆλ‹€.

(apiλ₯Ό κ°€μ Έμ™€μ„œ api의 데이터 λͺ¨μ–‘(ꡬ쑰)이 μ–΄λ–»λ‹€ λΌλŠ” 것을 μΈν„°νŽ˜μ΄μŠ€λ‘œ μ •μ˜ν•  λ•Œ 많이 μ‚¬μš©λœλ‹€κ³  ν•œλ‹€ !)

πŸ€” μΈν„°νŽ˜μ΄μŠ€ μ‚¬μš©μ˜ μž₯점

  1. μ˜€νƒˆμž λ°©μ§€
  2. 가독성 쒋은 μ½”λ“œ
  3. ν˜‘μ—… μ‹œ μƒν˜Έκ°„μ˜ μ•½μ†μœΌλ‘œ λ™μΌν•œ κ·œμΉ™μ΄ 적용된 μ½”λ“œ μž‘μ„± κ°€λŠ₯

μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ™œ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”μ§€ μ½”λ“œλ₯Ό 톡해 μ§κ΄€μ μœΌλ‘œ ν™•μΈν•΄λ³΄μž !

μ•„λž˜ μ½”λ“œμ—μ„œλŠ” λ°˜λ³΅λ˜λŠ” νƒ€μž…λ“€κ³Ό κ΄€λ ¨λœ μ½”λ“œλ₯Ό μ€‘λ³΅ν•΄μ„œ μž‘μ„±ν•˜κ³  μžˆλ‹€.

let todoItems: {id: number; title: string; done: boolean;}[];

function fetchTodoItems(): {id: number; title: string; done: boolean;}[] {
	...
};
  
function addTodoItems(todo: {id: number; title: string; done: boolean;}): void {
	...
};

μ΄λ ‡κ²Œ λ°˜λ³΅λ˜λŠ” νƒ€μž…λ“€μ„ μΈν„°νŽ˜μ΄μŠ€λ‘œ μ •μ˜ν•˜κ³  μ‚¬μš©ν•  수 μžˆλ‹€.

interface Todo {
  id: number; 
  title: string; 
  done: boolean;
}

let todoItems: Todo[];

function fetchTodoItems(): Todo[] {
	...
};
  
function addTodoItems(todo: Todo): void {
	...
};

πŸ“ μΈν„°νŽ˜μ΄μŠ€ ν™œμš©ν•˜κΈ°

βœ… λ³€μˆ˜μ— μΈν„°νŽ˜μ΄μŠ€ ν™œμš©

interface User {
  age: number;
  name: string;
}

let seojin: User = {
  age: 25,
  name: 'μ„œμ§„'
}

βœ… ν•¨μˆ˜μ— μΈν„°νŽ˜μ΄μŠ€ ν™œμš©

interface User {
  age: number;
  name: string;
}

// 이 ν•¨μˆ˜λŠ” 항상 User μΈν„°νŽ˜μ΄μŠ€ ν˜•μ‹μ„ μ€€μˆ˜ν•˜λŠ” λ°μ΄ν„°λ§Œμ„ νŒŒλΌλ―Έν„°λ‘œ λ°›κ² λ‹€ !
function getUser(user: User) {
  console.log(user);
}

const tacoLeader = {
  name: '혜인',
}

const tacoGirl1 = {
  name: 'ν˜Έμ€',
  age: 22
}

getUser(tacoGirl1);  // ⭕️

// age 속성 μ—†μ–΄μ„œ μ—λŸ¬ λ°œμƒ !
getUser(tacoLeader); // ❌

🚨 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ€€μˆ˜ν•˜μ§€ μ•ŠλŠ” 값을 νŒŒλΌλ―Έν„°λ‘œ λ„£μœΌλ©΄ μ—λŸ¬ λ°œμƒ!

βœ… ν•¨μˆ˜μ˜ 슀팩(ꡬ쑰,κ·œμΉ™)에 μΈν„°νŽ˜μ΄μŠ€ ν™œμš©

// SumFunction을 νƒ€μž…μœΌλ‘œ κ°€μ§€λŠ” ν•¨μˆ˜λ“€μ˜ κ·œμΉ™μ€ 이렇닀! 라고 μ •μ˜ν•˜κΈ°
interface SumFunction {
  // (인자: 인자 νƒ€μž… μ •μ˜): λ°˜ν™˜νƒ€μž… μ •μ˜
  (a: number, b: number): number;
}

let sum: SumFunction;
sum = function(a: number, b:number): number {
  return a+b;
}

βœ… λ°°μ—΄ 인덱싱

숫자둜 μΈλ±μ‹±λœ λ°°μ—΄κ³Ό μœ μ‚¬ν•˜κ²Œ λ™μž‘

interface StringArray{
  // λ°°μ—΄μ˜ Index(number νƒ€μž…)에 μ ‘κ·Όν•  λ•Œ ν•΄λ‹Ή μΈλ±μŠ€μ— μœ„μΉ˜ν•œ 값은 string type이닀.
  [index: number]: string;
}

let arr: StringArray = ['a', 'b', 'c']; // ⭕️

arr[0] // 'a'

// string νƒ€μž…μ„ μ§€μ •ν•΄μ•Ό ν•˜λŠ”λ° Numberλ₯Ό μ§€μ •ν•˜λ©΄ μ—λŸ¬ λ°œμƒ
arr[0] = 10; // ❌ 

🚨 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ€€μˆ˜ν•˜μ§€ μ•ŠλŠ” νƒ€μž…μ„ μ§€μ •ν•˜λ©΄ μ—λŸ¬ λ°œμƒ

βœ… 객체 인덱싱

λ¬Έμžμ—΄λ‘œ μΈλ±μ‹±λœ 객체와 μœ μ‚¬ν•˜κ²Œ λ™μž‘

interface StringRegexDictionary {
  // [key의 νƒ€μž…: string]: value의 νƒ€μž…: μ •κ·œν‘œν˜„μ‹
  [key: string]: RegExp;
}

let obj: StringRegexDictionary = {
  cssFile: /\.css$/, // ⭕️
  jsFile: /\.js$/, // ⭕️
}

// RegExp νƒ€μž… μ§€μ •ν•΄μ•Ό ν•˜λŠ”λ° string μ§€μ •ν•˜λ©΄ μ—λŸ¬ λ°œμƒ
obj['tsFile'] = 'λ‹€ν˜„'  // ❌

🚨 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ€€μˆ˜ν•˜μ§€ μ•ŠλŠ” νƒ€μž…μ„ μ§€μ •ν•˜λ©΄ μ—λŸ¬ λ°œμƒ

βœ… 인덱슀 μ‹œκ·Έλ‹ˆμ³

μ†μ„±μ˜ 이름을 μ§€μ •ν•˜μ§€ μ•Šκ³  νƒ€μž…λ§Œ 정해두고 μ‚¬μš©ν•˜κΈ°!
-> μžλ™μ™„μ„±μ΄ μ μš©λ˜μ§€ μ•ŠμœΌλ‹ˆ μ§€μ •ν•  속성이 ν™•μ‹€ν•˜μ§€ μ•Šμ„ κ²½μš°μ—λ§Œ μœ λ™μ μœΌλ‘œ μ‚¬μš©ν•  것!

interface Closet {
	type: string;
	size: number;
	[property : string ] : string | number;
}


let myCloset: Closet {
	type: 'pants',
	size: 'S',
	color: 'black', 
	when: 2023
}

πŸ“ μΈν„°νŽ˜μ΄μŠ€ ν™•μž₯ (상속)

interface HoneyWeb {
  name: string;
  age: number;
}

interface TacoGirls extends HoneyWeb{
  language: string;
}

let subin: TacoGirls = { // ⭕️
  name: '수빈',
  age: 22,
  language: 'ts'
}

// HoneyWeb을 ν™•μž₯ λ°›μ•˜κΈ° λ•Œλ¬Έμ— HoneyWeb의 속성도 λͺ¨λ‘ κ°€μ§€κ³  μžˆμ–΄μ•Ό 함!
let sooyeon: TacoGirls = {
  language: 'ts' // ❌
}

🚨 ν™•μž₯ν•œ μΈν„°νŽ˜μ΄μŠ€μ˜ 속성듀을 λͺ¨λ‘ ν¬ν•¨ν•˜μ§€ μ•ŠμœΌλ©΄ μ—λŸ¬ λ°œμƒ

profile
🫧 ☁️ πŸŒ™ πŸ‘©πŸ»β€’πŸ’» 🌿 🐱 πŸ–± 🍟 πŸš€ ⭐️ 🧸 πŸ€ πŸ’—

3개의 λŒ“κΈ€

comment-user-thumbnail
2023λ…„ 11μ›” 1일

νƒ€μž…μŠ€ν¬λ¦½νŠΈμ—μ„œ νŒŒλΌλ―Έν„° 갯수의 μ œν•œμœΌλ‘œ 인해 μ˜΅μ…”λ„ νŒŒλΌλ―Έν„°λ₯Ό ν™œμš©ν•˜κ³€ ν•˜λŠ”λ°, 항상 μ‚¬μš©ν•˜λ©΄μ„œ μ˜΅μ…”λ„ ν”„λ‘œνΌν‹°λ₯Ό 많이 μ‚¬μš©ν•˜κ²Œ 되면 그에 λŒ€ν•œ 단점은 μ—†μ„κΉŒ? λΌλŠ” 고민을 많이 ν•˜κΈ°λ„ ν–ˆλ˜ κ±° κ°™μ•„μš”

많이 검색해 λ΄€μ§€λ§Œ 직접적인 언급이 μžˆλŠ” 쒋은 글은 아직 λͺ» μ°Ύμ•˜λŠ”λ°, μ œκ°€ ν”„λ‘œμ νŠΈλ₯Ό ν•˜λ©΄μ„œ λŠλ‚€ 단점은 μ΄κ²ƒλ“€μ΄μ—ˆμ–΄μš”.

μ½”λ“œ 가독성 κ°μ†Œ: λ§Žμ€ μ˜΅μ…”λ„ νŒŒλΌλ―Έν„°λ₯Ό μ‚¬μš©ν•˜λ©΄ ν•¨μˆ˜μ˜ μ‹œκ·Έλ‹ˆμ²˜κ°€ λ³΅μž‘ν•΄μ§ˆ 수 μžˆμ–΄ μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κΈ° μ–΄λ €μ›Œμ§ˆ 수 있음.

μ‹€μˆ˜λ‘œ undefined 전달: μ˜΅μ…”λ„ νŒŒλΌλ―Έν„°λ₯Ό 많이 μ‚¬μš©ν•˜λ©΄ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ μ‹€μˆ˜λ‘œ undefinedλ₯Ό 전달할 수 있으며 μ΄λŠ” λŸ°νƒ€μž„ μ—λŸ¬μ˜ 원인이 될 수 있음.

μœ μ§€λ³΄μˆ˜ 어렀움: μ½”λ“œκ°€ λ³΅μž‘ν•΄μ§€λ©΄ μœ μ§€λ³΄μˆ˜κ°€ μ–΄λ €μ›Œμ§ˆ 수 있으며, νŒŒλΌλ―Έν„°μ˜ 의미λ₯Ό νŒŒμ•…ν•˜κΈ° μ–΄λ €μšΈ 수 있음.

사싀 큰 단점은 μ•„λ‹ˆμ§€λ§Œ ν•„μš” μ΄μƒμœΌλ‘œ 많이 μ‚¬μš©ν•˜κ²Œ 되면 μœ„μ™€κ°™μ€ 단점이 μƒκΈ°λ”λΌκ³ μš”.
이런 점듀도 λ‹€μ‹œ ν•œλ²ˆ μƒκ°ν•˜κ²Œ λ˜μ—ˆλ˜ 쒋은 아티클 λ‚΄μš©μ΄μ—ˆλ˜ κ±° κ°™μŠ΅λ‹ˆλ‹€!!!!

각각의 μž₯점듀도 ν•¨κ»˜ λ‚˜μ—΄ν•΄μ£Όμ…”μ„œ λ„ˆλ¬΄ μ’‹μ•˜μ–΄μš” :-)
제 λŒ“κΈ€μ—μ„œλ„ 쒋은 μΈμ‚¬μ΄νŠΈλ₯Ό μ–»μ–΄κ°€μ…¨μœΌλ©΄ μ’‹κ² λŠ” λ§ˆμŒμž…λ‹ˆλ‹€ γ…Žγ…Žγ…Ž

λ‹΅κΈ€ 달기
comment-user-thumbnail
2023λ…„ 11μ›” 1일

μΈν„°νŽ˜μ΄μŠ€μ— μ™œ μ‚¬μš©ν•΄μ•Όν•˜λŠ”μ§€ μ½”λ“œλ₯Ό 톡해 λ³΄μ—¬μ£Όμ…”μ„œ μ΄ν•΄ν•˜κΈ° μ‰¬μ› μ–΄μš”, 글을 읽고 μΈν„°νŽ˜μ΄μŠ€μ— λŒ€ν•΄ 더 μžμ„Ένžˆ μ°Ύμ•„λ³΄μ•˜μ–΄μš”

λ°˜λ³΅λ˜λŠ” νƒ€μž…λ“€μ„ μΈν„°νŽ˜μ΄μŠ€λ‘œ μ •μ˜ν•˜κ³  μ‚¬μš©ν•  수 μžˆλ‹€κ³  μ μ–΄μ£Όμ…¨λŠ”λ° type μ•¨λ¦¬μ–΄μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” 방법도 μžˆλ‹€κ³  ν•©λ‹ˆλ‹€!

상속을 톡해 ν™•μž₯이 ν•„μš”ν•˜λ‹€λ©΄ νƒ€μž… μ•¨λ¦¬μ–΄μŠ€λ³΄λ‹€λŠ” μΈν„°νŽ˜μ΄μŠ€κ°€ 유리 ν•˜μ§€λ§Œ μΈν„°νŽ˜μ΄μŠ€λ‘œ ν‘œν˜„ν•  수 μ—†κ±°λ‚˜ μœ λ‹ˆμ˜¨ λ˜λŠ” νŠœν”Œμ„ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€λ©΄ νƒ€μž… μ•¨λ¦¬μ–΄μŠ€λ₯Ό μ‚¬μš©ν•œλŠ” 편이 μœ λ¦¬ν•˜λ‹€κ³  ν•˜λ„€μš”!

λ‹΅κΈ€ 달기
comment-user-thumbnail
2023λ…„ 11μ›” 1일

이둠 λ°”νƒ•μœΌλ‘œ μƒˆλ‘œμš΄ μ½”λ“œμ˜ˆμ‹œλ₯Ό μ •λ¦¬ν•΄μ£Όμ…”μ„œ λ„ˆλ¬΄ μœ μ΅ν–ˆμŠ΅λ‹ˆλ‹€...πŸ‘πŸ»νŠΉνžˆλ‚˜ λ°°μ—΄ 인덱싱과 객체 인덱싱이 λ„ˆλ¬΄λ„ˆλ¬΄ ν—·κ°ˆλ ΈλŠ”λ° μ½”λ“œλ₯Ό λ³΄λ‹ˆκΉŒ 더 이해가 잘 λ˜λŠ” 것 κ°™μ•„μš”γ… γ…  μ •κ·œν‘œν˜„μ‹λ„ μ†μ„±κ°’μœΌλ‘œ μ§€μ •λœλ‹€λŠ” 사싀 λ˜ν•œ 배우고 κ°‘λ‹ˆλ‹€! 아티클 μ½μœΌλ©΄μ„œ μŠ€ν„°λ””λ•Œ λ°°μ› λ˜ λ‚΄μš© λ‹€μ‹œ λ³΅μŠ΅ν•  수 μžˆμ–΄μ„œ λ„ˆλ¬΄ μ’‹μ•„μš”:)

λ‹΅κΈ€ 달기