Skip to content

Instantly share code, notes, and snippets.

@woozoobro
woozoobro / 00-guide.md
Created March 11, 2026 05:07
gws CLI + Claude Code ์„ค์ • ๊ฐ€์ด๋“œ

gws CLI + Claude Code ์„ค์ •

์‚ฌ์šฉ๋ฒ•

  1. gws-cli-setup.md๋ฅผ Claude Code์— ๋ถ™์—ฌ๋„ฃ๊ณ  "์ด๊ฑฐ ๋ณด๊ณ  ์„ค์น˜ํ•ด์ค˜"๋ผ๊ณ  ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  2. gws-cli.md๋Š” ํ”„๋กœ์ ํŠธ์˜ .claude/rules/gws-cli.md์— ๋„ฃ์œผ๋ฉด Claude Code๊ฐ€ gws ์‚ฌ์šฉ๋ฒ•์„ ์ž๋™์œผ๋กœ ์ฐธ๊ณ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด "๊ตฌ๊ธ€ ์‹œํŠธ ๋งŒ๋“ค์–ด์ค˜", "์Šฌ๋ผ์ด๋“œ ๋งŒ๋“ค์–ด์ค˜" ๊ฐ™์€ ์š”์ฒญ์ด ๋ฐ”๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

@woozoobro
woozoobro / SwiftUI DateTextField.md
Last active October 19, 2023 02:53
SwiftUI์—์„œ UIViewRepresentable์„ ์ด์šฉํ•ด TextField์— Picker๋กœ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ ์ž…๋‹ˆ๋‹ค.
import SwiftUI

class CustomUITextField: UITextField {
    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        if action == #selector(UIResponderStandardEditActions.paste(_:)) || action == #selector(UIResponderStandardEditActions.copy(_:)) || action == #selector(UIResponderStandardEditActions.cut(_:)) {
            return false
        }
        return super.canPerformAction(action, withSender: sender)
    }
@woozoobro
woozoobro / PostSample.md
Last active October 3, 2023 06:25
SwiftUI ํ”„๋กœํผํ‹ฐ ๋ž˜ํผ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

๊ฐ„๋‹จํ•œ ํฌ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด ๋ณผ๊ฑฐ์—์š”. ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ State Binding ObservedObject StateObject EnvironmentObject๊นŒ์ง€ ๋‹ค ํ•œ๋ฒˆ์”ฉ ์จ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋จผ์ € ํฌ์ŠคํŠธ ๋ชจ๋ธ์ด๋ž‘ mock list ๊ตฌ์„ฑํ•ด์ฃผ๊ณ 

struct Post: Identifiable {
    let id = UUID()
    let username: String
@woozoobro
woozoobro / Do Try Catch Throws.md
Last active July 29, 2023 04:04
Do Try Catch Throws
@woozoobro
woozoobro / Xcode ๋‹จ์ถ•ํ‚ค.md
Created July 23, 2023 10:33
๋‹จ์ถ•ํ‚ค ๋ชจ์Œ

ํŒŒ์ผ or ํ”„๋กœ์ ํŠธ ๋„ค๋น„๊ฒŒ์ดํ„ฐ

  • ์ปค๋งจ๋“œ shift N : ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ
  • ์ปค๋งจ๋“œ N : ์ƒˆ๋กœ์šด ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ
  • ์ปค๋งจ๋“œ option N : ์ƒˆ๋กœ์šด ํด๋” ๋งŒ๋“ค๊ธฐ
  • ์ปค๋งจ๋“œ shift J : ํ˜„์žฌ ์ผœ์ ธ ์žˆ๋Š” ์ฝ”๋“œ ์ฐฝ ๋„ค๋น„๊ฒŒ์ดํ„ฐ์—์„œ ์ฐพ๊ธฐ
  • ์ปค๋งจ๋“œ shift O : ํŒŒ์ผ์ด๋‚˜ Class ํ˜น์€ Struct ๋“ฑ๋“ฑ ๋นจ๋ฆฌ ์ฐพ๊ณ  ์—ด๊ธฐ
  • ์ปค๋งจ๋“œ shift F : ์ „์ฒด ๊ฒฝ๋กœ์—์„œ ์ฝ”๋“œ ๊ฒ€์ƒ‰
  • ์ปค๋งจ๋“œ F : ํ˜„์žฌ ํŒŒ์ผ์—์„œ ์ฝ”๋“œ ๊ฒ€์ƒ‰
  • ์ปค๋งจ๋“œ L : ๋ผ์ธ๋„˜๋ฒ„๋กœ ์ด๋™
  • ์ปค๋งจ๋“œ ๋ฐฑ์ŠคํŽ˜์ด์Šค : ํŒŒ์ผ ์ง€์šฐ๊ธฐ
@woozoobro
woozoobro / NavigationPathํ™œ์šฉ.md
Last active February 29, 2024 07:29
NavigationPathํ™œ์šฉ

์ง€๋‚œ ์‹œ๊ฐ„์— NavigationStack์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ํ‘œํ˜„๋“ค์„ ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค!

๋จผ์ € ํƒญ๋ทฐ์™€ ํ•จ๊ป˜ NavigationStack์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ๋ฅผ ์‚ดํŽด๋ณผ๊ฒŒ์š”

์ฒ˜์Œ์— ์–ด๋–ค ์‹์œผ๋กœ Navigation์„ ์‚ฌ์šฉํ• ์ง€ ๋ชจ๋ฅผ ๋•Œ๋Š”

๊ฐ๊ฐ์˜ ํƒญ๋“ค์„ ๋„ค๋น„๊ฒŒ์ด์…˜View๋กœ ๊ฐ์‹ธ์คฌ์—ˆ๋Š”๋ฐ ํƒญ๋“ค์ด ๋„ค๋น„๊ฒŒ์ด์…˜ ๋œ ํ›„์—๋„ ์‚ด์•„์žˆ๊ฒŒ ๋˜๋”๋ผ๊ตฌ์š”

๊ทธ๋ž˜์„œ ๋ฐฉ๋ฒ•์„ ์ฐพ๋‹ค๊ฐ€ NavigationStack์„ ์ œ์ผ ์ตœ์ƒ๋‹จ์œผ๋กœ ๋นผ์ฃผ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@woozoobro
woozoobro / NavigationStack.md
Created July 18, 2023 15:47
NavigationStack ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

์ปค์Šคํ…€ํ•œ ํƒญ๋ฐ” ๋งŒ๋“ค๊ธฐ

์ปค์Šคํ…€ํ•œ ํƒญ๋ฐ”๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์—” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค!

PreferenceKey๋ฅผ ์ด์šฉํ•ด์„œ ์ž์‹์˜ ๋ทฐ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋  ๋•Œ, ๋ถ€๋ชจ์˜ ๋ทฐ๊ฐ€ ์ด ๊ฒƒ์„ ์•Œ์•„์ฐจ๋ฆฌ๊ณ  ์Šค์Šค๋กœ๋ฅผ ์—…๋Žƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ตฌ์„ฑํ•ด์ค„ ์ˆ˜๋„ ์žˆ๊ณ 

์•„๋‹ˆ๋ฉด ์˜ค๋Š˜ ๋งŒ๋“ค์–ด๋ณผ SwiftUI์˜ ๊ธฐ๋ณธ TabView ์ปดํฌ๋„ŒํŠธ๋ž‘ ํ•จ๊ป˜ ์ปค์Šคํ…€ํ•˜๊ฒŒ ๋งŒ๋“  ๋ทฐ๋ฅผ ์œ„์— ์˜ฌ๋ ค์„œ ๊ตฌ์„ฑํ•ด์ค„ ์ˆ˜๋„ ์žˆ์–ด์š”!

@woozoobro
woozoobro / I'm a night ๐Ÿฆ‰
Last active August 14, 2023 00:35
Commit time
๐ŸŒž Morning 41 commits โ–ˆโ–ˆโ–โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 10.5%
๐ŸŒ† Daytime 116 commits โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–Žโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 29.8%
๐ŸŒƒ Evening 166 commits โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‰โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 42.7%
๐ŸŒ™ Night 66 commits โ–ˆโ–ˆโ–ˆโ–Œโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 17.0%