โœ๐Ÿป [Code Camp_TIL] 16์ผ์ฐจ: classํ˜• ์ปดํฌ๋„ŒํŠธ, ์ปดํฌ๋„ŒํŠธ ์ƒ๋ช…์ฃผ๊ธฐ, open-API

code_Jยท2023๋…„ 4์›” 19์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
23/41
post-thumbnail

classํ˜• ์ปดํฌ๋„ŒํŠธ


class๋ž€?

class๋ž€ ๋ฌผ๊ฑด์„ ๋งŒ๋“œ๋Š” ์„ค๋ช…์„œ๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. class ์•ˆ์— ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

const date = new Date()
// date๋Š” ๊ฐ์ฒด(instance)

	date.getFullYear()
    date.getMonth()
    date.getDate()

์œ„์˜ ์ฝ”๋“œ์—์„œ getFullYear, getMonth, getDate๋Š” ๋ฉ”์„œ๋“œ๋ผ๊ณ  ํ•œ๋‹ค. new Date()๋Š” ๋‚ด์žฅ๊ฐ์ฒด์ด๋‹ค.


ํด๋ž˜์Šคํ˜•์œผ๋กœ ๋ฐ”๊พธ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

class Date {
  getFullYear(){
    // ์—ฐ๋„ ์ถ”์ถœ ๊ฐ€๋Šฅ
  }
  getMonth(){
    // ์›” ์ถ”์ถœ ๊ฐ€๋Šฅ
  } 
  getDate(){
    // ์ผ ์ถ”์ถœ ๊ฐ€๋Šฅ
  }
}

ํด๋ž˜์Šค์—์„œ ํ•จ์ˆ˜์™€ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ• ๋•Œ๋Š” function, let, const๋ฅผ ๋ถ™์ด์ง€ ์•Š๋Š”๋‹ค. ๋˜ํ•œ, ์œ ์‚ฌํ•œ ๊ฒƒ๋“ค์„ ํ•˜๋‚˜์˜ class์— ๋ชจ์•„์„œ ๊ทธ๋ฃนํ•‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ๊ทธ๋ฃนํ•‘ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP: Objective Oriented Programming)์ด๋ผ๊ณ  ํ•œ๋‹ค.


class ์ปดํฌ๋„ŒํŠธ ์ƒ๋ช…์ฃผ๊ธฐ(life cycle)

์ปดํฌ๋„ŒํŠธ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ž€, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— ๋‚˜ํƒ€๋‚˜๊ณ  ์—…๋ฐ์ดํŠธ ๋˜๊ณ , ์‚ฌ๋ผ์ง€๊ฒŒ ๋  ๋•Œ ํ˜ธ์ถœ๋˜๋Š” method์ด๋‹ค.

  1. ๊ทธ๋ฆฌ๊ธฐ -> render
  2. ๊ทธ๋ฆฌ๊ณ  ๋‚œ ๋’ค -> componentDidMount
  3. ๊ทธ๋ฆฌ๊ณ  ๋‚œ ๋’ค ๋ณ€๊ฒฝ๋์„ ๋•Œ -> componentDidUpdate
  4. ๊ทธ๋ฆฌ๊ณ  ๋‚œ ๋’ค ์‚ฌ๋ผ์งˆ ๋•Œ -> componentWillUnmount

์˜ˆ๋ฅผ ๋“ค์–ด, input์ฐฝ์— ์žˆ๋Š” ํฌ์ปค์Šค๋ฅผ ๊นœ๋นก๊นœ๋นก๊ฑฐ๋ฆฌ๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ์ธํ’‹์ฐฝ์„ ๊ทธ๋ฆฌ๊ณ  ๋‚œ ๋’ค์— componentDidMount ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํฌ์ปค์Šค๊ฐ€ ๊นœ๋นก๊นœ๋นก๊ฑฐ๋ฆฌ๊ฒŒ ํ•˜๋ฉด ๋œ๋‹ค.


ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ์ƒ๋ช…์ฃผ๊ธฐ hook: useEffect

ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๊ด€๋ จ hook์œผ๋กœ๋Š” useEffect๊ฐ€ ์žˆ๋‹ค. useEffectํ•˜๋‚˜๋กœ class ์ปดํฌ๋„ŒํŠธ ์ƒ๋ช…์ฃผ๊ธฐ์— ๋”ฐ๋ฅธ ํ•จ์ˆ˜๋“ค์„ ์œ ์‚ฌํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

useEffect๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ Œ๋”(ํ™”๋ฉด๊ทธ๋ฆฌ๊ธฐ) ์ดํ›„์— ์‹คํ–‰๋œ๋‹ค.


componentDidMount

// ์˜์กด์„ฑ ๋ฐฐ์—ด[]์— ์•„๋ฌด๊ฒƒ๋„ ๋„ฃ์ง€ ์•Š์œผ๋ฉด Mount์‹œ์—๋งŒ ๋ Œ๋”ํ•ด์ฃผ๊ณ  ๋๋‚˜๊ฒŒ ๋จ(1๋ฒˆ๋งŒ ์‹คํ–‰)

useEffect(()=>{
		console.log("๋งˆ์šดํŠธ ๋จ!!")
	},[])

componentDidUpdate

// ์˜์กด์„ฑ ๋ฐฐ์—ด์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ญ ํ•˜๋‚˜๋ผ๋„ ๋ฐ”๋€Œ๋ฉด ๋ฌด์กฐ๊ฑด ๋‹ค์‹œ ์‹คํ–‰
useEffect(()=>{
		console.log("์ˆ˜์ •ํ•˜๊ณ  ๋‹ค์‹œ ๊ทธ๋ ค์ง!!")
	})


// someState๊ฐ€ ์ˆ˜์ •๋ ๋•Œ๋งŒ ๋ฆฌ๋ Œ๋” ํ•ด์ฃผ๊ธฐ
useEffect(()=>{
		console.log("์ˆ˜์ •ํ•˜๊ณ  ๋‹ค์‹œ ๊ทธ๋ ค์ง!!")
	},[someState])

*componentDidUpdate์™€ ๋น„์Šทํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์ ์€, Mount ๋์„ ๋•Œ๋„ ํ•œ๋ฒˆ ์‹คํ–‰๋œ๋‹ค๋Š” ์ ์ด๋‹ค!


componentWillUnmount

useEffect(()=>{
		console.log("์ˆ˜์ •ํ•˜๊ณ  ๋‹ค์‹œ ๊ทธ๋ ค์ง!!")

		//์ด๋ถ€๋ถ„์ด ๋๋‚˜๊ณ  ์ง„ํ–‰ํ•  ๊ฒƒ๋“ค
		return(()=>{
			console.log("์—ฌ๊ธฐ์„œ ๋‚˜๊ฐˆ๋ž˜์š”!!")
		})

	})

์˜์กด์„ฑ ๋ฐฐ์—ด์˜ ์ค‘์š”์„ฑ!

useEffect๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์˜์กด์„ฑ ๋ฐฐ์—ด์„ ์ ์–ด์ฃผ์ง€ ์•Š๊ณ , return๋„ ์ ์–ด์ฃผ์ง€ ์•Š์•˜๋‹ค๋ฉด ๋ฌดํ•œ๋ Œ๋”๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

๋˜ํ•œ, useEffect๋Š” ์˜์กด์„ฑ ๋ฐฐ์—ด ์ธ์ž์— ๋”ฐ๋ผ ๋ Œ๋”๊ฐ€ ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์˜์กด์„ฑ ๋ฐฐ์—ด์„ ์ž˜ ๋‹ค๋ค„์•ผ ํ•œ๋‹ค. ์ฆ‰, ์˜์กด์„ฑ ๋ฐฐ์—ด์ด ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ํฌ์ธํŠธ๋‹ค!


useEffect ์‚ฌ์šฉ์‹œ ์ฃผ์˜์‚ฌํ•ญ

useEffect ์•ˆ์—์„œ๋Š” ๊ฐ€๊ธ‰์  setState๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ๋œ ์ดํ›„์— setState๋ฅผ ์ ์šฉํ•˜๋ฉด, state๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ณ  ๋ณ€๊ฒฝ๋œ state๋กœ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค์‹œ ๊ทธ๋ ค์ง€๊ฒŒ(๋ฆฌ๋žœ๋”) ๋œ๋‹ค.

๋‹ค์‹œ ๋งํ•ด, useEffect ๋‚ด์—์„œ setState๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋‚˜ ๋ฌดํ•œ๋ฃจํ”„๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ , ์„ฑ๋Šฅ๋ฉด์—์„œ ๋น„ํšจ์œจ์ ์ด๊ฒŒ ๋œ๋‹ค.



๋ฌด๋ฃŒ๋กœ ์ œ๊ณต๋˜๋Š” API: open-API


open-api ๋˜๋Š” public api๋Š” ๋ˆ„๊ตฌ๋“ ์ง€ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ๊ณต๊ฐœ๋œ API๋ฅผ ๋งํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, ๋™๋ฌผ ์ด๋ฏธ์ง€, ๋‚ ์”จ ์ •๋ณด, ๋ฐ”์ด๋Ÿฌ์Šค ์ •๋ณด, ๊ธˆ์œต ์ •๋ณด ๋“ฑ ์—ฌ๋Ÿฌ ์ •๋ณด๋“ค์„ API๋ฅผ ํ†ตํ•ด ๋ฌด๋ฃŒ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜คํ”ˆ API๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋ฉด, ๋ฐฑ์—”๋“œ ์—†์ด๋„ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“œ๋Š”๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค! ์ฐธ๊ณ ๋กœ open-api๋Š” ๋Œ€๋ถ€๋ถ„ rest api๋‹ค.


๋ฌด๋ฃŒ api ์‚ฌ์ดํŠธ ๋ชจ์Œ
https://github.com/public-apis/public-apis

์‚ฌ์ดํŠธ์—์„œ api๋ฅผ ์ด์šฉํ•  ๋•Œ ์ฒดํฌํ•ด์•ผ ํ•  ๊ฒƒ๋“ค!

  • auth: ์ธ์ฆ ํ•„์š”ํ•œ๊ฐ€? ํšŒ์›๊ฐ€์ž… ํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€.
  • HTTPS: ๋ณด์•ˆ์ด ๊ฐ•ํ™”๋˜์–ด ์žˆ๋Š” api ์ธ์ง€? axios.get(https://~). no ๋ผ๊ณ  ๋˜์–ด์žˆ๋Š” ๊ฒƒ์€ http๋กœ ์‚ฌ์šฉ
  • CORS: no๋Š” ๋ณด์•ˆ ๊ด€๋ จ ์„ค์ • ๋ณต์žกํ•œ ํŽธ. yes๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์—ฐ์Šตํ•˜์ž.

useQuery๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ›จ์”ฌ ํšจ์œจ์ . ์บ์‹ฑ์ด ๋œ๋‹ค๋Š” ์žฅ์ ๋„ ์žˆ๋‹ค. axios๋Š” ์บ์‹ฑ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.

profile
Web FE ๊ฐœ๋ฐœ์ž ์ทจ์ค€์ƒ

0๊ฐœ์˜ ๋Œ“๊ธ€