์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ(์•ฑ ๊ฐœ๋ฐœ ์ฐฝ์—…)/์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ TIL

[250318] ์˜ค๋Š˜์˜ TIL: Dart ์‹ฌํ™” ๊ณผ์ œ ์ง„ํ–‰ & ๋„คํŠธ์›Œํ‚น

๋ชฝ๋ฌผ๊ณ ๊ธฐ๐“†œ 2025. 3. 18. 22:08
728x90
728x90

 

 

์˜ค๋Š˜์€ RPG ๊ฒŒ์ž„ ๊ฐœ๋ฐœ ๊ณผ์ œ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ,

Dart์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ๋”์šฑ ์‹ฌํ™”ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

์˜ค์ „์—๋Š” ํŒ€์›๋“ค๊ณผ

์•„ํ‹ฐํด์„ ๊ณต์œ ํ•˜๊ณ  ํ† ๋ก ํ–ˆ์œผ๋ฉฐ,

์ดํ›„ ์ฐจ๊ธฐ ํŒ€์›๋“ค๊ณผ ์‚ฌ์—… ๊ด€๋ จ ๋…ผ์˜๋ฅผ ํ–ˆ๋‹ค.

 

์ ์‹ฌ์„ ๋จน๊ณ  ๋‚œ ํ›„

๋ณธ๊ฒฉ์ ์œผ๋กœ ๊ณผ์ œ์— ์ง‘์ค‘ํ–ˆ์œผ๋ฉฐ,

์ €๋…์—๋Š” ๋„คํŠธ์›Œํ‚น์— ์ฐธ์—ฌํ–ˆ๋‹ค.

 

ํ•˜๋ฃจ๊ฐ€ ๋น ๋ฅด๊ฒŒ ์ง€๋‚˜๊ฐ”๊ณ ,

์ •๋ง ๋น ๋ฅด๊ฒŒ ์ง€๋‚˜๊ฐ”๊ณ ,

๊ณผ์ œ๋ฅผ ๋Œ€์ถฉ ๋๋‚ด๊ณ  

๋‚˜์˜ ์•„์ดํ…œ ๊ตฌ์ƒ์„ ํ•˜๋ ค๊ณ  ํ–ˆ์œผ๋‚˜

์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฌธ์ œ๋“ค๋กœ

์˜ค๋Š˜๋„ ๊ทธ๋ƒฅ ์ด๋ ‡๊ฒŒ ๋ณด๋ƒˆ๋‹ค.

 

 

(์ค‘๊ฐ„์— ๊ทธ๋ฆผ๊ทธ๋ฆฌ๋Š๋ผ ์‹œ๊ฐ„ ๋ณด๋‚ธ ๊ฑด ๋น„๋ฐ€)


โ… . ๊ณผ์ œ ์ง„ํ–‰ ๋‚ด์šฉ ์ •๋ฆฌ

 

๊ณผ์ œ ์ฃผ์ œ: Dart๋กœ ์ „ํˆฌ RPG ๊ฒŒ์ž„ ๊ฐœ๋ฐœ

 

๐Ÿ“Œ ๊ณผ์ œ ์ฃผ์ œ: Dart๋กœ ์ „ํˆฌ RPG ๊ฒŒ์ž„ ๊ฐœ๋ฐœ

 

๊ณผ์ œ์—์„œ๋Š”

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP) ๊ฐœ๋…์„ ์ ์šฉํ•˜์—ฌ,

์บ๋ฆญํ„ฐ์™€ ๋ชฌ์Šคํ„ฐ ๊ฐ„์˜

์ „ํˆฌ ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ–ˆ๋‹ค.

 

ํŠนํžˆ ํŒŒ์ผ ์ž…์ถœ๋ ฅ,

๋žœ๋ค ๊ฐ’ ์ƒ์„ฑ, ๊ฒŒ์ž„ ํ๋ฆ„ ์ œ์–ด ๋“ฑ์˜

๊ธฐ๋Šฅ์„ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด์—ˆ๋‹ค.

 

 

๐Ÿ“Œ ๊ตฌํ˜„ํ•œ ๊ธฐ๋Šฅ

 

โœ… ํŒŒ์ผ ์ž…์ถœ๋ ฅ

  • characters.txt์—์„œ ์บ๋ฆญํ„ฐ ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ธฐ๋Šฅ
  • monsters.txt์—์„œ ๋ชฌ์Šคํ„ฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ฝ์–ด์˜ค๋Š” ๊ธฐ๋Šฅ
  • ๊ฒŒ์ž„ ์ข…๋ฃŒ ํ›„ ๊ฒฐ๊ณผ(result.txt) ์ €์žฅ ๊ธฐ๋Šฅ

โœ… ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„

  • Character ํด๋ž˜์Šค: ํ”Œ๋ ˆ์ด์–ด ์บ๋ฆญํ„ฐ์˜ ์†์„ฑ ๋ฐ ๊ณต๊ฒฉ/๋ฐฉ์–ด ๋ฉ”์„œ๋“œ ๊ตฌํ˜„
  • Monster ํด๋ž˜์Šค: ๋ชฌ์Šคํ„ฐ์˜ ์†์„ฑ ๋ฐ ๋žœ๋ค ๊ณต๊ฒฉ๋ ฅ ์„ค์ •
  • Game ํด๋ž˜์Šค: ๊ฒŒ์ž„์˜ ์‹œ์ž‘ ๋ฐ ์ „ํˆฌ ํ๋ฆ„ ๊ด€๋ฆฌ

โœ… ์ „ํˆฌ ์‹œ์Šคํ…œ

  • battle() ๋ฉ”์„œ๋“œ์—์„œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ณต๊ฒฉ ๋˜๋Š” ๋ฐฉ์–ด๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„
  • getRandomMonster()๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋žœ๋ค ๋ชฌ์Šคํ„ฐ์™€ ์ „ํˆฌ
  • ์ฒด๋ ฅ์ด 0์ด ๋˜๋ฉด ๊ฒŒ์ž„ ์ข…๋ฃŒ

โœ… ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

  • ์ž˜๋ชป๋œ ํŒŒ์ผ ํ˜•์‹์ผ ๊ฒฝ์šฐ ์˜ˆ์™ธ ๋ฐœ์ƒ ๋ฐฉ์ง€
  • ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ (์˜ˆ: ์บ๋ฆญํ„ฐ ์ด๋ฆ„์— ํŠน์ˆ˜๋ฌธ์ž ํฌํ•จ ์—ฌ๋ถ€ ์ฒดํฌ)


ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… (๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •)

 

๋ฌธ์ œ 1๏ธโƒฃ: ํŒŒ์ผ ์ž…์ถœ๋ ฅ ์‹œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ• ๊นŒ?

 

๐Ÿ“ ์ƒํ™ฉ:

ํŒŒ์ผ์—์„œ

๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋Š” ๊ณผ์ •์—์„œ

readAsStringSync()๋ฅผ ์‚ฌ์šฉํ• ์ง€,

await์„ ํ™œ์šฉํ•œ ๋น„๋™๊ธฐ ๋ฐฉ์‹์„

์‚ฌ์šฉํ• ์ง€ ๊ณ ๋ฏผ์ด ๋๋‹ค.

 

๐Ÿ“ ํ•ด๊ฒฐ:

  • readAsStringSync()๋Š” ๋™๊ธฐ์ ์œผ๋กœ ํŒŒ์ผ์„ ์ฝ์ง€๋งŒ, ๊ฒŒ์ž„ ์‹คํ–‰ ์†๋„์—๋Š” ํฌ๊ฒŒ ์˜ํ–ฅ์ด ์—†์œผ๋ฏ€๋กœ ๋™๊ธฐ ๋ฐฉ์‹์„ ์„ ํƒ.
  • ๋‹ค๋งŒ, ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ async๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•จ.

 

๐Ÿ“ ๋ฐฐ์šด ์ :


๋น„๋™๊ธฐ๊ฐ€ ํ•ญ์ƒ ์ •๋‹ต์€ ์•„๋‹ˆ๋ฉฐ, ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ๋ฅผ ์ ์ ˆํžˆ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

--


๋ฌธ์ œ 2๏ธโƒฃ: ๋ชฌ์Šคํ„ฐ์˜ ๋žœ๋ค ๊ณต๊ฒฉ๋ ฅ ์„ค์ • ๋ฌธ์ œ

 

๐Ÿ“ ์ƒํ™ฉ:


Monster ํด๋ž˜์Šค์—์„œ

๊ณต๊ฒฉ๋ ฅ์„ ๋žœ๋ค์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š”๋ฐ,

๋ฐฉ์–ด๋ ฅ๋ณด๋‹ค ์ž‘์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ–ˆ๋‹ค.

 

๐Ÿ“ ํ•ด๊ฒฐ:

this.attack = Random().nextInt(maxAttack - defense) + defense;
  • Random().nextInt()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฉ์–ด๋ ฅ ์ด์ƒ์˜ ๊ฐ’์ด ๋‚˜์˜ค๋„๋ก ๋ณด์ •.
  • ์ตœ์†Œ๊ฐ’์„ defense ์ด์ƒ์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ๋ฐฉ์–ด๋ ฅ์ด ๊ณต๊ฒฉ๋ ฅ๋ณด๋‹ค ๋†’์€ ๋น„์ •์ƒ์ ์ธ ๊ฒฝ์šฐ ๋ฐฉ์ง€.

 

๐Ÿ“ ๋ฐฐ์šด ์ :

  • ๋žœ๋ค๊ฐ’์„ ์‚ฌ์šฉํ•  ๋•Œ๋„ ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด ์„ค์ •์ด ์ค‘์š”ํ•˜๋‹ค.

๋ฌธ์ œ 3๏ธโƒฃ: ๊ฒŒ์ž„ ์ข…๋ฃŒ ํ›„ ๊ฒฐ๊ณผ ์ €์žฅ ์˜ค๋ฅ˜

 

๐Ÿ“ ์ƒํ™ฉ:


๊ฒŒ์ž„์ด ๋๋‚œ ํ›„

๊ฒฐ๊ณผ๋ฅผ ํŒŒ์ผ์— ์ €์žฅํ•  ๋•Œ,

์ด์ „ ์‹คํ–‰ ๊ธฐ๋ก์ด ๋ฎ์–ด์”Œ์›Œ์ง€๋Š”

๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

 

์ •ํ™•ํžˆ๋Š”, 

๋‚˜๋Š” ๊ณผ์ œ์— ์ผ๋ฐ˜/๋„์ „ 2๊ฐ€์ง€ ๋ฒ„์ „์„

๊ธฐ๋กํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•œ๋‹ค.

 

์ด์œ ๋Š”,

๋‚˜์˜ ๊ณผ์ •์„ ์ „๋ฌธ๊ฐ€๋“ค์—๊ฒŒ

์šฉ์ดํ•˜๊ฒŒ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•จ์ด ์ฒซ์งธ,

 

๋‘˜์งธ๋Š” GPT์‚ฌ์šฉ์œผ๋กœ

๋กœ์ง์ด ๋‹ฌ๋ผ์ง€๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ ์ž ํ•จ์ด๋‹ค.

๋ฐฑ์—…์šฉ์ด๋ผ๊ณ ๋‚˜ ํ• ๊นŒ๋‚˜..

๋ฌดํŠผ ๋„์ „ ๊ณผ์ œ๊ฐ€ ์ผ๋ฐ˜ ๊ณผ์ œ์—

๋ฎ์–ด์”Œ์–ด์ง„ ์‹ค์ˆ˜๋ฅผ ํ–ˆ์ง€๋งŒ

ํ•ด๊ฒฐํ•˜๊ธด ํ–ˆ๋‹ค.

 

๐Ÿ“ ํ•ด๊ฒฐ:

final file = File('result.txt');
file.writeAsStringSync('์บ๋ฆญํ„ฐ: $name, ๋‚จ์€ ์ฒด๋ ฅ: $health, ๊ฒฐ๊ณผ: $result\n', mode: FileMode.append);
  • FileMode.append๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด ๋‚ด์šฉ ์œ ์ง€ํ•˜๋ฉด์„œ ์ƒˆ๋กœ์šด ๊ฒฐ๊ณผ ์ถ”๊ฐ€.

 

๐Ÿ“ ๋ฐฐ์šด ์ :


ํŒŒ์ผ์„ ๋‹ค๋ฃฐ ๋•Œ writeAsStringSync() ๊ธฐ๋ณธ ๋ชจ๋“œ๋Š” ๋ฎ์–ด์“ฐ๊ธฐ์ด๋ฏ€๋กœ, ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•  ๊ฒฝ์šฐ append ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.


โ…ก. ์˜ค๋Š˜์˜ ๋Š๋‚€ ์  & ๊ฐœ์„ ํ•  ์ 

 

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)์˜ ์‹ค์ „ ์ ์šฉ์ด ์ƒ๊ฐ๋ณด๋‹ค ํฅ๋ฏธ๋กœ์› ๋‹ค.

 

 

์ด๋ฒˆ ๊ณผ์ œ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP) ๊ฐœ๋…์ด

๋‹จ์ˆœํžˆ ๊ฐœ๋…์ ์œผ๋กœ๋งŒ

์กด์žฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ,

์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ๋Š”์ง€

์‹ค๊ฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

ํŠนํžˆ,

Character, Monster, Game

ํด๋ž˜์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๋งŒ๋“ค๋ฉด์„œ

๊ฐ๊ฐ์˜ ์—ญํ• ์„

๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด

์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•œ์ง€ ๊นจ๋‹ฌ์•˜๋‹ค.

 

 

  • ์ฒ˜์Œ์—๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ์„ Game ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ  ํ–ˆ์ง€๋งŒ, ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๊ณ ๋ คํ•˜๋ฉด ๊ฐ ์—ญํ• ์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ์œจ์ ์ด์—ˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, attackMonster()์™€ ๊ฐ™์€ ๊ณต๊ฒฉ ๋กœ์ง์„ Character ํด๋ž˜์Šค ๋‚ด๋ถ€์— ๋‘๋Š” ๊ฒƒ์ด ์ง๊ด€์ ์ด๋ฉฐ, Monster์˜ ๊ณต๊ฒฉ๋ ฅ ๊ณ„์‚ฐ๋„ ํ•ด๋‹น ํด๋ž˜์Šค์—์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋ณ€๊ฒฝํ–ˆ๋‹ค.
  • ์ด๋Š” ํ–ฅํ›„ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋„ ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์„ ์ œ๊ณตํ–ˆ๋‹ค.

 

๋˜ํ•œ ๊ฐ์ฒด ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์„

๋‹ค๋ฃจ๋Š” ๊ฒƒ์ด ์ƒ๊ฐ๋ณด๋‹ค ์–ด๋ ต๊ณ ,

๋กœ์ง์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ

๊ณ ๋ฏผํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ์ฒด๊ฐํ–ˆ๋‹ค.

 

 

 

 

  • ๋ชฌ์Šคํ„ฐ์˜ ๋žœ๋ค ๊ณต๊ฒฉ๋ ฅ ์„ค์ •, ์ „ํˆฌ ๊ฒฐ๊ณผ ๋ฐ˜์˜, ์ฒด๋ ฅ ์—…๋ฐ์ดํŠธ ๋“ฑ์€ ์ž‘์€ ์‹ค์ˆ˜๋งŒ์œผ๋กœ๋„ ๊ฒŒ์ž„ ๋ฐธ๋Ÿฐ์Šค๋ฅผ ๋ฌด๋„ˆ๋œจ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋Ÿฌํ•œ ๊ฒฝํ—˜์„ ํ†ตํ•ด OOP์˜ ๊ฐ•์ ์ด ๋‹จ์ˆœํžˆ "์ฝ”๋“œ๋ฅผ ๋ณด๊ธฐ ์ข‹๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ"์ด ์•„๋‹ˆ๋ผ ๊ฒŒ์ž„ ๋กœ์ง์„ ๋ณด๋‹ค ์ฒด๊ณ„์ ์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ณ , ํ™•์žฅ์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ๊ธฐ์—ฌํ•œ๋‹ค๋Š” ์ ์„ ์ง์ ‘ ๋Š๋‚„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 


ํŒŒ์ผ ์ž…์ถœ๋ ฅ๊ณผ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์˜ ์ค‘์š”์„ฑ

 

์ด๋ฒˆ ๊ณผ์ œ์—์„œ๋Š”

ํŒŒ์ผ ์ž…์ถœ๋ ฅ(File I/O)์„ ํ™œ์šฉํ•˜์—ฌ

์บ๋ฆญํ„ฐ์™€ ๋ชฌ์Šคํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ ,

๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.


์ด๋Š” ๋‹จ์ˆœํ•œ ํ„ฐ๋ฏธ๋„ ๊ธฐ๋ฐ˜ RPG ๊ฒŒ์ž„์„

ํ•œ ๋‹จ๊ณ„ ๋” ์‹ค์ œ ๊ฒŒ์ž„๋‹ต๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค.

 

 

๐Ÿ“Œ ๊ตฌํ˜„ ๊ณผ์ •์—์„œ ๋ฐฐ์šด ์ 

  • dart:io ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ์ฝ์–ด์˜ค๋Š” ๋ฐฉ์‹์—๋Š” ๋™๊ธฐ(Sync)์™€ ๋น„๋™๊ธฐ(Async) ๋ฐฉ์‹์ด ์กด์žฌํ•œ๋‹ค.
  • ๊ฒŒ์ž„ ๋กœ๋”ฉ ์†๋„์—๋Š” ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋™๊ธฐ ๋ฐฉ์‹(readAsStringSync())์„ ์„ ํƒํ–ˆ๋‹ค.
  • ๋‹ค๋งŒ, ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ(์˜ˆ: ์ˆ˜์‹ญ ๊ฐœ์˜ ๋ชฌ์Šคํ„ฐ ๋ฆฌ์ŠคํŠธ)๋ฅผ ์ฒ˜๋ฆฌํ•  ๊ฒฝ์šฐ ๋น„๋™๊ธฐ(await file.readAsString()) ๋ฐฉ์‹์ด ํ•„์š”ํ•  ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

 

๐Ÿ“Œ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… (์˜ˆ์™ธ ์ฒ˜๋ฆฌ)

ํŒŒ์ผ ์ž…์ถœ๋ ฅ์„ ๋‹ค๋ฃจ๋ฉด์„œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์˜ ์ค‘์š”์„ฑ์„ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์‹ค๊ฐํ–ˆ๋‹ค.

  • ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์ด ์ฆ‰์‹œ ์ข…๋ฃŒ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, try-catch ๋ธ”๋ก์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์˜ˆ์™ธ๋ฅผ ์žก๊ณ  ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•˜๋„๋ก ๊ฐœ์„ ํ–ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์บ๋ฆญํ„ฐ ์ด๋ฆ„์ด ๋นˆ ๋ฌธ์ž์—ด์ด๊ฑฐ๋‚˜ ํŠน์ˆ˜๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด ์ •๊ทœํ‘œํ˜„์‹(RegExp) ๊ฒ€์ฆ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.
  • ๊ฒŒ์ž„ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•  ๋•Œ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฎ์–ด์”Œ์›Œ์ง€๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด FileMode.append ์˜ต์…˜์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

 

๐Ÿ“Œ ์•ž์œผ๋กœ ๊ฐœ์„ ํ•  ์ 

  • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์ ์šฉํ•˜๋ฉด ํŒŒ์ผ ๋กœ๋”ฉ์ด ๊ฒŒ์ž„ ์‹œ์ž‘๊ณผ ๋™์‹œ์— ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ์„ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.
  • ํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฅผ JSON ํ˜•์‹์œผ๋กœ ์ €์žฅํ•˜์—ฌ ๋ณด๋‹ค ์œ ์—ฐํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

UI ๊ณ ๋ฏผ: RPG ๊ฒŒ์ž„๊ณผ ์—ฌํ–‰ ์•ฑ, ์–ด๋–ป๊ฒŒ UI ์„ค๊ณ„๋ฅผ ์ง„ํ–‰ํ•  ๊ฒƒ์ธ๊ฐ€?

 

 

์ด๋ฒˆ ๊ณผ์ œ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ

UI๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•ด์•ผ ํ• ์ง€์— ๋Œ€ํ•œ

๊ณ ๋ฏผ์ด ๊นŠ์–ด์กŒ๋‹ค.

 

์‚ฌ์‹ค ๋‚˜๋Š” ๋‚˜์˜ ์บ๋ฆญํ„ฐ๊ฐ€ ์žˆ๊ณ ,

์ด๋ฅผ GIF, MP4 ๋“ฑ์˜ ํ˜•ํƒœ๋กœ 

๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ต์ง€ ์•Š์•„์„œ

ํ™œ์šฉํ•  ์˜ˆ์ •์ธ๋ฐ,

๊ฒŒ์ž„์˜ ๊ตฌํ˜„ ๋ฐฉ์‹๊ณผ ๋น„์Šทํ•  ๊ฒƒ ๊ฐ™์•„

ํ•จ๊ป˜ ์ฐพ์•„๋ณด์•˜๋‹ค. 

 

  • ํ˜„์žฌ๋Š” ํ„ฐ๋ฏธ๋„ ๊ธฐ๋ฐ˜ CLI ๊ฒŒ์ž„์ด์ง€๋งŒ, ์ด๋ฅผ ์‹ค์ œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI)๊ฐ€ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ํ™•์žฅํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ?
  • ๊ทธ๋ฆฌ๊ณ  ๋‚ด๊ฐ€ ๊ฐœ๋ฐœ ์ค‘์ธ ์—ฌํ–‰ ์ผ์ • ๊ด€๋ฆฌ ์•ฑ์˜ UI ๋˜ํ•œ ์–ด๋–ป๊ฒŒ ๊ตฌ์ฒดํ™”ํ•ด์•ผ ํ• ๊นŒ?

 

๐Ÿ“Œ 1. RPG ๊ฒŒ์ž„์„ UI ๊ธฐ๋ฐ˜ ์•ฑ์œผ๋กœ ๋งŒ๋“ค๋ ค๋ฉด?

 

ํ˜„ ๋‹จ๊ณ„์—์„œ๋Š”

๋‹จ์ˆœํžˆ ํ„ฐ๋ฏธ๋„์—์„œ print()๋ฅผ ์‚ฌ์šฉํ•ด

์ถœ๋ ฅ์„ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ์ง€๋งŒ,

์ด๋ฅผ UI๊ฐ€ ์žˆ๋Š” ๊ฒŒ์ž„ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค๋ ค๋ฉด

๋ช‡ ๊ฐ€์ง€ ์š”์†Œ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

 

โœ… Flutter๋ฅผ ํ™œ์šฉํ•œ UI ์ ์šฉ

  • Dart ๊ธฐ๋ฐ˜ ๊ฒŒ์ž„์ด๋ฏ€๋กœ, Flutter๋ฅผ ํ™œ์šฉํ•˜์—ฌ UI๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•  ๊ฒƒ ๊ฐ™๋‹ค.
  • Column, ListView ๋“ฑ์„ ํ™œ์šฉํ•ด ์ „ํˆฌ ๋กœ๊ทธ๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๊ณ ,
  • ๋ฒ„ํŠผ์„ ํ™œ์šฉํ•œ ์‚ฌ์šฉ์ž ์ž…๋ ฅ (๊ณต๊ฒฉ/๋ฐฉ์–ด ์„ ํƒ ๋“ฑ) ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โœ… RPG ๊ฒŒ์ž„์˜ UI ์š”์†Œ ์ •๋ฆฌ

  • ์ „ํˆฌ ํ™”๋ฉด: ํ˜„์žฌ ํ”Œ๋ ˆ์ด์–ด์™€ ๋ชฌ์Šคํ„ฐ์˜ ์ƒํƒœ ํ‘œ์‹œ (์ฒด๋ ฅ, ๊ณต๊ฒฉ๋ ฅ ๋“ฑ)
  • ์•ก์…˜ ๋ฒ„ํŠผ: ๊ณต๊ฒฉ / ๋ฐฉ์–ด / ์•„์ดํ…œ ์‚ฌ์šฉ ๋“ฑ ์„ ํƒ ๊ฐ€๋Šฅํ•œ ํ–‰๋™ UI
  • ์ „ํˆฌ ๋กœ๊ทธ: ๊ฒŒ์ž„ ์ง„ํ–‰ ์ƒํ™ฉ์„ ์ถœ๋ ฅํ•˜๋Š” ํ…์ŠคํŠธ ๋กœ๊ทธ
  • ๊ฒฐ๊ณผ ํ™”๋ฉด: ์Šน๋ฆฌ ๋˜๋Š” ํŒจ๋ฐฐ ์‹œ ๊ฒฐ๊ณผ ํ‘œ์‹œ

 

์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ

UI๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๊ธฐ์กด CLI ๊ธฐ๋ฐ˜ ๊ฒŒ์ž„์„ ๋ณด๋‹ค

์ง๊ด€์ ์ด๊ณ  ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒํ•œ

๊ฒŒ์ž„์œผ๋กœ ๋ฐœ์ „์‹œํ‚ฌ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

 

์Œ.. ์ƒ์—…์šฉ ์œ ๋ฃŒ ์—์…‹์œผ๋กœ

ํ•œ ๋ฒˆ ๊ตฌํ˜„ํ•ด๋ณผ๊นŒ..?

 


๐Ÿ“Œ 2. ์—ฌํ–‰ ์ผ์ • ๊ด€๋ฆฌ ์•ฑ UI ์„ค๊ณ„ ๊ณ ๋ฏผ

 

์ง€๊ธˆ ๊ฐœ๋ฐœํ•˜๋ ค๋Š”

์—ฌํ–‰ ์ผ์ • ๊ด€๋ฆฌ ์•ฑ๋„

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ UI ์„ค๊ณ„๊ฐ€ ํ•ต์‹ฌ์ด๋‹ค.


ํ˜„์žฌ UI ์˜ˆ์‹œ ์ด๋ฏธ์ง€(์บ˜๋ฆฐ๋” ์Šคํƒ€์ผ ํ…œํ”Œ๋ฆฟ)๋ฅผ

์ฐธ๊ณ ํ•˜๋ฉด์„œ ๋ช‡ ๊ฐ€์ง€ ์˜๋ฌธ์ ์ด ์ƒ๊ฒผ๋‹ค.

 

โœ… UI์—์„œ ์šฐ์„  ๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ์€?

  • ์—ฌํ–‰ ์ผ์ •์„ ์ฃผ๋ณ„, ์ผ์ž๋ณ„๋กœ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ๊ธฐ์กด UI ์˜ˆ์‹œ์ฒ˜๋Ÿผ ์‹œ๊ฐ์ ์œผ๋กœ ๊น”๋”ํ•œ ๋‹ค์ด์–ด๋ฆฌ ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.
  • ์˜ˆ์‚ฐ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ๋„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด ๋ถ€๋ถ„์„ ์–ด๋–ป๊ฒŒ UI๋กœ ํ‘œํ˜„ํ• ์ง€ ๊ณ ๋ฏผ์ด ํ•„์š”ํ•˜๋‹ค.

 

โœ… UI/UX ์ ์šฉ ๋ฐฉํ–ฅ์„ฑ

  • Flutter์—์„œ ์บ˜๋ฆฐ๋” UI๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ๊ฒƒ์ธ๊ฐ€?
    • TableCalendar ํŒจํ‚ค์ง€๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์„์ง€ ๊ฒ€ํ† 
    • ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ํ˜•์‹(์ฃผ๋ณ„/์ผ๋ณ„)๋กœ ์ผ์ •์„ ์‰ฝ๊ฒŒ ์ž…๋ ฅํ•˜๋„๋ก ๊ตฌ์„ฑ
  • ์˜ˆ์‚ฐ ๊ด€๋ฆฌ UI๋Š”?
    • ์—ฌํ–‰ ๊ฒฝ๋น„๋ฅผ ์ž…๋ ฅํ•˜๋Š” UI๋ฅผ TextField ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค ๊ฒƒ์ธ๊ฐ€?
    • ํ˜น์€ ์ž๋™ ํ™˜์œจ ๊ณ„์‚ฐ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•ด์•ผ ํ•˜๋Š”๊ฐ€?
  • ๊ธฐ์กด UI ์˜ˆ์‹œ์™€ ์ฐจ๋ณ„ํ™”ํ•  ํฌ์ธํŠธ๋Š”?
    • ๋‹จ์ˆœํ•œ ์ผ์ • ๊ด€๋ฆฌ๊ฐ€ ์•„๋‹Œ, ์—ฌํ–‰ ์ค‘์—๋„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ• ๊นŒ?
    • ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์—ฌํ–‰ ํ›„๊ธฐ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๋ฉ”๋ชจ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ• ๊นŒ?

 

์ด์ฒ˜๋Ÿผ UI ์„ค๊ณ„๋ฅผ

๊ตฌ์ฒดํ™”ํ•˜๋Š” ๊ณผ์ •์—์„œ

 

๊ธฐ๋Šฅ์„ ์–ด๋–ป๊ฒŒ ๋‚˜๋ˆ„๊ณ ,

์–ด๋–ค ๋ถ€๋ถ„์„

์šฐ์„  ๊ฐœ๋ฐœํ•  ๊ฒƒ์ธ์ง€์—

 

๋Œ€ํ•œ ๊ณ ๋ฏผ์ด ๊นŠ์–ด์กŒ๋‹ค.


ํ˜„์‹ค์ ์œผ๋กœ

MVP(์ตœ์†Œ ๊ธฐ๋Šฅ ์ œํ’ˆ)๋ฅผ

์–ด๋–ป๊ฒŒ๋“  ๋จผ์ € ๊ฐœ๋ฐœํ•˜๊ณ ,

์ ์ง„์ ์œผ๋กœ

์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์ด ๊ฐ€์žฅ ์ ์ ˆํ•  ๊ฒƒ ๊ฐ™๋‹ค.


๋‹ค์Œ ๋‹จ๊ณ„: ๊ฐœ์„ ํ•  ์ ๊ณผ ํ•™์Šต ๋ฐฉํ–ฅ ์ •๋ฆฌ

 

์ด๋ฒˆ ๊ณผ์ œ๋ฅผ ํ†ตํ•ด

Dart์˜ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ๋‹ค์ง€๋Š” ๊ฒƒ์€ ๋ฌผ๋ก ,

ํ”„๋กœ์ ํŠธ๋ฅผ ๊ธฐํšํ•˜๊ณ  ํ™•์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•๊นŒ์ง€ ๊ณ ๋ฏผํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.


์ด์ œ ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ค€๋น„ํ•ด์•ผ ํ•œ๋‹ค.

 

โœ… ๊ฒŒ์ž„ ๊ฐœ์„  ๋ฐฉํ–ฅ

  • ํ„ฐ๋ฏธ๋„ ๊ธฐ๋ฐ˜์ด ์•„๋‹Œ, Flutter UI๋ฅผ ํ™œ์šฉํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์ ์šฉ ๊ฐ€๋Šฅ์„ฑ ๊ฒ€ํ† 
  • ์ถ”๊ฐ€ ๊ธฐ๋Šฅ(์•„์ดํ…œ ์‹œ์Šคํ…œ, ๋ชฌ์Šคํ„ฐ AI ๊ฐ•ํ™”) ๋„์ž… ๊ฒ€ํ† 

โœ… ์—ฌํ–‰ ์ผ์ • ๊ด€๋ฆฌ ์•ฑ MVP ๊ธฐํš ์ •๋ฆฌ

  • UI ํ…œํ”Œ๋ฆฟ์„ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ• ์ง€ ํ”ผ๊ทธ๋งˆ๋กœ ์ •๋ฆฌ
  • ์šฐ์„  ๊ฐœ๋ฐœํ•  ๊ธฐ๋Šฅ ๋ฆฌ์ŠคํŠธ ์ •๋ฆฌ ํ›„, Flutter์—์„œ ๊ตฌํ˜„ ๊ฐ€๋Šฅ์„ฑ ๊ฒ€ํ† 

โœ… ์ถ”๊ฐ€ ํ•™์Šต

  • Flutter์—์„œ ์บ˜๋ฆฐ๋” UI ๊ตฌํ˜„ ๋ฐฉ๋ฒ• ์กฐ์‚ฌ
  • Dart์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ(async, await) ํ™œ์šฉ๋ฒ• ์‹ฌํ™” ํ•™์Šต

 

 

์ด๋ฒˆ ๊ณผ์ œ๋ฅผ ํ†ตํ•ด

๋‹จ์ˆœํžˆ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์—์„œ ๋ฒ—์–ด๋‚˜,

์‹ค์ œ ์ œํ’ˆ์œผ๋กœ ๋ฐœ์ „์‹œํ‚ค๊ธฐ ์œ„ํ•œ

๊ธฐํš, UI/UX ๊ณ ๋ฏผ, ๊ธฐ๋Šฅ ํ™•์žฅ์„ฑ๊นŒ์ง€

๊ณ ๋ฏผํ•  ์ˆ˜ ์žˆ์–ด ์˜๋ฏธ ์žˆ๋Š” ์‹œ๊ฐ„์ด์—ˆ๋‹ค. ๐Ÿš€

 


โ…ข. ๋‚ด์ผ์˜ ๋ชฉํ‘œ

 

1๏ธโƒฃ ํŒ€์›๋“ค๊ณผ ํ”„๋กœ์ ํŠธ ๋…ผ์˜ (Flutter ์ ์šฉ ๊ฐ€๋Šฅ์„ฑ ๊ฒ€ํ† )
2๏ธโƒฃ ๊ฒŒ์ž„ ๋กœ์ง ๊ฐœ์„  (์ถ”๊ฐ€ ๊ธฐ๋Šฅ ์ ์šฉ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๋ถ„์„)
3๏ธโƒฃ ReadMe ์ •๋ฆฌ ๋ฐ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง

 

 

์˜ค๋Š˜ ํ•˜๋ฃจ๋„ RPG ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด์„œ

Dart์— ๋Œ€ํ•œ ์‹ค์ „ ๊ฒฝํ—˜์„ ์Œ“์„ ์ˆ˜ ์žˆ์–ด์„œ ์œ ์ตํ–ˆ๋‹ค.

๋„ˆ๋ฌด ์‹œ๊ฐ„์ด ๋นจ๋ฆฌ ์ง€๋‚˜๊ฐ€๋Š”๊ฒŒ ํ ์ด๋‹ค.

 

์•ž์œผ๋กœ Flutter๋ฅผ ๋ฐฐ์šฐ๋ฉด์„œ

์ด ๊ฒŒ์ž„์„ UI๊ฐ€ ์žˆ๋Š” ์•ฑ ํ˜•ํƒœ๋กœ

ํ™•์žฅํ•  ์ˆ˜ ์žˆ์„์ง€ ๊ณ ๋ฏผํ•ด๋ด์•ผ๊ฒ ๋‹ค. ๐Ÿš€

728x90
728x90