-
Notifications
You must be signed in to change notification settings - Fork 0
2week_FE_tech_post_1
ํ์
์คํฌ๋ฆฝํธ๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ๋ณด๋ค๋ณด๋ฉด ํจ์๋ช
<T>(a: T) {...}
๊ณผ ๊ฐ์ด ์์ฑ๋ ์ฝ๋๊ฐ ์ข
์ข
๋ณด์ธ๋ค. ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ํ์
์คํฌ๋ฆฝํธ๋ฅผ ์ฒ์ ์ฐ๋ค ๋ณด๋ ๋ฌด์จ ๋ป์ธ์ง๋ ๋ชจ๋ฅด๊ณ ์ ์จ๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ด์ ์ฐ์ ์ ๋ฌด์ํ ์ฑ๋ก ๊ณ์ํด์ ์ฝ๋๋ฅผ ์์ฑํด ๋๊ฐ๋ค. ๊ทธ๋ฌ๋ค API๋ฅผ ํตํด์ ๋ฐ์ดํฐ๋ฅผ fetchํ๋ ํจ์๋ฅผ ์์ฑํ๋ ค๊ณ ์๋ฃ๋ฅผ ์ฐพ๋ค๋ณด๋ ๋ค์ ํ ๋ฒ ๋ง์ฃผ์น๊ฒ ๋์๋ค.
function sort<T>(item: T[]): T[] {
return item.sort();
}
const nums: number[] = [1, 2, 3, 4];
sort<number>(nums);
์์ sort
ํจ์๋ ๋ฐฐ์ด์ ๋ฐ์์ ํด๋น ๋ฐฐ์ด์ ์ ๋ ฌํ๋ ๊ฐ๋จํ ํจ์์ด๋ค. sort<T>
์์ <T>
๊ฐ ์ ๋ค๋ฆญ ํ์
์ด๋ค. ์ฆ sortํจ์๋ฅผ ์ฌ์ฉํ ๋ ํ์
๋ <T>
๋ก ๋ฐ์์ค๊ฒ ๋๋ค. sort<number>(nums);
๋ผ๋ฉด ์ด๋ฒ์ ํธ์ถ๋ sortํจ์์์ T
๋ number
๊ฐ ๋๋ค. ์ฆ ํจ์๋ ๋ค์๊ณผ ๊ฐ์ด ์๊ฐํ ์ ์๋ค.
function sort(item: number[]): number[] {
return item.sort();
}
์ฆ number๋ฐฐ์ด์ ์
๋ ฅ์ผ๋ก ๋ฐ์ number๋ฐฐ์ด์ ์ถ๋ ฅํ๋ ํจ์๊ฐ ๋๋ ๊ฒ์ด๋ค. ๋ฌผ๋ก ํจ์๋ฅผ ์์ฑํ ๋ ์ฒ์๋ถํฐ any[]
์ ์ฌ์ฉํด๋ ๋๋ค. ํ์ง๋ง any
๋ฅผ ์ฌ์ฉํ๋ฉด ํ์
์คํฌ๋ฆฝํธ์์ ์ปดํ์ผ ์ ํ์
์ ํ์ธํด ์ฃผ์ง ์๋๋ค. ํ์ง๋ง ์ ๋ค๋ฆญ ํ์
์ ์ฌ์ฉํ๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ํ์
์ ํ์ธํด ์ค๋ฅ๋ฅผ ์ก์์ค ์ ์๋ค.
type FetchStatus = 'idle' | 'loading' | 'success' | 'error';
interface FetchResponse<T> {
data: T | null;
error: string | null;
status: FetchStatus;
}
const useFetch = <T>(url: string): FetchResponse<T> => {
const [data, setData] = useState<T | null>(null);
...
return {data};
}
์๋ ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ useFetch๋ผ๋ ์ปค์คํ
ํ
์ ์ผ๋ถ ์ฝ๋์ด๋ค. useFetch๋ ์ ๋ค๋ฆญ ํ์
์ผ๋ก ํ์
<T>
๋ก ๋ฐ๊ณ ๋ฌธ์์ด url์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์์ FetchResponse<T>
๋ผ๋ ํ์
์ returnํ๋ ํจ์์ด๋ค. interface FetchResponse<T>
๋ ๋ํ ๊ฐ์ฒดํํ๋ก data: T | null;
์ ํตํด์ ๊ฐ์ฒด์์ data์ value๋ก๋ Tํ์
์ ๊ฐ ๋๋ null๋ง ๊ฐ์ง ์ ์๋๋ก ํด์ฃผ์๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ๊ฐ useFetch๋ฅผ ์ฌ์ฉํ ๋๋ ์ ๋ค๋ฆญ ํ์ ์ผ๋ก ์ํ๋ ํ์ ์ ๋๊ฒจ์ฃผ๋ฉด ํด๋น ํ์ ์ ๊ฐ์ง๊ณ ๊ฒฐ๊ณผ๋ฅผ returnํด์ฃผ๋ ํํ๋ก ๋์ํ๋ค. ์๋์ ๊ฐ์ด ์ฌ์ฉํด์ API์์ ๋๊ฒจ์ฃผ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก interface๋ฅผ ์ ์ธํด์ฃผ๊ณ ํด๋น interface๋ฅผ useFetch์ ์ ๋ค๋ฆญ ํ์ ์ผ๋ก ๋ ๊ฒจ์ฃผ๋ฉด ๋ฐ์ดํฐ์ ํ์ ์ ๋ฐ์ํด์ ์์ ํ๊ฒ ๋ฐ์ ์ ์๊ฒ ๋๋ค.
interface IProps {
name: string;
age: number;
major: string[];
}
const { data } = useFetch<IProps>('API ์ฃผ์');
console.log(data.name);
console.log(data.age);
function getLen<T>(data: T) {
return data.lenght;
}
์๋ฏธ์๋ ํจ์์ด์ง๋ง ์์๊ฐ์ด ์ด๋ ํ ๋ฐ์ดํฐ์ length๋ฅผ ๊ตฌํ๋ ํจ์๋ฅผ ์์ฑํ๋ค๊ณ ํ์์ ๋ ์์ ๊ฐ์ด ์์ฑํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด ํจ์์ ํ๋ผ๋ฏธํฐ๋ก ๋ค์ด์จ data๋ผ๋ ๊ฐ์ length๋ผ๋ ์์ฑ์ด ์์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ getLen
์ด๋ผ๋ ํจ์๋ฅผ ์ํํ ๋ ๋ฏธ๋ฆฌ length๋ผ๋ ์์ฑ์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด ํ์ํ ๊ฒ์ด extends์ด๋ค.
interface lengthCheck {
length: number;
}
function getLen<T extends lengthCheck>(data: T) {
return data.lenght;
}
์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์ ๋ค๋ฆญ T
ํ์
์ ๋ฐ๋์ lengthCheck
๋ผ๋ interface๋ฅผ ํฌํจํ๋ค๋ ๋ป์ด๋ค. ์ฆ T extends lengthCheck
๋ผ๋ ํ์
์ ๋ฐ๋์ lenght
๋ผ๋ ์์ฑ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ return data.length;
์ด ๊ฐ๋ฅํ๋ค.
๐ป [H6-CaArt] โDone is better than perfectโ ๐ป
- [์ต๊ทํ] Sentry ๋์ ๊ธฐ (feat. ๋ก๊ทธ ๊ด๋ฆฌ)
- [์ต๊ทํ] GPT3.5 ๋ชจ๋ธ์ ํ์ฉํด์ ์ถ์ฒ ๋ฌธ๊ตฌ ์์ฝํ๊ธฐ
- [์ต๊ทํ] ์คํ๋ง์์ OpenAI API ์ฑ๋ฅ ๊ฐ์ ๊ธฐ
- [๊ถ๋ฏผ์] CaArt CI/CD ๊ตฌ์ถ ๊ณผ์
- [๊ถ๋ฏผ์] ์ฑํ๋ฅ ๊ณ์ฐ ๋ก์ง ๊ฐ์ - Index tuning๊ณผ Batch processing
- [์ด์นํ] useReducer, useContext๋ฅผ ์ฌ์ฉํ ์ ์ญ ์ํ ๊ด๋ฆฌ with React, TS
- [์ด์นํ] ํ๋กํ ํ์ ํจํด์ด๋?
- [์ด์นํ] UX ๊ฐ์ ์ ์ํ ์ด๋ฏธ์ง ํ๋ฆฌ๋ก๋ฉ With Promise
- [์์ํ] ํ์ ์คํฌ๋ฆฝํธ ์ ๋ค๋ฆญ์ด๋?
- [๋ฐ์ธ์] Android์ Data Binding: DataBindingUtil vs Binding.inflate
- [๋ฐ์ธ์] DI, Hilt ๋ฝ๊ฐ๊ธฐ
- [๋ฐ์ธ์] Retrofit ๋์ ๊ธฐ
- [๋ฐ์ธ์] 360๋ Spin Image Touble Shooting
- [๊น์ ๋น] ์ปค์คํ ๋ค์ด์ผ๋ก๊ทธ ๊ตฌํ