๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Language

(11)
[Go] Go ํ™˜๊ฒฝ์„ค์ • 1. Go ๋Ÿฐํƒ€์ž„ ์„ค์น˜Go ํ™ˆํŽ˜์ด์ง€์—์„œ ๋Ÿฐํƒ€์ž„์„ ์„ค์น˜ํ•œ๋‹ค.๋‚˜๋Š” M1 ๋งฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ARM64๋กœ ์„ค์น˜ํ–ˆ๋‹ค.๋ฒ„์ „ ๋ช…๋ น์–ด๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์น˜๋๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.go --version2. ํ”„๋กœ์ ํŠธ ์‹คํ–‰ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐํ™” ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.์‹คํ–‰ ํ›„ go.mod ํŒŒ์ผ์ด ์ƒ๊ธฐ๋Š”๋ฐ, ์ด๋Š” NodeJS์—์„œ package.json, Python์˜ requirements.txt์™€ ๊ฐ™์€ ๊ฒƒ์ด๋‹ค.go mod init github.com/๊ณ„์ •๋ช…/์ €์žฅ์†Œ๋ช…main.go ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜๊ณ  ๊ทธ ์•ˆ์— ๊ฐ„๋‹จํžˆ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.package main import "fmt" func main() { fmt.Println("Welcom to Nomad Coin!"); }๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ์‹คํ–‰ํ•ด๋ณธ๋‹ค.go run main.go3. ์—๋””ํ„ฐ ์„ค์ •๋‚˜๋Š” VSC..
[Go] Slice, Pointer, Struct ์ •๋ฆฌ Array vs SliceArrayPython, JS์™€ ๋‹ฌ๋ฆฌ Golang์˜ array๋Š” ์ •ํ•ด์ง„ ๊ธธ์ด๊ฐ€ ์žˆ๋‹ค.// Arrayfoods := [3]string{"kimchi", "pizza", "pasta"}for _, food :=range foods { fmt.Println(food)}// ๋˜๋Š”for i := 0; i kimchi> pizza> pastaSliceslice๋Š” ๊ฐ€๋ณ€ ๊ธธ์ด์˜ ๋ฐฐ์—ด์ด๋‹ค. ๋Œ€๊ด„ํ˜ธ ์•ˆ์˜ ์ˆซ์ž๋ฅผ ์ง€์šฐ๋ฉด slice๊ฐ€ ๋œ๋‹ค.slice์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” append ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋ณต์‚ฌ๋ณธ์œผ๋กœ ์›๋ณธ slice๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.// Slicefoods := []string{"kimchi", "pizza", "pasta"}fmt.Printf("%v\n", foods)> ki..
[TypeScript] ์ค‘์ฒฉ๋œ ๊ฐ์ฒด์˜ ๊ฐ’์„ ํƒ€์ž…์œผ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ ์ค‘์ฒฉ๋œ ๊ฐ์ฒด์—์„œ ๊ฐ’๋งŒ ๋ฝ‘์•„์„œ ํƒ€์ž…์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„๊นŒ?๐Ÿค”      const ENDPOINTS = { AUTH: { SIGN_UP: 'POST /auth/sign-up', SIGN_IN: 'POST /auth/sign-in' }} ๋งŒ์•ฝ ์ด๋Ÿฐ ํ˜•ํƒœ์˜ ๊ฐ์ฒด๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ด๋ด…์‹œ๋‹ค. ์ด ๊ฐ์ฒด์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ENDPOINTS.AUTH.SIGN_UP ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์€ ์ด๋ ‡๊ฒŒ ์ค‘์ฒฉ๋œ ๊ฐ์ฒด์—์„œ value๋งŒ ๋ชจ์•„์„œ ํ•˜๋‚˜์˜ ํƒ€์ž…์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ˆ˜๋™์œผ๋กœ type Endpoint = 'POST /auth/sign-up' | 'POST /auth/sign-in' | ... ๋กœ ์„ ์–ธํ•  ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ, ์ด ๊ฐ์ฒด์˜ ๋ชธ์ง‘์ด ํ›จ์”ฌ ๋” ํฌ๋‹ค๊ณ  ํ•  ๋•Œ๋Š” ๊ฝค๋‚˜ ๊ท€์ฐฎ๊ณ  ๋”๋Ÿฌ์šด ์ฝ”๋“œ๊ฐ€ ๋  ..
[JavaScript] parseInt( ) vs Number( ) Javascript์—์„œ parseInt( )์™€ Number( )์˜ ์ฐจ์ด๋ฅผ ์ •๋ฆฌํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. parseInt( ) ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑํ•ด์„œ ํŠน์ • ์ง„์ˆ˜์˜ ์ •์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” string, ๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” radix ์ž…๋‹ˆ๋‹ค.๋ฌธ์ž์—ด์—์„œ ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž ๋ถ€๋ถ„์„ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ์†Œ์ˆ˜์ ๊ณผ ์ˆซ์ž ์ดํ›„์˜ ๋ฌธ์ž์—ด์€ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.radix๊ฐ€ 2~36 ๋ฒ”์œ„์˜ ๊ฐ’์ด ์•„๋‹ˆ๊ฑฐ๋‚˜, ๊ณต๋ฐฑ์ด ์•„๋‹Œ ์ฒซ ๋ฌธ์ž๋ฅผ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ NaN์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.parseInt("123"); // 123 (๋ฌธ์ž์—ด์„ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜)parseInt("123.45"); // 123 (์†Œ์ˆ˜์  ์ดํ•˜ ์ˆซ์ž๋Š” ๋ฌด์‹œ)parseInt("123abc"); // 123 (์ˆซ์ž ์ดํ›„์˜ ๋ฌธ์ž๋Š” ๋ฌด์‹œ)parseInt(" ..
[TypeScript] Class vs Interface vs Type ์ฐจ์ด์  ์ •๋ฆฌ JavaScript Class vs TypeScript Class 1. ์†์„ฑ ์ดˆ๊ธฐํ™” ์ฝ”๋“œ๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.TS Class๋Š” ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž… ์„ ์–ธ๊ณผ ๋™์‹œ์— ์ ‘๊ทผ ์ œ์–ด์ž(+readonly)๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ์†์„ฑ ์ดˆ๊ธฐํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.์ด๋•Œ๋Š” ์†์„ฑ์ด public์ด์–ด๋„ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค.// JSclass User { constructor(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; }}// TS// ์ปดํŒŒ์ผํ•˜๋ฉด ์œ„ JS ์ฝ”๋“œ์™€ ๋™์ผํ•˜๋‹คclass User { constructor(private firstName: string, private lastName: string) {}} 2. ์ ‘๊ทผ ์ œํ•œ์ž(acces..
[TypeScript] Declaration File & JSDoc Declaration FileTypeScript ์„ ์–ธ ํŒŒ์ผ์€ ์ฃผ๋กœ JavaScript๋กœ ์ž‘์„ฑ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ๋ชจ๋“ˆ์„ TypeScript์—์„œ ์‚ฌ์šฉํ•  ๋•Œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.์„ ์–ธ ํŒŒ์ผ์€ .d.ts ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง€๋ฉฐ ๋™์ผํ•œ ์ด๋ฆ„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ๋ชจ๋“ˆ์˜ ํƒ€์ž…์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. Visual Studio Code์™€ ๊ฐ™์€ ํ†ตํ•ฉ๊ฐœ๋ฐœํ™˜๊ฒฝ(IDE)์—์„œ๋Š” ์„ ์–ธ ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์™€์„œ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”๋กœ ํƒ€์ž…์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.TypeScript๋Š” JavaScript ์ฝ”๋“œ๋„ ๊ฐ™์ด ์“ธ ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•˜์ง€๋งŒ, ํƒ€์ž… ์ •์˜๊ฐ€ ์—†๋‹ค๋ฉด ์‚ฌ์‹ค TypeScript๋ฅผ ์“ฐ๋Š” ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ TypeScript์—์„œ ์„ ์–ธ ํŒŒ์ผ์€ ๊ผญ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.tsconfig.json์— "strict": true ๋ฅผ ์„ค์ •ํ•˜๋ฉด ์„ ์–ธ ํŒŒ์ผ์ด ์—†๋Š” JavaScript ํŒจํ‚ค์ง€์— ๋Œ€..
[TypeScript] TypeScript ํƒ€์ž… ์ •๋ฆฌ Object๋ณ€์ˆ˜๋ช…: { key1: ํƒ€์ž…, key2: ํƒ€์ž…, ... }๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ์„ ํ™•์žฅํ•ด ์œ„์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ํƒ€์ž…์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.ํƒ€์ž… ์ฃผ์„(type annotation)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.์˜ˆ์‹œconst player: { name: string; age: number } = { name: "kim",}; Optional๋ณ€์ˆ˜/ํ”„๋กœํผํ‹ฐ๋ช…?: ํƒ€์ž…๋ฌผ์Œํ‘œ๋ฅผ ๋ถ™์—ฌ์„œ ํŠน์ • ํ”„๋กœํผํ‹ฐ๋‚˜ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์˜ต์…”๋„๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์˜ˆ์‹œ// ์ธํ„ฐํŽ˜์ด์Šค ํ”„๋กœํผํ‹ฐ์— ์ ์šฉinterface PaintOptions { shape: Shape; xPos?: number; yPos?: number;}// ๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ์— ์ ์šฉconst player: { name: string, age?: number } = { name: 'k..
[TypeScript] TypeScript ์ˆ˜๋™์œผ๋กœ ์„ค์ •ํ•˜๊ธฐ ๊ฐœ์š”ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์“ฐ๋ฉด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์„ค์ •๋œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ์ง€๋งŒ, ๊ฐ„ํ˜น ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์ •์„ ๊ฑด๋“œ๋ ค์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.๊ทธ๋•Œ๋ฅผ ์œ„ํ•ด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ธฐ๋กํ•ด๋‘๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.NodeJS๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜๋™ ์„ค์ • ๋ฐฉ๋ฒ•1. package.json ์ƒ์„ฑnpm init -y 2. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์น˜npm install -D typescript 3. tsconfig.json ์ƒ์„ฑtsc -init 4. tsconfig.json ์ž‘์„ฑ{ "include": ["src"], // ์ปดํŒŒ์ผ ํ•  ํŒŒ์ผ์˜ ๊ฒฝ๋กœ "compilerOptions": { "outDir": "build", // ์ปดํŒŒ์ผ ํ•œ ํŒŒ์ผ์„ ์ €์žฅํ•  ์œ„์น˜ "target": "ES6", // ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ด๋–ค ๋ฒ„..