Programming (92) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [vue3] pnpm์ผ๋ก ํ๋ก์ ํธ ์์ฑํ๊ธฐ (ft. @tsconfig/node18/tsconfig.json ์ค๋ฅ) pnpm์ผ๋ก vue ํ๋ก์ ํธ ์์ฑํ๊ธฐ vue3 ํ๋ก์ ํธ์ ํจํค์ง ๊ด๋ฆฌ์๋ฅผ pnpm์ผ๋ก ์ ํํ๊ณ ํ๋ก์ ํธ๋ฅผ ์๋ก ์์ฑํด๋ณธ๋ค. ๐ ํ๋ก์ ํธ ์์ฑ $ pnpm create vue ์์ ๊ฐ์ด ํ๋ก์ ํธ ์์ฑ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ค. pnpm create vue@latest ์ ๋์ผํ๊ฒ ์ต์ ๋ฒ์ ผ์ vue๋ฅผ ์ฌ์ฉํ๋ค. ๋ง์ฝ, ํน์ ๋ฒ์ ผ์. vue๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด "pnpm create vue@์ํ๋๋ฒ์ ผ" ์ผ๋ก ๋ช ๋ น์ด๋ฅผ ์์ ํด์ค๋ค. ๐ ์ต์ ์ ํํ๊ธฐ โ Project name: … โ Add TypeScript? … No / Yes โ Add JSX Support? … No / Yes โ Add Vue Router for Single Page Application development? … No / Yes โ Add Pinia.. [vue3] pnpm ์ค์น (ft. errno -13 ์ค๋ฅ) pnpm ์ค์นํ๊ธฐ vue ํ๋ก์ ํธ์ ํจํค์ง ๊ด๋ฆฌ๋ฅผ npm -> pnpm์ผ๋ก ๋ณ๊ฒฝํ๊ณ ์ ํ๋ค. pnpm์ npm๋ณด๋ค ์ฌ๋ฌ ๋ฐฉ๋ฉด์์ ํฅ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค๊ณ ํ๋ค.(์ฉ๋, ์บ์ ์ฉ๋ ์ ์ฝ ๋ฑ) ํ์ฌ์ ์ ๊ท ํ๋ก์ ํธ๋ ํจ์งํค ๊ด๋ฆฌ๋ฅผ pnpm์ ์ฌ์ฉํ๊ณ ์๊ณ ๊ฐ์ธ ํ๋ก์ ํธ๋ pnpm์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ฌ๋ฌ๋ฐฉ๋ฉด์ผ๋ก ๋์์ด ๋ ๋ฏ ํ๋ค. ๐ ์ค์น ์ค๋น๋ฌผ pnpm์ ์ค์นํ๊ธฐ ์ํด์๋ Node.js์ ๋ฒ์ ผ์ด 18.0 ์ด์์ด์ฌ ํ๋ค๊ณ ํ๋ค. $ node --version ํฐ๋ฏธ๋์์ ์ ๋ช ๋ น์ด๋ฅผ ์ณ์ ๋ ธ๋ ๋ฒ์ ผ์ ํ์ธํ์.($๋ ๋ช ๋ น์ด๋ฅผ ์๋ฏธํ๋ $๋ ๋นผ๊ณ ํ์ดํ ํด์ค์ผํ๋ค.) ๊ฒฐ๊ณผ๊ฐ์ด v18.0.0 ์ด์์ด๋ผ๋ฉด ์ค์น ๊ฐ๋ฅํ ๊ฒ์ด๋ค. ๐ ์ค์น ํ๊ธฐ $ npm install -g pnpm ํฐ๋ฏธ๋์์ pmpm์ ์ค์นํ๋ ๋ช ๋ น์ด๋ฅผ.. [Vue3] TypeError: Cannot read properties of undefined (reading '$store') ํด๊ฒฐ Vue3 TypeError: Cannot read properties of undefined (reading '$store') ํด๊ฒฐํ๊ธฐ Vuex์ store ์ฌ์ฉํ ๋ ์์ฃผ ๋ณผ ์ ์๋ ์ค๋ฅ ์ ๋๋ค. vue2์ vue3์ store์ ์ฌ์ฉ๋ฒ์ด ๋ฌ๋ผ์ ์ผ์ด๋ ์ ์๋ ์ค๋ฅ ์ ๋๋ค. 1. main.js ํ์ธ vue2์์ vue3๋ฅผ ์ค๋ฉด์ main.js์ store๋ฅผ ์ฌ์ฉํ๊ณ ํ๋ ๋ช ์๋ฒ์ด ๋ฐ๋์๊ธฐ์ ๋ง์ด ๋๋ ์ค๋ฅ ์ ๋๋ค. ํด๊ฒฐ๋ฒ import { createApp } from 'vue' import App from './App.vue' import { store } from './store/store' createApp(App) .use(store) .mount('#app') main.js store.js๋ฅผ .. [Vue .js] Composition API : props, emits ์ฌ์ฉ๋ฒ composition API porps, emits ์ฌ์ฉ๋ฒ Vue์ ์ถ๊ฐ๋ composition API๋ Vue2์์์ option API๋ณด๋ค ์ปดํฌ๋ํธ๋ฅผ ์กฐ๊ธ ๋ ๋ ๋ฆฝ์ ์ผ๋ก ๋ง๋ค๊ธฐ ์ ๋ฆฌํ๋ค.๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ(์์ ์ปดํฌ๋ํธ๋ ๋ฐ์ดํฐ ์ปจํ ์ด๋ ์ญํ ๋ก ๋ฐ์ดํฐ๋ฅผ ์ง์ ์กฐ์, ํ์ ์ปดํฌ๋ํธ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ์ง ์๊ณ ํํ๋ง์ ๋ด๋น)๋ฅผ ํตํด ์ปดํฌ๋ํธ์ ์ฌ์ฌ์ฉ๋ฅ ์ ๋์ผ ์ ์๋ค.props์ emits ์ฌ์ฉ๋ฒ ์์์๋์์๋ App.vue ์์์ TodoList.vue ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. App.vue ์์ ์ปดํฌ๋ํธ์ธ App.vue์์ ํ์ ์ปดํฌ๋ํธ์๊ฒ datadls props๋ฅผ ๋ด๋ ค์ฃผ๊ณ ํ์ ์ปดํฌ๋ํธ์๊ฒ ์ด๋ฒคํธ์ธ emits์ ๋ฐ๋๋ค. ํ์์ปดํฌ๋ํธ(TodoList.vue)์ todoItemsPro.. [Tistory Tip] ๊ด๋ฆฌ์ ํ์ด์ง ๋ค์ด๊ฐ๊ธฐ ํฐ์คํ ๋ฆฌ์์ ๊ธ์ ์์ฑํ๋ค ๋ณด๋ฉด ๊ด๋ฆฌ์ ํ์ด์ง์ ๋ค์ด๊ฐ๋ ๋ฒํผ์ด ์๋ค๋๊ฑธ ์์๋ค. ๋ด๊ฐ ๋ชป ์ฐพ๋ ๊ฒ์ผ ์๋ ์์ง๋ง, ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ URL๋ก ๋ค์ด๊ฐ๋๊ฒ ๊ด๋ฆฌ์ ํ์ด์ง์ง๋ ๋ณธ์ธ์ Tistory ์ฃผ์ ๋๋ฉ์ธ์ /manage ๋ฅผ ์ ๋ ฅํด์ ๋ค์ด๊ฐ๋ ๊ฒ ์์ https://reinvestment.tistory.com/manage ๋ด Tistory ๋ธ๋ก๊ทธ ์ฃผ์๋ https://reinvestment.tistory.com/ ์ด๋ค. ๊ทธ ๋ค์ /manage ๋ค ๋ถ์ฌ์ ๋ค์ด๊ฐ์ฃผ๋ฉด ๋๋ค. ๋ฌผ๋ก , ๋ก๊ทธ์ธ์ด ๋์ด์๋ ์ํ์ฌ์ผํ๋ค. [Swift Tutorial] Swift UI Layout ์์ ์์ญ / ํ๋ฉด ์ ์ฒด ์ฑ์ฐ๊ธฐ # Swift ์ฌ๋ฐฑ ์์ ๊ธฐ / ํ๋ฉด ์ ์ฒด ์ฑ์ฐ๊ธฐ 1. ์ ์ฝ ์กฐ๊ฑด ์ถ๊ฐํ๊ธฐ ์ถ๊ฐํ view๋ฅผ ์ ํ ํ ์ค๋ฅธ์ชฝ ํ๋จ์ ์ ์ฝ์ฌํญ ๋ฒํผ์ ์ถ๊ฐํด์ view์ ์ ์ฝ์ฌํญ์ ์ถ๊ฐํ๋ค. ๋ถ์ ํ์ดํ๋ก ํ์๋์ด์๋ ์ ์ ํด๋ฆญํ์ฌ ๋ค๋ฅธ view์ ์๋์ ์ธ ๊ฑฐ๋ฆฌ ์ ์ฝ์ ๋ง๋ ๋ค. 4๋ฉด์ ๊ฐ์ ์ ๋ ฅํ๋ฉด ๊ฑฐ๋ฆฌ ์ ์ฝ์ ๋ง๋ค ์ ์๋ค. (์ ์ฌ์ง์ ๊ฑฐ๋ฆฌ ์ ์ฝ์ 0์ผ๋ก ๋ง๋ฆ) ๊ฑฐ๋ฆฌ ์ ์ฝ์ 0์ผ๋ก ํ์์๋ ์ฌ๋ฐฑ์ด ์๊ธด ์ด์ ๋ ๊ฑฐ๋ฆฌ ์ ์ฝ์ด ์๋จ์ ๋ ธ์น๊ฐ ์คํฌ๋กค ๋ฐ๊ฐ ํฌํจ๋์ด์๋ ์์ ์์ญ(Safe area)๊ณผ ์ด๋ค์ก๊ธฐ ๋๋ฌธ์ด๋ค. ํ๋์ view๋ฅผ ์ ์ฒด ํ๋ฉด์ผ๋ก ์ฑ์ฐ๊ธฐ ์ํด์๋ ์ด๋ฌํ ์ ์ฝ์ฌํญ์ safe area๊ฐ ์๋ ์ ์ฒด view๋ก ๋ง์ถฐ์ฃผ๋ฉด ๋๋ค. 2. ์ ์ฝ ์ฌํญ ๊ฐ์ฒด ๋ฐ๊พธ๊ธฐ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ผ์ชฝ view controller์์ cons.. [Swift Tutorial] Swift ๋์ ์์ฑ, ๋ฐฐ์ด ๋๋ค ์ ๊ทผ Swift ๋์ ์์ฑํ๊ธฐ Swift๋ ์ ์, ์ค์, ๋ ผ๋ฆฌํ ํ์ ์ random ํจ์๋ฅผ ์ด์ฉํด์ ๋์๋ฅผ ์์ฑํ ์ ์๋ค. //๋์ ์์ฑ Int.random(in: 0...10) //0~10 ์ ์ ๋๋ค(0, 10 ํฌํจ) Int.random(in: 0.. [Swift Tutorial] Swift print ๋ฌธ ์์ ์์ ๋ฐ ๋ณ์ ๋ฃ๊ธฐ Swift print๋ฌธ ๋ฌธ์์ด ์์ ์์ ๋ฐ ๋ณ์ ๋ฃ๊ธฐ Swift์ ๊ฒฝ์ฐ, Java, JavaScript, python ๋ฌธ์์ด ์ฌ์ด์ + ๋ฅผ ์ด์ฉํ์ฌ ์์์ด๋ ๋ณ์๋ฅผ ์ฝ์ ํ ์ ์๋ค. ๋์ , ๋ฌธ์์ด ์์ \([์์ ๋ฐ ๋ณ์]) ์ฒ๋ผ ์ญ์ฌ๋์ฌ ๊ดํธ ์์ ๊ฐ์ด๋ ์์์ ์ง์ ๋ฃ์ด์ ์ฌ์ฉํ ์ ์๋ค. // ์์ ์ง์ ์ ๋ ฅ print("1 + 1 = \(1+1)") //๋ณ์ ์ฝ์ var result = 3 print("1 + 2 = \(result)") ์ด์ 1 ยทยทยท 3 4 5 6 7 8 9 ยทยทยท 12 ๋ค์