๐Ÿ‘ฉ‍๐Ÿ’ป Language/TypeScript

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ(TypeScript) - '?' , '!' ์˜ ์˜๋ฏธ๋Š” ๋ฌด์—‡์ผ๊นŒ?

kongmi 2024. 10. 22. 10:19

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํƒ€์ž… ์ •์˜๋ฅผ ๋ณด๋‹ค๋ณด๋ฉด ์ข…์ข… ?๊ณผ !๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์จ์„œ ๊ฐœ๋ฐœํ•˜๋˜ ์ €์—๊ฒŒ๋Š” ์กฐ๊ธˆ์€ ์ƒ์†Œํ•œ ํ‘œํ˜„์‹์ด๋ผ ๊ตฌ์ฒด์ ์œผ๋กœ ๋ฌด์—‡์ธ์ง€ ์ฐพ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค.

 

๊ฐœ๋…

!์™€ ?๋Š” ๋ณ€์ˆ˜๊ฐ€ ๊ฐ’์˜ ์กด์žฌ ์—ฌ๋ถ€์™€ ๊ด€๋ จ๋œ ํ‚ค์›Œ๋“œ๋กœ, ์ฝ”๋“œ์—์„œ ์•ˆ์ •์„ฑ๊ณผ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

!

  • ๊ฐ’์ด null์ด๋‚˜ undefined๊ฐ€ ์•„๋‹˜์„ ํ™•์‹ ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ๋ณ€์ˆ˜์— null์ด๋‚˜ undefined๊ฐ€ ๋“ค์–ด๊ฐˆ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋ฉด ๊ฒฝ๊ณ ๋ฅผ ์ฃผ์ง€๋งŒ, !๋ฅผ ๋ถ™์ด๋ฉด "์ด ๊ฐ’์€ ์ ˆ๋Œ€ null์ด๋‚˜ undefined๊ฐ€ ์•„๋‹ˆ์•ผ! ๋ผ๊ณ  ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ์ „๋‹ฌ(?)ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
let value: string | undefined;
value!; // ์ด ์‹œ์ ์— undefined๊ฐ€ ์•„๋‹˜์„ ๋ณด์žฅํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ undefined์ผ ๊ฒฝ์šฐ ๋Ÿฐํƒ€์ž„์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ

?

  • ๊ฐ’์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ๊ณ  ์—†์„ ์ˆ˜๋„ ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • ๊ฐ์ฒด์˜ ์†์„ฑ ๋˜๋Š” ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์„ ํƒ์ ์ผ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ•ด๋‹น ์†์„ฑ์ด๋‚˜ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์—†์–ด๋„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ) ๊ฐ์ฒด์˜ ์†์„ฑ

interface User {
  name: string;
  age?: number; // ์„ ํƒ์  ์†์„ฑ
}

const user1: User = { name: "Yang" }; // age๋Š” ์„ ํƒ์  ์†์„ฑ์œผ๋กœ ์—†์–ด๋„ ์—๋Ÿฌ x
const user2: User = { name: "Kim", age: 20 };

์˜ˆ์‹œ) ํŒŒ๋ผ๋ฏธํ„ฐ

function greet(name: string, age?: number) {
  console.log(`Name : ${name}`);
  if (age !== undefined) {
    console.log(`Age : ${age}`);
  }
}

greet("Yang"); // O
greet("Kim", 30); // O

์ •๋ฆฌ

  • !๋Š” ๊ฐ’์ด null์ด๋‚˜ undefined๊ฐ€ ์•„๋‹˜์„ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค.
  • ?๋Š” ๊ฐ’์ด ์„ ํƒ์ ์ž„์„ ์˜๋ฏธํ•˜์—ฌ ์—†์„ ์ˆ˜๋„ ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.