์ด ๊ธฐ์ฌ์์๋ Rust๋ก ์์ ๊ฒ์์ ๊ฐ๋ฐํ ๊ฐ์ธ์ ์ธ ๊ฒฝํ์ ๋ํด ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค. ์์
๋ฒ์ ์ ๋ง๋๋ ๋ฐ ์ฝ 24์๊ฐ์ด ๊ฑธ๋ ธ์ต๋๋ค(์ฃผ๋ก ์ ๋
์ด๋ ์ฃผ๋ง์ ์์
ํ์ต๋๋ค). ๊ฒ์์ด ๋๋๋ ค๋ฉด ์์ง ๋ฉ์์ง๋ง ๊ฒฝํํด ๋ณด๋ฉด ๋ณด๋์ฐฌ ๊ฒฝํ์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฒ์๋ถํฐ ๊ฒ์์ ๊ตฌ์ถํ๋ฉด์ ์ ๊ฐ ๋ฐฐ์ด ๋ด์ฉ๊ณผ ๊ด์ฐฐํ ๋ด์ฉ์ ๊ณต์ ํ๊ฒ ์ต๋๋ค.
Skillbox๋ ๋ค์์ ๊ถ์ฅํฉ๋๋ค. XNUMX๋ ์ค์ต ์ฝ์ค
"๋๋ PRO ์น ๊ฐ๋ฐ์์ ๋๋ค" .์๋ฆผ: "Habr"์ ๋ชจ๋ ๋ ์๋ฅผ ์ํ - "Habr" ํ๋ก๋ชจ์ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ Skillbox ๊ณผ์ ์ ๋ฑ๋กํ ๋ 10 ๋ฃจ๋ธ ํ ์ธ.
์ ๋ฌ์คํธ์ธ๊ฐ?
์ ๊ฐ ์ด ์ธ์ด๋ฅผ ์ ํํ ์ด์ ๋ ์ด ์ธ์ด์ ๋ํ ์ข์ ์์์ ๋ง์ด ๋ค์๊ณ ๊ฒ์ ๊ฐ๋ฐ์์ ์ด ์ธ์ด๊ฐ ์ ์ ๋ ์ธ๊ธฐ๋ฅผ ์ป๊ณ ์๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ฒ์์ ์์ฑํ๊ธฐ ์ ์๋ Rust๋ก ๊ฐ๋จํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๊ฒฝํ์ด ๊ฑฐ์ ์์์ต๋๋ค. ์ด๊ฒ์ ๊ฒ์์ ์ฐ๋ ๋์ ๋์๊ฒ ์์ ๋ก์์ ์ฃผ๊ธฐ์ ์ถฉ๋ถํ์ต๋๋ค.
์ ๊ฒ์์ด๊ณ ์ด๋ค ์ข ๋ฅ์ ๊ฒ์์ธ๊ฐ?
๊ฒ์์ ๋ง๋๋ ๊ฒ์ ์ฌ๋ฏธ์์ต๋๋ค! ๋ ๋ง์ ์ด์ ๊ฐ ์์์ผ๋ฉด ์ข๊ฒ ์ง๋ง "ํ" ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ์ ๊ท ์์ ๊ณผ ๋๋ฌด ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋์ง ์์ ์ฃผ์ ๋ฅผ ์ ํํฉ๋๋ค. ์ด๊ฑด ๋ฌด์จ ๊ฒ์์ธ๊ฐ์? ์ ๋ Cities Skylines, Zoo Tycoon, Prison Architect ๋ฐ ํ ๋์ค ์์ฒด๋ฅผ ๊ฒฐํฉํ ํ ๋์ค ์๋ฎฌ๋ ์ดํฐ ๊ฐ์ ๊ฒ์ ๋ง๋ค๊ณ ์ถ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฌ๋๋ค์ด ๋๋ฌ ์ค๋ ํ ๋์ค ์์นด๋ฐ๋ฏธ์ ๊ดํ ๊ฒ์์ผ๋ก ๋ฐํ์ก์ต๋๋ค.
๊ธฐ์ ๊ต์ก
์ ๋ Rust๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์์ง๋ง ์์ํ๋ ๋ฐ ์ผ๋ง๋ ๋ง์ ๊ธฐ์ด ์์ ์ด ํ์ํ์ง ์ ํํ ์์ง ๋ชปํ์ต๋๋ค. ์ ๋ ํฝ์ ์ ฐ์ด๋๋ฅผ ์์ฑํ๊ณ ๋๋๊ทธ ์ค ๋๋กญ์ ์ฌ์ฉํ๊ณ ์ถ์ง ์์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ์ ์ฐํ ์๋ฃจ์ ์ ์ฐพ๊ณ ์์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์ ์ฉํ ๋ฆฌ์์ค๋ฅผ ์ฐพ์์ต๋๋ค.
์ฐ๋ฆฌ ์์ง ๋๊ณ ์๋ ์ค์ด์ผ? โ ๊ฒ์ ๊ฐ๋ฐ์ ํ์ํ Rust ์์ ๋ชฉ๋กRust ๊ฒ์ ๊ฐ๋ฐ ํ์ ๋ ๋ง; ๋ฌด๋ฃ ํฝ์ ์ํธ.
์ ๋ ์ฌ๋ฌ Rust ๊ฒ์ ์์ง์ ์ดํด๋ณด์๊ณ ์ต์ข ์ ์ผ๋ก Piston๊ณผ ggez๋ฅผ ์ ํํ์ต๋๋ค. ์ด์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์ฐ์ฐํ ๋ง๋ฌ์ต๋๋ค. ๊ฒฐ๊ตญ ์์ 2D ๊ฒ์์ ๊ตฌํํ๋๋ฐ ๋ ์ ํฉํ ๊ฒ ๊ฐ์์ ggez๋ฅผ ์ ํํ์ต๋๋ค. Piston์ ๋ชจ๋์ ๊ตฌ์กฐ๋ ์ด๋ณด ๊ฐ๋ฐ์(๋๋ ์ฒ์์ผ๋ก Rust๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋)์๊ฒ๋ ๋๋ฌด ๋ณต์กํฉ๋๋ค.
๊ฒ์ ๊ตฌ์กฐ
๋๋ ํ๋ก์ ํธ์ ์ํคํ ์ฒ์ ๋ํด ์๊ฐํ๋ ๋ฐ ์๊ฐ์ ๋ณด๋์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ "๋ ", ์ฌ๋, ํ ๋์ค ์ฝํธ๋ฅผ ๋ง๋๋ ๊ฒ์ ๋๋ค. ์ฌ๋๋ค์ ๋ฒ์์ ๋์๋ค๋๋ฉฐ ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค. ํ๋ ์ด์ด๋ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ํฅ์๋๋ ๊ธฐ์ ์ ๊ฐ์ง๊ณ ์์ด์ผ ํฉ๋๋ค. ๊ฒ๋ค๊ฐ ์๋ก์ด ์ฌ๋๊ณผ ๋ฒ์์ ์ถ๊ฐํ ์ ์๋ ํธ์ง๊ธฐ๊ฐ ์์ด์ผ ํ์ง๋ง ๋ ์ด์ ๋ฌด๋ฃ๊ฐ ์๋๋๋ค.
๋ชจ๋ ๊ฒ์ ์๊ฐํ ํ ์ผ์ ์์ํ์ต๋๋ค.
๊ฒ์ ์ ์
์์: ์๊ณผ ์ถ์ํ
ggez์์ ์์ ๋ฅผ ๊ฐ์ ธ์๊ณ ํ๋ฉด์ ์์ด ํ์๋์์ต๋๋ค. ๊ธฐ์ด! ์ด์ ๋ช ๊ฐ์ง ์ถ์ํ๋ฅผ ์ํํฉ๋๋ค. ๊ฒ์์ค๋ธ์ ํธ๋ผ๋ ๊ฐ๋ ์์ ๋ฒ์ด๋ ์ถ์ํํ๋ฉด ์ข๊ฒ ๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๊ฐ ๊ฐ์ฒด๋ ์ฌ๊ธฐ์ ์ค๋ช ๋ ๋๋ก ๋ ๋๋ง๋๊ณ ์ ๋ฐ์ดํธ๋์ด์ผ ํฉ๋๋ค.
// the game object trait
trait GameObject {
fn update(&mut self, _ctx: &mut Context) -> GameResult<()>;
fn draw(&mut self, ctx: &mut Context) -> GameResult<()>;
}
// a specific game object - Circle
struct Circle {
position: Point2,
}
impl Circle {
fn new(position: Point2) -> Circle {
Circle { position }
}
}
impl GameObject for Circle {
fn update(&mut self, _ctx: &mut Context) -> GameResult<()> {
Ok(())
}
fn draw(&mut self, ctx: &mut Context) -> GameResult<()> {
let circle =
graphics::Mesh::new_circle(ctx, graphics::DrawMode::Fill, self.position, 100.0, 2.0)?;
graphics::draw(ctx, &circle, na::Point2::new(0.0, 0.0), 0.0)?;
Ok(())
}
}
์ด ์ฝ๋ ์กฐ๊ฐ์ ๋๊ฐ์ด ๋ฉ์ง ๋ฃจํ์์ ์ ๋ฐ์ดํธํ๊ณ ๋ ๋๋งํ ์ ์๋ ๋ฉ์ง ๊ฐ์ฒด ๋ชฉ๋ก์ ์ ๊ณตํ์ต๋๋ค.
mpl event::EventHandler for MainState {
fn update(&mut self, context: &mut Context) -> GameResult<()> {
// Update all objects
for object in self.objects.iter_mut() {
object.update(context)?;
}
Ok(())
}
fn draw(&mut self, context: &mut Context) -> GameResult<()> {
graphics::clear(context);
// Draw all objects
for object in self.objects.iter_mut() {
object.draw(context)?;
}
graphics::present(context);
Ok(())
}
}
main.rs์๋ ๋ชจ๋ ์ฝ๋ ์ค์ด ํฌํจ๋์ด ์์ผ๋ฏ๋ก ํ์ํฉ๋๋ค. ํ์ผ์ ๋ถ๋ฆฌํ๊ณ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ต์ ํํ๋ ๋ฐ ์ฝ๊ฐ์ ์๊ฐ์ ๋ณด๋์ต๋๋ค. ๊ทธ ์ดํ์ ๋ชจ์ต์ ์ด๋ ์ต๋๋ค.
๋ฆฌ์์ค -> ๋ชจ๋ ์์ฐ์ด ์๋ ๊ณณ์
๋๋ค(์ด๋ฏธ์ง).
SRC
- ์ํฐํฐ
โ game_object.rs
- Circle.rs
โ main.rs -> ๋ฉ์ธ ๋ฃจํ
์ฌ๋, ์ธต ๋ฐ ์ด๋ฏธ์ง
๋ค์ ๋จ๊ณ๋ Person ๊ฒ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๋ ๊ฒ์ ๋๋ค. ๋ชจ๋ ๊ฒ์ 32*32 ํ์ผ์ ๊ธฐ์ค์ผ๋ก ๊ตฌ์ถ๋์ด์ผ ํฉ๋๋ค.
ํ
๋์ค ์ฝํธ
ํ ๋์ค ์ฝํธ๊ฐ ์ด๋ป๊ฒ ์๊ฒผ๋์ง ์ฐ๊ตฌํ ํ 4*2 ํ์ผ๋ก ํ ๋์ค ์ฝํธ๋ฅผ ๋ง๋ค๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์ฒ์์๋ ์ด ํฌ๊ธฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ฑฐ๋ 8๊ฐ์ ๊ฐ๋ณ ํ์ผ์ ํฉ์น๋ ๊ฒ์ด ๊ฐ๋ฅํ์ต๋๋ค. ํ์ง๋ง ์ ๋ ๋ ๊ฐ์ ๊ณ ์ ํ ํ์ผ๋ง ํ์ํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๊ณ ๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ ์ฒด์ ์ผ๋ก 1๊ณผ 2๋ผ๋ ๋ ๊ฐ์ ํ์ผ์ด ์์ต๋๋ค.
์ฝํธ์ ๊ฐ ์น์ ์ ํ์ผ 1 ๋๋ ํ์ผ 2๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ํ์ผ์ ์ผ๋ฐ ํ์ผ๋ก ๋ฐฐ์นํ๊ฑฐ๋ 180๋ ๋ค์ง์ด ๋์ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ ๊ตฌ์ฑ(์กฐ๋ฆฝ) ๋ชจ๋
์ฌ์ดํธ, ์ฌ๋, ์ง๋๋ฅผ ๋ ๋๋งํ ํ์ ๊ธฐ๋ณธ ์กฐ๋ฆฝ ๋ชจ๋๋ ํ์ํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ์ ๋ ์ด๊ฒ์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํํ์ต๋๋ค. ๋ฒํผ์ ๋๋ฅด๋ฉด ๊ฐ์ฒด๊ฐ ์ ํ๋๊ณ ํด๋ฆญํ๋ฉด ์ํ๋ ์์น์ ๋ฐฐ์น๋ฉ๋๋ค. ์ฆ, ๋ฒํผ 1์ ์ฌ์ฉํ๋ฉด ์ฝํธ๋ฅผ ์ ํํ ์ ์๊ณ , ๋ฒํผ 2๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
ํ์ง๋ง ์ฌ์ ํ 1๊ณผ 2๊ฐ ๋ฌด์์ ์๋ฏธํ๋์ง ๊ธฐ์ตํด์ผ ํ๋ฏ๋ก ์ด๋ค ๊ฐ์ฒด๊ฐ ์ ํ๋์๋์ง ๋ช ํํ๊ฒ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์์ด์ดํ๋ ์์ ์ถ๊ฐํ์ต๋๋ค. ์ด๊ฒ์ด ์ด๋ป๊ฒ ์๊ฒผ๋์ง์ ๋๋ค.
์ํคํ
์ฒ ๋ฐ ๋ฆฌํฉํ ๋ง ์ง๋ฌธ
์ด์ ์ฌ๋, ์ฝํธ, ๋ฐ๋ฅ ๋ฑ ์ฌ๋ฌ ๊ฒ์ ๊ฐ์ฒด๊ฐ ์๊ฒผ์ต๋๋ค. ๊ทธ๋ฌ๋ ์์ด์ดํ๋ ์์ด ์๋ํ๋ ค๋ฉด ๊ฐ ๊ฐ์ฒด ์ํฐํฐ์ ๊ฐ์ฒด ์์ฒด๊ฐ ๋ฐ๋ชจ ๋ชจ๋์ธ์ง ์๋๋ฉด ๋จ์ํ ํ๋ ์์ด ๊ทธ๋ ค์ ธ ์๋์ง ์๋ ค์ฃผ์ด์ผ ํฉ๋๋ค. ์ด๊ฒ์ ๋ณ๋ก ํธ๋ฆฌํ์ง ์์ต๋๋ค.
์ ๊ฐ ๋ณด๊ธฐ์๋ ๋ช ๊ฐ์ง ํ๊ณ๋ฅผ ๋๋ฌ๋ด๋ ๋ฐฉ์์ผ๋ก ์ํคํ ์ฒ๋ฅผ ๋ค์ ์๊ฐํด ๋ณผ ํ์๊ฐ ์๋ ๊ฒ ๊ฐ์์ต๋๋ค.
- ์์ฒด์ ์ผ๋ก ๋ ๋๋งํ๊ณ ์ ๋ฐ์ดํธํ๋ ์ํฐํฐ๋ฅผ ๊ฐ๋ ๊ฒ์ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค. ์๋ํ๋ฉด ํด๋น ์ํฐํฐ๋ ์ด๋ฏธ์ง์ ์์ด์ดํ๋ ์ ๋ฑ ๋ฌด์์ ๋ ๋๋งํด์ผ ํ๋์ง "์" ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ๊ฐ๋ณ ์ํฐํฐ ๊ฐ์ ์์ฑ๊ณผ ๋์์ ๊ตํํ๊ธฐ ์ํ ๋๊ตฌ๊ฐ ๋ถ์กฑํฉ๋๋ค(์: is_build_mode ์์ฑ ๋๋ ๋์ ๋ ๋๋ง). ์์์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ฐ๋ฅํ์ง๋ง Rust์์๋ ์์์ ๊ตฌํํ๋ ์ ์ ํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๋์๊ฒ ์ ๋ง ํ์ํ ๊ฒ์ ๋ ์ด์์์ด์์ต๋๋ค.
- ์ฌ๋๋ค์ ๋ฒ์์ ๋ฐฐ์ ํ๋ ค๋ฉด ๊ธฐ๊ด ๊ฐ์ ์ํธ ์์ฉ์ ์ํ ๋๊ตฌ๊ฐ ํ์ํ์ต๋๋ค.
- ์ํฐํฐ ์์ฒด๋ ๋น ๋ฅด๊ฒ ํต์ ๋ฅผ ๋ฒ์ด๋๋ ๋ฐ์ดํฐ์ ๋ ผ๋ฆฌ์ ํผํฉ์ด์์ต๋๋ค.
์ข ๋ ์กฐ์ฌ๋ฅผ ํด๋ณด๊ณ ์ํคํ ์ฒ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
ECS - ์ํฐํฐ ๊ตฌ์ฑ ์์ ์์คํ , ๊ฒ์์์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฒ์ ๋๋ค. ECS์ ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ฐ์ดํฐ๋ ๋ก์ง๊ณผ ๋ถ๋ฆฌ๋ฉ๋๋ค.
- ์์ ๋์ ๊ตฌ์ฑ;
- ๋ฐ์ดํฐ ์ค์ฌ ์ํคํ ์ฒ.
ECS์ ํน์ง์ ์ธ ๊ฐ์ง ๊ธฐ๋ณธ ๊ฐ๋ ์ ๋๋ค.
- ์ํฐํฐ - ์๋ณ์๊ฐ ์ฐธ์กฐํ๋ ๊ฐ์ฒด ์ ํ(์ ์, ๊ณต ๋๋ ๊ธฐํ ํญ๋ชฉ์ผ ์ ์์)
- ๊ตฌ์ฑ ์์ - ์ํฐํฐ๋ ๊ตฌ์ฑ ์์๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ - ๋ ๋๋ง ๊ตฌ์ฑ ์์, ์์น ๋ฐ ๊ธฐํ. ์ด๋ ๋ฐ์ดํฐ์จ์ด ํ์ฐ์ค์ ๋๋ค.
- ์์คํ - ๊ฐ์ฒด์ ๊ตฌ์ฑ ์์๋ฅผ ๋ชจ๋ ์ฌ์ฉํ๋ฉฐ ์ด ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋์๊ณผ ๋ ผ๋ฆฌ๋ ํฌํจํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ ๋๋ง ๊ตฌ์ฑ ์์๊ฐ ์๋ ๋ชจ๋ ์ํฐํฐ๋ฅผ ๋ฐ๋ณตํ๊ณ ๋ ๋๋ง์ ์ํํ๋ ๋ ๋๋ง ์์คํ ์ด ์์ต๋๋ค.
์ฐ๊ตฌํ ๊ฒฐ๊ณผ ECS๊ฐ ๋ค์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค๋ ๊ฒ์ด ๋ถ๋ช ํด์ก์ต๋๋ค.
- ์์ ๋์ ๋ ์ด์์์ ์ฌ์ฉํ์ฌ ์ํฐํฐ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ตฌ์ฑํฉ๋๋ค.
- ์ ์ด ์์คํ ์ ํตํด ์ฝ๋ ํผ๋์ ์ ๊ฑฐํฉ๋๋ค.
- is_build_mode์ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ด์ดํ๋ ์ ๋ก์ง์ ๋ ๋๋ง ์์คํ ์ ๋์ผํ ์์น์ ์ ์งํฉ๋๋ค.
ECS๋ฅผ ๊ตฌํํ ํ ์ด๋ฐ ์ผ์ด ์ผ์ด๋ฌ์ต๋๋ค.
๋ฆฌ์์ค -> ๋ชจ๋ ์์ฐ์ด ์๋ ๊ณณ์
๋๋ค(์ด๋ฏธ์ง).
SRC
- ๊ตฌ์ฑ ์์
โposition.rs
โ person.rs
- Tennis_court.rs
-floor.rs
-wireframe.rs
โ mouse_tracked.rs
- ์์
โmouse.rs
- ์์คํ
โ ๋ ๋๋ง.rs
- ์์.rs
- utils.rs
โ world_factory.rs -> ์ธ๊ณ ๊ณต์ฅ ๊ธฐ๋ฅ
โ main.rs -> ๋ฉ์ธ ๋ฃจํ
์ฐ๋ฆฌ๋ ์ฌ๋๋ค์ ๋ฒ์์ ๋ฐฐ์ ํฉ๋๋ค
ECS๋ ์ถ์ ๋ ์ฝ๊ฒ ๋ง๋ค์ด์ฃผ์์ต๋๋ค. ์ด์ ์ํฐํฐ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ณ ํด๋น ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ ผ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ ์ฒด๊ณ์ ์ธ ๋ฐฉ๋ฒ์ด ์๊ฒผ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒฐ๊ตญ ๋ฒ์ ๊ฐ์ ์ฌ๋๋ค์ ๋ถํฌ๋ฅผ ์กฐ์งํ๋ ๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํ์ต๋๋ค.
๋ด๊ฐ ๋ฌด์จ ์ง์ ํ:
- ํ ๋น๋ ๋ฒ์์ ๋ํ ๋ฐ์ดํฐ๋ฅผ Person์ ์ถ๊ฐํ์ต๋๋ค.
- TennisCourt์ ๋ถ์ฐ๋ ์ฌ๋๋ค์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- ์ฌ๋๊ณผ ์ฝํธ๋ฅผ ๋ถ์ํ๊ณ , ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝํธ๋ฅผ ๊ฒ์ํ๊ณ , ํ๋ ์ด์ด๋ฅผ ํด๋น ์ฝํธ์ ๋ฐฐํฌํ ์ ์๋ CourtChoosingSystem์ ์ถ๊ฐํ์ต๋๋ค.
- ๋ฒ์์ ๋ฐฐ์ ๋ ์ฌ๋์ ์ฐพ์ ๊ทธ ์๋ฆฌ์ ์์ผ๋ฉด ํ์ํ ๊ณณ์ผ๋ก ์ฌ๋์ ๋ณด๋ด๋ PersonMovementSystem์ ์ถ๊ฐํ์ต๋๋ค.
ํฉ์ฐ
์ ๋ ์ด ๊ฐ๋จํ ๊ฒ์ ์์ ์ ์ ๋ง ์ฆ๊ฒผ์ต๋๋ค. ๊ฒ๋ค๊ฐ, ๋๋ Rust๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ๊ฒ์ ์์ฑํ๊ฒ ๋ ๊ฒ์ ๊ธฐ์๊ฒ ์๊ฐํฉ๋๋ค. ๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Rust๋ ์ฌ๋ฌ๋ถ์๊ฒ ํ์ํ ๊ฒ์ ์ ๊ณตํฉ๋๋ค.
- Rust๋ ํ๋ฅญํ ๋ฌธ์๋ฅผ ๊ฐ๊ณ ์๊ณ , Rust๋ ๋งค์ฐ ์ฐ์ํฉ๋๋ค.
- ์ผ๊ด์ฑ์ ๋ฉ์ง๋ค.
- C++์์ ์์ฃผ ํ๋ ๋ณต์ , ๋ณต์ฌ ๋๋ ๊ธฐํ ์ ์ฌํ ์์ ์ ์์กดํ ํ์๊ฐ ์์ต๋๋ค.
- ์ต์ ์ ์ฌ์ฉํ๊ธฐ ๋งค์ฐ ์ฝ๊ณ ์ค๋ฅ๋ฅผ ๋งค์ฐ ์ ์ฒ๋ฆฌํฉ๋๋ค.
- ํ๋ก์ ํธ๊ฐ ์ปดํ์ผ๋ ์ ์์๋ค๋ฉด 99%์ ์๊ฐ ๋์ ์ ํํ๊ฒ ์๋ํด์ผ ํฉ๋๋ค. ๋๋ ์ปดํ์ผ๋ฌ ์ค๋ฅ ๋ฉ์์ง๊ฐ ๋ด๊ฐ ๋ณธ ๊ฒ ์ค ์ต๊ณ ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
Rust์ ๊ฒ์ ๊ฐ๋ฐ์ ์ด์ ๋ง ์์๋์์ต๋๋ค. ๊ทธ๋ฌ๋ Rust๋ฅผ ๋ชจ๋ ์ฌ๋์๊ฒ ๊ณต๊ฐํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๋ ์์ ์ ์ด๊ณ ์๋นํ ํฐ ์ปค๋ฎค๋ํฐ๊ฐ ์ด๋ฏธ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋๋ ์ฐ๋ฆฌ์ ๊ณต๋ ์์ ์ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ํ๋ฉด์ ๋๊ด์ ์ผ๋ก ์ธ์ด์ ๋ฏธ๋๋ฅผ ๋ฐ๋ผ๋ณด๊ณ ์์ต๋๋ค.
Skillbox๋ ๋ค์์ ๊ถ์ฅํฉ๋๋ค.
- ์จ๋ผ์ธ ์ฝ์ค
"์ง์ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์" .- ์ค๊ธฐ ์ฝ์ค
"๋ชจ๋ฐ์ผ ๊ฐ๋ฐ์ PRO" .- ์ค๊ธฐ ์ฝ์ค
"0์์ PRO๋ก์ PHP ๊ฐ๋ฐ์" .
์ถ์ฒ : habr.com