React Native๋ก ์ฑ์ ๋ง๋ค๋ค ๋ณด๋ฉด ์ฒ์์๋ components
, screens
์ ๋๋ง ์์ด๋ ์ถฉ๋ถํ๋ค๊ณ ์๊ฐํ๋ค.
๊ทธ๋ฐ๋ฐ ํ๋ก์ ํธ๊ฐ ์ปค์ง๊ณ ํ์ผ์ด ๋ง์์ง๋๊น, ์ ์ ๊ตฌ์กฐ๊ฐ ์์ผ๊ฐ๊ธฐ ์์ํ๋ค.
์ฒ์์ ๊ด์ฐฎ์๋๋ฐ,
๊ทธ๋์ ๊ด์ฌ์ฌ ๋จ์๋ก ๊ตฌ์กฐ๋ฅผ ์ ๋ฆฌํด๋ณด๊ธฐ๋ก ํ๋ค.
์ด๋ฒ ๊ธ์ ์ค์ ๋ก ์ ์ฉํ๋ฉด์ ์ป์ ํด๋ ๊ตฌ์กฐ ์ค๊ณ ์ ๋ต๊ณผ ๊ทธ ๊ฒฝํ์ ์ ๋ฆฌํ ๊ฒ์ด๋ค.
ํญ๋ชฉ | ์ค๋ช |
---|---|
์ ์ง๋ณด์ | ํ์ํ ํ์ผ์ ๋ฐ๋ก ์ฐพ์ ์ ์์ด์ผ ์ ์ง๋ณด์๊ฐ ํธํ๋ค |
ํ์ | ๊ตฌ์กฐ๊ฐ ์ ๋ฆฌ๋ผ ์์ด์ผ ํ์์ด ๊ธ๋ฐฉ ์ดํดํ๊ณ ๊ฐ์ด ์์ ํ ์ ์๋ค |
ํ์ฅ์ฑ | ๊ธฐ๋ฅ์ด ๋ง์์ ธ๋ ๊ตฌ์กฐ๊ฐ ๋ฌด๋์ง์ง ์๋๋ค |
๊ด์ฌ์ฌ ๋ถ๋ฆฌ | ๋ก์ง, UI, ์ํ ๋ฑ์ด ์์ด์ง ์๊ณ ๋ช ํํด์ง๋ค |
src/
โโโ assets/ # ์ด๋ฏธ์ง, ํฐํธ ๋ฑ ์ ์ ๋ฆฌ์์ค
โโโ components/ # ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ณตํต UI ์ปดํฌ๋ํธ
โโโ screens/ # ํ์ด์ง ๋จ์ ์ปดํฌ๋ํธ
โโโ hooks/ # ์ปค์คํ
ํ
โโโ navigation/ # ๋ผ์ฐํ
๊ด๋ จ ์ค์
โโโ services/ # API ํธ์ถ, ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฐ๋
โโโ store/ # ์ํ ๊ด๋ฆฌ (Zustand, Redux ๋ฑ)
โโโ utils/ # ์ ํธ ํจ์
โโโ constants/ # ์์, ์ฌ๋ฐฑ, ๊ณตํต ์คํ์ผ ๊ฐ
โโโ types/ # ํ์
์คํฌ๋ฆฝํธ ํ์
์ ์
ํ๋ก์ ํธ ๊ท๋ชจ์ ํ ์ํฉ์ ๋ฐ๋ผ ์กฐ๊ธ์ฉ ๋ฌ๋ผ์ง์ง๋ง,
์ค์ํ ๊ฑด ๊ธฐ๋ฅ๋ณ์ด ์๋๋ผ ์ญํ ๋ณ๋ก ๋๋๋ ๊ฒ์ด ๊ธฐ์ค์ด ๋์ด์ผ ํ๋ค.
ํด๋ | ์ฉ๋ |
---|---|
components/ | ์ฌ๋ฌ ํ๋ฉด์์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ UI ์กฐ๊ฐ๋ค |
screens/ | ํ์ด์ง ๋จ์ ์ปดํฌ๋ํธ (ํ, ๋ก๊ทธ์ธ ๋ฑ) |
hooks/ | ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปค์คํ ํ |
services/ | axios, Firebase ๋ฑ ์ธ๋ถ API ํธ์ถ ๊ด๋ จ |
store/ | ์ ์ญ ์ํ ๊ด๋ฆฌ ๋ก์ง |
constants/ | ์์, ํฐํธ, ๊ฐ๊ฒฉ ๋ฑ ์ ์ญ ์คํ์ผ ์์ |
types/ | ํ์ ์คํฌ๋ฆฝํธ ํ์ ์ ์ (interface, enum ๋ฑ) |
๋ถ๋ฅ ๋ฐฉ์ | ์ค๋ช | ์์ |
---|---|---|
๊ด์ฌ์ฌ ๊ธฐ์ค | ์ญํ ์ ๋ฐ๋ผ ๋๋๋ ๋ฐฉ์ | components , hooks , store , services ๋ฑ |
๊ธฐ๋ฅ ๊ธฐ์ค | ๊ธฐ๋ฅ ๋จ์๋ก ๋ชจ๋ํ | Home , Login , Search ๋ฑ |
๋ณดํต์ ๋์ ํผํฉํด์ ์ผ๋ค. ์๋ฅผ ๋ค์ด
screens/Home
ํด๋ ์์ ํด๋น ํ๋ฉด์์๋ง ์ฐ๋ ์ปดํฌ๋ํธ๋ ํ ์ ๊ฐ์ด ๋ฃ๋ ๋ฐฉ์์ด ์์ฐ์ค๋ฌ์ ๋ค.
components/
โโโ Button/
โโโ index.tsx
โโโ styles.ts
โโโ test.tsx
์คํ์ผ, ํ ์คํธ, ๊ตฌํ์ ํ ํด๋ ์์ ๋ชจ์๋๋ฉด ๊ตฌ์กฐ๊ฐ ๊น๋ํด์ง๊ณ ๊ด๋ฆฌ๊ฐ ์ฌ์์ง๋ค.
services/
๋ก ๋ถ๋ฆฌํ๋ค์ปดํฌ๋ํธ ์์ fetch
๊ฐ์ API ํธ์ถ์ ๋ฃ์ผ๋ฉด ํ
์คํธ๋ ์ด๋ ค์์ง๊ณ ์ฌ์ฌ์ฉ๋ ํ๋ค์ด์ก๋ค.
์๋น์ค ๊ณ์ธต์ผ๋ก ๋ถ๋ฆฌํ๋ ์ ์ง๋ณด์๊ฐ ํจ์ฌ ์ฌ์์ก๋ค.
store/
์ ์ ๋ฆฌํ๋คuseUserStore
, useThemeStore
์ฒ๋ผ ๋ค์ด๋ฐ์ ํต์ผํ๊ณ ์ญํ ๋ณ๋ก ์ ๋๋ ๋๋ฉด ์ฐพ๊ธฐ๋ ์ฝ๊ณ ํ์ฅ๋ ํธํ๋ค.
constants/
๋ก ๋บ๋ค์์, ์ฌ๋ฐฑ, ํฐํธ ํฌ๊ธฐ ๊ฐ์ ๊ฐ๋ค์ด ์ฌ๊ธฐ์ ๊ธฐ ํผ์ ธ ์์ผ๋ฉด ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ด๋ ต๋ค.
์์ํํด๋๋ฉด ๋คํฌ๋ชจ๋ ์ ์ฉ์ด๋ ๋ฆฌ๋์์ธ ์์๋ ์์ด ๋ง์ด ์ ๊ฐ๋ค.
// src/constants/colors.ts
export const COLORS = {
primary: '#007bff',
background: '#ffffff',
text: '#333333',
};
// src/hooks/useKeyboard.ts
import { useEffect, useState } from 'react';
import { Keyboard } from 'react-native';
export function useKeyboardVisible() {
const [isVisible, setVisible] = useState(false);
useEffect(() => {
const show = Keyboard.addListener('keyboardDidShow', () => setVisible(true));
const hide = Keyboard.addListener('keyboardDidHide', () => setVisible(false));
return () => {
show.remove();
hide.remove();
};
}, []);
return isVisible;
}
์ด๋ฐ์๋ ๊ทธ๋ฅ components
, pages
, utils
์ด๋ ๊ฒ๋ง ๋๋ด๋ค.
๊ทธ๋ ๊ฒ ๋ช ์ฃผ ๊ฐ๋ฐํ๊ณ ๋๋ ์ ์ ๊ตฌ์กฐ๊ฐ ๋ณต์กํด์ก๊ณ ,
API ํธ์ถ ๋ก์ง์ด UI ์์ ์์ฌ ์์ด์ ์ฌ์ฌ์ฉ๋ ์ ๋๊ณ , ํ
์คํธ๋ ์ด๋ ค์์ก๋ค.
๋ฆฌํฉํ ๋ง์ ํ๋ฉด์ ๊ตฌ์กฐ๋ฅผ ์ ๋ฆฌํ๊ธฐ ์์ํ๊ณ ,
๊ทธ๋ ๊ฒ ๋ฐ๊พธ๊ณ ๋๋ ์ ์ง๋ณด์๋ ์ฌ์์ก๊ณ ,
ํ์
ํ ๋๋ ์ด๋์ ์์
ํด์ผ ํ ์ง ๋ฐ๋ก ์ ์ ์์ด์ ํจ์จ์ด ํ ์ฌ๋ผ๊ฐ๋ค.
๐ฆ ํด๋ ๊ตฌ์กฐ๋ ๋จ์ํ ์ ๋ฆฌ์ ๋ฌธ์ ๊ฐ ์๋๋ผ, ํ๋ก์ ํธ๋ฅผ ํจ๊ป ์ดํดํ๋ ๋ฐฉ๋ฒ์ด๋ค.