๐๏ธ์ํํธ์จ์ด

๊ฒฝ๋ ฅ ๊ฐ๋ฐ์ ์ํ ์ฒซ ๊ฑธ์ : ์ด๋ค ์ธ์ด๋ฅผ ๊ณ์ ๊ณต๋ถํด ๋๊ฐ์ผํ ๊ฒ์ธ๊ฐ? (Flutter vs React Native)
์๋ ํ์ธ์, ์ ๋ ํ์ฌ ๊ฐ๋ฐ์๋ก ๊ฒฝ๋ ฅ์ ์๊ณ ์๋ ๋ด๋น์ ๋๋ค. ๊ฐ๋จํ๊ฒ ํ์ฌ ์ ๊ฐ ์ฌ์ฉํ๊ณ ์๋ ์ธ์ด์ ๋ํด์ ๋ฆฌ์์นํ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ก์ ๋จ๊ธฐ๊ธฐ ์ํด ์ด ๊ธ์ ์์ฑํฉ๋๋ค. ์ ์คํฌ๋ฆฐ์ท์ Google Trend ๋ก ๊ฐ ํ๋ซํผ์ ๋ฐ๋ฅธ ๊ด์ฌ๋ ๋ณํ๋ฅผ ๋ํ๋ธ ๊ทธ๋ํ์ ๋๋ค. ๊ด์ฌ๋ ์์ 1์์๋ Flutter๊ฐ ์ฐจ์งํ๋ค์. ๊ฐ๋ฐ ๊ธฐ๊ฐ์ด ์งง์์ง ์ ์๊ฒ ์ ์ธํ UI ๋ฐฉ์๊ณผ ํ๋ ์์ํฌ๋ฅผ ๊ตฌ์ฑํ ๋ ์์ ฏ ํธ๋ฆฌ๋ก ์์ฑํ๊ธฐ ๋๋ฌธ์ ๋ณต์กํ UI๋ ๊ตฌํํ๊ธฐ ์ฝ๊ฒ ํ ์ ์๋๊ฒ Flutter ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฌผ๋ก iOS๋ฅผ ์ ์ธํ UI ๋ฐฉ์์ธ SwiftUI๋ ์์ง๋ง, ์ ๊ทผ์ฑ์ด ์ข์ง ์๊ธฐ ๋๋ฌธ์ .. ํจ์คํ๋๋ก ํ๊ฒ ์ต๋๋ค. ์ถํ, IDE์ ๋ค์ํ ํฌ๋ก์ค ํ๋ซํผ์์ ๊ฐ๋ฐ ๊ฒฝํ์ ์๊ฒ ๋๋ค๋ฉด ๊ฒฝ์๋ ฅ์ด ์๋ ๊ฐ๋ฐ์๋ก ์ฑ์ฅํ ๊ฒ ๊ฐ๋ค์. ..
![[Flutter] Dart์์ static ์ญํ ๊ณผ ๋ฉ๋ชจ๋ฆฌ ํ ๋น](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmdWjA%2FbtsHlFVf7ii%2FK5tsbVfwJu8bLiK8GcT0e0%2Fimg.jpg)
[Flutter] Dart์์ static ์ญํ ๊ณผ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
๊ฐ์Dart ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ static ํค์๋๋ ํน์ ํด๋์ค์ ๊ด๋ จ๋ ๋ณ์๋ ๋ฉ์๋๋ฅผ ํด๋์ค ์ธ์คํด์ค๊ฐ ์๋ ํด๋์ค ์์ฒด์ ์ฐ๊ฒฐํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ก ์ธํด ํด๋น ๋ฉ์๋๋ ๋ณ์๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์๊ณ ๋ ์ ๊ทผ์ด ๊ฐ๋ฅํด์. static ๋ณ์๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ ์ธ๊ทธ๋จผํธ์ ์ ์ฅ๋๋ฉฐ, ํ๋ก๊ทธ๋จ์ ๋ผ์ดํ์ฌ์ดํด ๋์ ์ง์๋์ด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ต์ ํํฉ๋๋ค. Dart์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋, ๋ค์๊ณผ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ธ๊ทธ๋จผํธ๊ณผ ๊ด๋ จ๋ฉ๋๋ค. Code Segment : ํ๋ก๊ทธ๋จ์ ์คํ ์ฝ๋๊ฐ ์ ์ฅData Segment : ์ด๊ธฐํ๋ ์ ์ญ ๋ณ์ ๋ฐ static ๋ณ์๊ฐ ์ ์ฅBSS Segment : ์ด๊ธฐํ๋์ง ์์ ์ ์ญ ๋ณ์ ๋ฐ static ๋ณ์๊ฐ ์ ์ฅStack : ํจ์ ํธ์ถ๊ณผ ๋ก์ปฌ ๋ณ์ ์ ์ฅ์ ์ฌ์ฉHeap : ..

Github ๋ธ๋์น ์ ๋ต ์ด๊ฑฐ ํ๋๋ง ์๊ณ ์์ผ๋ฉด ๋๋ค.
์๋ ํ์ธ์. ๊น ํ๋ก์ฐ, Git flow์ ๋ํด ์ด์ผ๊ธฐ ํด๋ณด๋ ค ํฉ๋๋ค. ๊ฐ์ ๊ฐ๋ฐํ ๋ ํ์๊ด๋ฆฌ๋ ์ด๋ป๊ฒ, ์ด๋ค ๋ธ๋์น ์ ๋ต ์ด๋ป๊ฒ ์ฌ์ฉํ๊ณ ๊ณ์ ๊ฐ์? ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ๊ฐ๋ ์ ๋ํด ๊ณต๋ถํ๊ณ , ์ ๋ฆฌํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ฑํด๋ณด๋ ค ํฉ๋๋ค. ์ฐ์ ์ ํฌ๋ ์ค๋ฌด์์ ๊ฐ ํํธ์์ ํผ์ ๊ฐ๋ฐํ๊ณ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์, ๊น ํ๋ก์ฐ ์ ์ฑ ์ด ํ์์์ง๋ง ๊ทธ๋๋ ๊ฐ๋ ์ ์ค์ํ๋๊น์? ใ ใ ใ ์ง์. ๋ธ๋์น ์ ํ์ ํฌ๊ฒ 5๊ฐ์ง๊ฐ ์์ต๋๋ค. 1. ๋ธ๋์น ์ ํ:๊ธฐ๋ฅ ๋ธ๋์น (ํํฌ):๋ค์ ๋ฆด๋ฆฌ์ค๋ฅผ ์ํ ์ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ ๋ธ๋์น.develop ๋ธ๋์น์์ ํ์๋๋ฉฐ ์์ ์๋ฃ ์ develop์ ๋ค์ ๋ณํฉ๋ฉ๋๋ค.๊ฐ๋ฐ ๋ธ๋์น (๋ ธ๋):์๋ก์ด ๊ธฐ๋ฅ์ ํตํฉํ๋ ๋ฉ์ธ ๋ธ๋์น.์ต์ ๊ฐ๋ฐ ์ํ๋ฅผ ๋ฐ์ํ์ง๋ง ๋ถ์์ ํ ์ ์์ต๋๋ค.๋ฒ๊ทธ ์์ ๋ฐ ๊ธฐ๋ฅ ..

ํจ์คํธ์บ ํผ์ค ์ฃผ๋์ด ๊ฐ๋ฐ์๋ฅผ ์ํ ํ๋ก ํธ์๋์ค๋ฌด ์๊ฐ ํ๊ธฐ
๋ค์ด๊ฐ๊ธฐ ์ ์ ์๋ ํ์ธ์๐ ์๋ ์ ๋ํ๊ต๋ฅผ ์กธ์ ํ๊ณ ์๋กญ๊ฒ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ก ๊ตญ๋ด ๊ตด์ง์ ์๋์ง ๊ธฐ์ ์ ํฉ๋ฅํ๊ฒ๋ Yollow๋ผ๊ณ ํฉ๋๋ค. ํ์ ๋ํ์๋ AWS ๋ฐ ML ์์ ์ ๋ค์๋, ์ฒ์ ํจ์คํธ์บ ํผ์ค๋ฅผ ์๊ฒ๋์๋๋ฐ์. ์ด๋๋ ์น๊ตฌ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ถ์ ๊ด๋ จ๋ ์ข์ ๊ฐ๋ ๊ฐ์๋ฅผ ๋ช ๊ฐ ์๊ฒ๋์ด, ๊ทธ๋๋ถํฐ ์ข์ ์ธ์ฐ์ ๋งบ๊ฒ๋์ด ํ์ฌ ํ์ฌ๋ฅผ ๋ค๋๊ณ ์์์๋ ๋ถ๊ตฌํ๊ณ ์๊ธฐ ๊ณ๋ฐ ์ฐจ์์์ ์ฌ๋ฌ ๊ฐ์๋ฅผ ๋ฃ๊ณ ์์ต๋๋ค. ๋ํ ์ ๊ฐ ๋ค๋๋ ๊ทธ๋ฃน ์ฐจ์์์๋ ๋ค์ํ ์ง๋ฌด์ ๊ณ์ ๋ถ๋ค์ด ํ์คํธ์บ ํผ์ค ๊ฐ์๋ฅผ ๋ฃ๊ฒํ๋๋ฐ์. ๊ทธ ์ด์ ๋ ํ์ ์์๋ ๊ฐ๊ธฐ ๋ค๋ฅธ ๋ถ์ผ(์ธ๊ณต์ง๋ฅ, ์์ฐ์ฑ ๋์ด๋ ํด ์ฌ์ฉ๋ฒ, ๋จธ์ ๋ฌ๋, ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฑ๋ฑ)์ ๋ํ ์ค๋ฌด ์ญ๋์ ๋์ด๋ ์ฐฝ๊ตฌ๋ก ์ธ์ ๋ฐ์์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค.^^ ์์ฆ ๊ธฐ์ ๋ณํ๊ฐ ์์ ๊ณผ๋ ๋ค๋ฅด๊ฒ..
![[Flutter] ๋ฒํผ ์์ ฏ(TextButton, ElevatedButton, OutlinedButton) ์ฌ์ฉ๋ฒ๊ณผ ์์ ์ฝ๋ ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ธ ํ์ ๊ฐ๋
๋ค](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI1zta%2Fbtsv7pvJ3ET%2FeI5oMHyCFPnVD6d4iA4sqk%2Fimg.png)
[Flutter] ๋ฒํผ ์์ ฏ(TextButton, ElevatedButton, OutlinedButton) ์ฌ์ฉ๋ฒ๊ณผ ์์ ์ฝ๋ ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ธ ํ์ ๊ฐ๋ ๋ค
์๋ ํ์ธ์! ์ค๋์ Flutter์์ ์์ฃผ ์ฌ์ฉ๋๋ ๋ฒํผ ์์ ฏ์ธ TextButton, ElevatedButton, OutlinedButton์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ์ด ๊ธ์์๋ ํด๋น ์์ ฏ๋ค์ ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ๊ณผ ์์ ์ฝ๋๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ํ, ์ฝ๋ ์์ฑ ์ ์ฃผ์ํด์ผ ํ ๋ช ๊ฐ์ง ํ๋ฌํฐ ๊ท์น๊ณผ ์ ์ฉํ ์ฝ๋ ์ ๋ฆฌ ๋จ์ถํค๋ ํจ๊ป ์์๋ด ์๋ค. Button - TextButton TextButton์ ๊ฐ๋จํ ํ ์คํธ ๋ฒํผ์ ๋ง๋ค ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์๋๋ TextButton์ ์์ฑํ๊ณ ๊ทธ์ ๋ํ ์์ ์ฝ๋์ ๋๋ค. TextButton( onPressed: () { // ๋ฒํผ ํด๋ฆญ ์ ์คํํ ๋์ print('TextButton ํด๋ฆญ๋จ'); }, child: Text('TextButton ํ ์คํธ'), ) - ElevatedBu..

Flutter Wrap ์์ ฏ ์ฌ์ฉ ํ: option(โฅ)+enter ๋จ์ถํค ํ์ฉํ๊ธฐ
๋๋ณด๊ธฐ option(โฅ)+ enter : ๊ฐ์ธ๋ ๊ตฌ์กฐ(Wrap) ๋ง๋ค๊ฑฐ๋ ์ ๊ฑฐํ ๋ ํ์ฉ 1. Introduction Flutter์์๋ Wrap ์์ ฏ์ ๋ง์ด ์ฌ์ฉํ๋ ๊ฒ ๊ฐ๋ค. ์๋ํ๋ฉด ํ๋ฉด์ ๋ชจ๋ ์์ ์์ฒด๊ฐ ์์ ฏ์ด๋ค ๋ณด๋, ๋ฐฐ์น๋ฅผ ํ ๋ Column, Row, Container ๋ฑ์ ์ ์ ํ๊ฒ ํผ์ฌํด์ ์ฌ์ฉํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง ์ค์ ๋ก VS Code ๋๋ Android Studio๋ก ์ฝ๋๋ฅผ ์ง๋ ๊ฒฝ์ฐ ์๋กญ๊ฒ Wrap ์ ํ๋ ๊ฒ ์์ฒด๊ฐ ์ฝ์ง ์์ ์์ ์ด๋ค. ๊ดํธ๊ฐ ๋ง๊ณ ์์นซ ์๋ชปํ๋ค๊ฐ ์ฝ๋์์ ์๋ฌ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ Wrap ์ ํ๊ธฐ ์ํด์๋ option ํค์ enter ํค๋ฅผ ๊ฐ์ด ๋๋ฅด๊ฒ ๋๋ฉด ํด๋น ์์ ฏ์ ๋ํด ์ด๋ค ์์ผ๋ก ๊ฐ์ ๊ฒ์ธ์ง, ๋๋ ๊ฐ์ธ์ ธ ์๋ ๋ถ๋ถ์ ์ ๊ฑฐํ ๊ฒ์ธ์ง ์ ..

๋ฆฌ๋ ์ค์์ virtualbox ์ฌ์ฉํ์ง ๋ง์..(vboxapi)
ERROR: Could not find a version that satisfies the requirement vboxapi==1.0 (from versions: none) ERROR: No matching distribution found for vboxapi==1.0 ERROR: Could not find a version that satisfies the requirement vboxapi==6.1 (from versions: none) ERROR: No matching distribution found for vboxapi==6.1 ์, ์ฐธ๊ณ ๋ก ํด๋น ์๋ฌ๋ฅผ ์ ํ๋ฉด์ ๋ฆฌ๋ ์ค์์๋ virtualbox ์ ๊ฐ์ด ๊ฐ์๋จธ์ sw๋ฅผ python์์ ์ ์ดํ๋ ๋ชจ๋๊ฐ์๊ฑฐ ์ค์น์ํ๊ธฐ๋ก ๋ค์งํ๋ค. ๋ฒ์ 1.0์ด ๊ตฌ..

pywin32 ๋ชจ๋ ์๋ฌ - ํด๊ฒฐ๋ฐฉ๋ฒ(feat.Linux)
๋ฆฌ๋ ์ค ํ๊ฒฝ์ ํ์ด์ฌ 3.8 ์ ํน์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ค์ด๋ก๋ ๋ฐ๋ ์ค์ ๋ค์๊ณผ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค ์๋ ๋์ปค์ ์ด๋ฏธ์ง ํ๋ ๊ตฌ์ด ๋ค์ ๊ฑฐ๊ธฐ ์์์ ํ์ด์ฌ ๊ทธ๋ฅ ์คํํ๋ ๊ฒ๋ณด๋ค ๊ฐ์ํ๊ฒฝ ๋ง๋ค๋ ค๊ณ ํ๋ค๋ณด๋ ์ฝ๋๊ฐ ์ข ๋ณต์กํด์ง๊ธดํ๋๋ฐ,, ๊ฐ์คํ๊ณ ERROR: Could not find a version that satisfies the requirement pywin32==304 (from versions: none) ERROR: No matching distribution found for pywin32==304 ERROR: Could not find a version that satisfies the requirement pywin32==304 (from versions: none) ERROR: No mat..

vue์์ eslint ์ฌ์ฉํ๊ธฐ(eslintrc.js)
ESLint๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์์ ์ค๋ฅ๋ฅผ ์ฐพ๊ณ ์ฝ๋ ์คํ์ผ์ ์ ์งํ๊ธฐ ์ํ ๋ฐ์ด๋ ๋๊ตฌ ์ค ํ๋์ธ๋ฐ์. ์ด ๋๊ตฌ๋ ์ค์ ํ์ผ์ธ .eslintrc.js์ ํตํด ๊ท์น์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ด ํ์ผ์ ์ผ๋ฐ์ ์ผ๋ก ํ๋ก์ ํธ์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์ ์์นํ๋ฉฐ, ESLint์ ๋์์ ๋ณ๊ฒฝํ๊ณ ํ๋ก์ ํธ์ ํ์ง์ ๊ฐ์ ํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. .eslintrc.js ํ์ผ์ ์์ ํ๋ ค๋ฉด, ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ์์ ํด๋น ํ์ผ์ ์ด์ด์ ์ํ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ํํ๋ฉด ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ท์น์ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ๊ฑฐ๋ ๊ตฌ์ฑ ์ต์ ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฅํ๋ฉด ์ฆ์ ์ ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ํ์ผ์ ์์ ํ๊ธฐ ์ ์, ํ์ผ์ ๋ด์ฉ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ESLint ๊ท์น์ ๋ณ๊ฒฝํ ๋๋ ๊ท์น์ด ์ด๋ป๊ฒ ๋์ํ๋์ง, ํด๋น ๋ณ๊ฒฝ์ด ์ฝ..
[f/e] ์บก์ณ๋ง๊ณผ ๋ฒ๋ธ๋ง
1. ์บก์ณ๋ง๊ณผ ๋ฒ๋ธ๋ง ์บก์ณ๋ง(capturing)์ ์ด๋ฒคํธ๊ฐ ๊ฐ์ฅ ์์์ ๋ถ๋ชจ ์์์์๋ถํฐ ์์ํ์ฌ ์ค์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์๊น์ง ๋ด๋ ค์ค๋ ๊ณผ์ ์ ์๋ฏธํฉ๋๋ค. ๋ฐ๋ผ์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์์์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ๋ฑ๋กํ๋๋ผ๋, ์์ ์์์ ๋ฑ๋ก๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ๋จผ์ ํธ์ถ๋ฉ๋๋ค. ๋ฐ๋ฉด์ ๋ฒ๋ธ๋ง(bubbling)์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์์์ ์์ํ์ฌ ์์ ์์๋ก ์ ํ๋๋ ๊ณผ์ ์ ์๋ฏธํฉ๋๋ค. ์ด ๊ฒฝ์ฐ์๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์์์ ๋ฑ๋กํ ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ๋จผ์ ํธ์ถ๋๊ณ , ๊ทธ ํ์ ์์ ์์์ ๋ฑ๋ก๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ํธ์ถ๋ฉ๋๋ค. ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ๋ฑ๋กํ ๋, ์ธ ๋ฒ์งธ ์ธ์๋ก ์ด๋ฒคํธ ์ ํ ๋ฐฉ์์ ์ค์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์๋์ ๊ฐ์ ์ฝ๋์์ ์บก์ณ๋ง์ ์ฌ์ฉํ๋๋ก ์ค์ ํ ์ ์์ต๋๋ค. document.getElement..