-
Java ๊ธฐ์ด ๊ณผ์ ์์ ๋ฐฐ์ด ๋ด์ฉ์ ์ฐ์ตํ๊ณ ๊ฐ๋ฐ์ ํ์ํ ๊ธฐ๋ณธ ์ง์ ์ต๋์ ์ํ ์ฐ์ต
-
Java ํ๋ก๊ทธ๋๋ฐ ์ฐ์ต
-
Java ์ธ์ด ๊ธฐ์ด
-
Class vs Interface
-
-
Event-Driven Programming
-
Java Graphics
-
swing
-
-
Testing
-
JUnit
-
-
Logging
-
Log4J2
-
ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ , ์ค์ต์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ๋ค.
-
-
๋ก๊ทธ ์ถ๋ ฅ ๋ฐ ๊ด๋ฆฌ
-
๋ฒ์
-
log4j-api-2.20.0.jar ์ด์
-
log4j-core-2.20.0.jar ์ด์
-
-
์ค์ ํ์ผ : log4j2.xml
-
-
-
๋จ์ ํ ์คํธ
-
๋ฒ์
-
junit-jupiter-api-5.9.3.jar ์ด์
-
Junit-platform-console-standalone-1.9.3.jar ์ด์
-
-
-
src/main/java/com/nhnacademy/ - com.nhnacademy
-
src/test/ - test code
-
src/main/java/com/nhnacademy/example/ - example code
-
-
์๋ฐ ๊ธฐ์ด
-
-
-
์ฝ๋ฉ ์คํ์ผ
-
-
-
๋จ์ ํ ์คํธ
-
-
-
๋ก๊ทธ ๊ด๋ฆฌ
-
-
Testing Java with Visual Studio Code
-
VSCode ์ค์
-
Keyword
-
awt(Abstract Window Toolkit) / swing
-
accessor / mutator
-
ball world๋ฅผ ๊ตฌ์ฑํ๋ ๊ธฐ๋ณธ ์์
-
2์ฐจ์ ํ๋ฉด์์ ball์ ์ค๋ช ํ ์ ์๋ ์ต์ ์ ๋ณด
-
์์ฑ ํ ์ ๋ณด ๋ณ๊ฒฝ ๋ถ๊ฐ
-
์์น ๋ณ๊ฒฝ ๋ถ๊ฐ
-
-
int x
-
2์ฐจ์ ํ๋ฉด์์์ X์ถ ์ ์์น
-
์์ฑ ์ ์ง์
-
-
int y
-
2์ฐจ์ ํ๋ฉด์์์ Y์ถ ์ ์์น
-
์์ฑ ์ ์ง์
-
-
int radius
-
๋ณผ์ ์ค์ฌ์์ ์ธ๊ณฝ๊น์ง์ ๊ธธ์ด
-
์์ฑ ์ ์ง์
-
-
int getX()
-
๋ณผ์ X ์ขํ ์ป๊ธฐ
-
-
int getY()
-
๋ณผ์ Y ์ขํ ์ป๊ธฐ
-
-
int getRadius()
-
๋ณผ์ ์ค์ฌ์์ ์ธ๊ณฝ๊น์ง์ ๊ธธ์ด๋ฅผ ๋ํ๋ด๋ ๋ฐ์ง๋ฆ ์ป๊ธฐ
-
-
Accessor
-
๋ณ์๊ฐ ๋ฐํ
-
private ๋ณ์์ ๋ํ ์ ๊ทผ ์ง์
-
์ธ๋ถ์์ ์ง์ ์ ์ธ ์ ๊ทผ์ด ํ์ํ ๊ฒฝ์ฐ์๋ง ์ ์
-
-
ํ์
-
get + <field name>
-
getRadius, getColor, โฆโ
-
-
is + <field name>
-
isEnabled, isInterrupted, โฆโ
-
-
๋ค๋ฅธ ์ฉ์ด
-
Getter
-
-
-
Mutator
-
๋ณ์๊ฐ ๋ณ๊ฒฝ
-
private ๋ณ์์ ๋ํ ๋ณ๊ฒฝ ์ง์
-
์ธ๋ถ์์ ์ง์ ์ ์ธ ๋ณ๊ฒฝ์ด ํ์ํ ๊ฒฝ์ฐ์๋ง ์ง์
-
-
ํ์
-
set + <field name>
-
setRadius, setColor, โฆโ
-
-
Setter
-
accessor์ mutator ์ ์๋ ์ต์ํ์ผ๋ก ํ๋ค
-
x, y๋ก ์ด๋ฃจ์ด์ง ์ค์ฌ์ ์ขํ, ๋ฐ์ง๋ฆ, ์์ ๊ฐ๋๋ค.
-
์ค์ฌ์ ์ขํ์ ๋ฐ์ง๋ฆ์ ์์ฑํ ๋ ์ค์ ํ๋ค.
-
์์ ์์ฑํ ๋ ์ง์ ํ๋ค.
-
์์ด ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ, ๊ธฐ๋ณธ์์ ๊ฒ์์(BLACK)์ผ๋ก ์ง์ ํ๋ค.
-
-
๊ฐ ๋ณ์์ ๊ฐ์ ์์ฒญํ ์ ์๋ค.
-
x, y, radius, color
-
-
์ฝ๋ ์ค๋ณต์ ์ต์ํํ๋ผ.
-
ํจ์์ ๋ํ ์ค๋ณต ์ ์๋ ๊ฐ์ง๋ง, ๋์ผํ ์ฝ๋๊ฐ ๋ฐ๋ณต๋๋ ๊ฒ์ ์ต์ํ
-
-
์ฝ๋ฉ ๊ท์น์ ๋ฐ๋ผ ์์ฑํ๋ค.
-
VSCode ๋๋ IntelliJ์ SonarLint์ CheckStyle์ ์ค์นํ์ฌ ํ์ธํ๋ค.
-
class Ball
package com.nhnacademy;
import java.awt.Color;
public class Ball {
...
public Ball(int x, int y, int radius, Color color) {
...
}
public Ball(int x, int y, int radius) {
...
}
public int getX() {
...
}
public int getY() {
...
}
public int getRadius() {
...
}
}
-
Ball์ด ์๊ตฌ๋๋ก ์ ์ ๋์๋?
-
์์ฑ์ ์ฃผ์ด์ง ๊ฐ์ ์ ์ฅํ๊ณ , ๋ฐํ๋๋๊ฐ?
-
-
Ball ์์ฑ์ ์ ๋ ฅ๊ฐ์ ๋ํด ํ์ธํ๋?
-
์ขํ x,y์ ํ์ฉ ๋ฒ์๋?
-
๋ฐ์ง๋ฆ radius์ ํ์ฉ ๋ฒ์๋?
-
-
-
์ฐธ๊ณ - JUnit5 User Guide
-
-
๋์ผํ ๊ธฐ๋ฅ ํ์ธ์ N๋ฒ ๋ฐ๋ณตํด์ ์คํํด ๋ณด์.
-
์๋กญ๊ฒ ์ ์๋ constructor๋ unit test๋ฅผ ์ด์ฉํด ํ์ธํด ๋ณด์.
-
์์ ๋ณ๊ฒฝ ๋ถ๊ฐ
-
Color color
-
๋ณผ ์์
-
์์ฑํ ๋ ์๋ต ๊ฐ๋ฅ
-
์๋ต ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๊ฒ์์(BLACK)
-
-
ํ๋ฉด์ ๊ทธ๋ฆฌ๊ธฐ๋ Java์์ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก, ์๊ตฌํ๋ ํ์์ ๋ง์ถฐ ๊ตฌ์ฑ
-
Java AWT
-
awt์์๋ component๋ฅผ ๋ค์ ๊ทธ๋ ค์ผ ํ๋ ์์ ์ paint ํจ์๋ฅผ ํธ์ถ
-
paintํจ์ ํธ์ถ๊ณผ ํจ๊ป graphic context๋ฅผ ์ด์ฉํด ๊ทธ๋ฆฌ๊ธฐ ๊ฐ๋ฅ
-
-
Ball class์๋ ball์ ํ๋ฉด์์ ํ์ํ๊ธฐ ์ํ ํจ์ ํ์
-
void paint(Graphics g)
-
g - ball์ ํ๋ฉด์ ์ถ๋ ฅํ ์ ์๋๋ก ์ง์ํ๋ graphic context์ instance
-
-
-
awt์์ ์์ ๊ทธ๋ฆฌ๊ธฐ ์ํด์๋ fillOval ์ฌ์ฉ
-
Ball์ ํ์ฅํ PaintableBall์ ์ ์ํ๋ผ.
-
awt graphics context๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ๊ทธ๋ฆด ์ ์๋๋ก ํจ์ paint๋ฅผ ์ ์ํ๋ผ.
-
void paint(Graphics g);
-
-
๋ํ์ ์์ graphics context์์ ์ค์ ํ ์ ์๋ค.
-
setColor(Color color);
-
-
์ธ๋ถ์ ์์์ ํ์ฉํ ๊ฒฝ์ฐ, ์์ ํ์ฉ ํ ํด๋น ์์์ ๋ณ๊ฒฝ๋ ์ํ ์ ์ง๊ฐ ๋ชฉ์ ์ด ์๋๋ผ๋ฉด ํ์ฉ ์ ์ํ๋ก ๋๋ ค๋๋ ๊ฒ์ด ์ข๋ค.
-
PaintableBall์ constructor์์ super class์ constructor๋ฅผ ์ด์ฉํ์๋?
-
paint ํจ์์์ x, y, radius, color๋ฅผ ๊ฐ์ ธ์ฌ ๋, ์ด๋ป๊ฒ ์ฒ๋ฆฌํ์๋?
-
graphic context๋ฅผ ์ด์ฉํด ball ์์ ์ถ๋ ฅํ๊ณ , ์๋ ์ค์ ๋ ์์ผ๋ก ๋๋ ค๋์๋๊ฐ?
-
JFrame์ ์ด์ฉํด Frame ๊ตฌ์ฑ
-
DummyGraphics class๋ฅผ ๋ง๋ค์ด PaintableBall ๊ฒ์ฆํ๊ธฐ
-
Graphics๋ ํ๋ฉด์ ์ถ๋ ฅํ๊ธฐ ์ํ ๊ฒ์ผ๋ก ๊ฒฐ๊ณผ์ ๋ํ ๊ฒ์ฆ์ด ์ด๋ ค์
-
Graphics๋ฅผ ํ์ฅํด์ ๋ง๋ DummyGraphics๋ฅผ ์ด์ฉํด ํด๋น ํจ์๊ฐ ์ ์์ ์ผ๋ก ๋์ํ๋์ง ํ์ธ
-
-
๊ฒ์ฆ์ ํ์ํ ์ ๋ณด ์ ์ฅ
-
color
-
fillOval ํธ์ถ ์ ์ฃผ์ด์ง argument
-
-
void setColor(Color color)
-
์์ ์ค์ ํ๋ ํจ์๋ก, PaintableBall์์ ์ค์ ํ ๊ฐ์ ์ ์ฅํ๋๋ก ๊ตฌ์ฑํ๋ค.
-
-
Color getColor()
-
ํ์ฌ ์ค์ ๋ ์์ ๋ฐํํ๋ค.
-
-
Color getColorHistory()
-
ํ์ฌ ์ ์ด์ ์ ์ค์ ๋์๋ ์๋ค์ ์ ์ฅํ๋ค.
-
-
Color[] clearColorHistory()
-
์ ์ฅ๋์ด ์๋ ์ ๋ณ๊ฒฝ ์ ๋ณด๋ฅผ ์ญ์ ํ๋ค.
-
-
Map<String, Object> getFillOvalParam();
-
fillOval์ ํธ์ถํ๋ฉด์ ์ฌ์ฉ๋ ์ธ์๋ฅผ ์ ์ฅ ํ ๋ฐํํ๋ค.
-
fillOval์ด ํธ์ถ๋์ง ์์๋ค๋ฉด, exception์ด ๋ฐ์ํ๋ค.
-
Map<String, Object>๋ฅผ ๋ฐํํ๋ค.
-
Map์๋ x, y, width, height, color๊ฐ ์ ์ฅ๋๋ค.
-
-
-
-
DummyGraphics๋ฅผ ํตํด ๋์ ์ํค๊ณ , DummyGraphics์ ๋จ๊ฒจ์ง ์ ๋ณด๋ฅผ ์ด์ฉํด ํ์ธ
-
-
ball์ด ์กด์ฌํ ๊ณต๊ฐ์ด๋ฉด์ ํ๋ฉด์ ์ถ๋ ฅ๋ ์์ญ
-
world๋ด์์ ๋์ํ ball์ world์์ ๊ด๋ฆฌ
-
-
JPanel component ํ์ฅ
-
swing component
-
JFrame ์์ฑ ํ panel์ ์ถ๊ฐํ์ฌ ์คํ์ํค๋ฉด ํ๋ฉด์ ์ถ๋ ฅ๋จ
-
-
void add(Ball ball)
-
ball์ ๊ด๋ฆฌ ๋ชฉ๋ก์ ์ถ๊ฐ
-
ball - ์ถ๊ฐํ ball
-
-
void remove(Ball ball)
-
ball์ ๊ด๋ฆฌ ๋ชฉ๋ก์์ ์ ๊ฑฐ
-
ball - ์ ๊ฑฐํ ball
-
-
int getBallCount()
-
ball ๊ฐ์
-
-
Ball getBall(int index)
-
ํน์ ๋ฒ์งธ ball ๊ฐ์ ธ์ค๊ธฐ
-
index - ๊ฐ์ ธ์ฌ ball ์์น
-
-
void removeBall(int index)
-
ํน์ ๋ฒ์งธ ball ์ ๊ฑฐํ๊ธฐ
-
index - ์ ๊ฑฐํ ball ์์น
-
-
void paint(Graphics g)
-
ํ๋ฉด ์ถ๋ ฅ
-
JPanel์ ์ ์๋ void paint(Graphics g) ์ฌ์ ์
-
Panel์ ๋ค์ ๊ทธ๋ ค์ผ ํ๋ ์์ ์ ball ์ถ๋ ฅ
-
Ball ์ข ๋ฅ ํ์ธ ํ์
-
g - ํ๋ฉด ์ถ๋ ฅ์ ์ํ graphic context
-
-
JPanel์ ํ์ฅํ์ฌ World class๋ฅผ ์ ์ํ๋ผ.
-
World์์ ์ ์ํ๊ณ ์๋ method๋ฅผ ๊ตฌํํ๋ผ.
-
์คํ ํ ์๋ฌด๋ฐ ๊ทธ๋ฆผ์ด ์๋ window ์คํ
-
log4j2๋ฅผ ์ด์ฉํด ๋ก๊ทธ๊ฐ ์ถ๋ ฅ๋๋๋ก ๊ตฌ์ฑํ์์ผ๋ฏ๋ก, ์คํํ ๋ ๋ค์๊ณผ ๊ฐ์ ๋ก๊ทธ ์ถ๋ ฅ
2024-01-17T23:53:32.915+0900 INFO world ์์ฑ ์๋ฃ
2024-01-17T23:53:32.918+0900 INFO Frame์ ์ถ๊ฐ ์๋ฃ
2024-01-17T23:53:32.989+0900 INFO ํ๋ฉด ์ถ๋ ฅ
-
-
JFrame์ ์ด์ฉํ Window๋ฅผ ์์ฑํ์ฌ ์ถ๋ ฅํ๋ค.
-
JFrame
-
setSize(int, int)
-
Window ํฌ๊ธฐ๋ฅผ ์ค์ ํ๋ค.
-
-
addWindowListener(WindowListener)
-
window์ ๋ฐ์ํ๋ ์ด๋ฒคํธ๋ฅผ frame์ ์ ๋ฌํ๋ค.
-
windowClosing ์ค์ ์ ํตํด close ์ด๋ฒคํธ ์์ฑํ ๋ System.exit(0)์ ์ด์ฉํด ํ๋ก๊ทธ๋จ์ ์ข ๋ฃํ๋ค.
-
-
add(Component)
-
world๋ JPanel์ ํ์ฅํ์ฌ ์ ์ํ์์ผ๋ฏ๋ก, awt component์ด๋ค.
-
frame์์ ๊ด๋ฆฌํ๋ component๋ก ์ถ๊ฐํ๋ค.
-
-
setEnabled(boolean)
-
Component class์ ์ ์๋ ํจ์๋ก์, component ์ฌ์ฉ ์ฌ๋ถ๋ฅผ ์ค์ ํ๋ค.
-
-
setVisible(boolean)
-
Component๋ฅผ ์์ฑํ๋ค๊ณ ๋ฌด์กฐ๊ฑด ์ถ๋ ฅ๋์ง๋ ์๋๋ค.
-
visible ์ค์ ์ ํด์ผ ํ๊ณ , ๊ธฐ๋ณธ๊ฐ์ false๋ก ์ถ๋ ฅ๋์ง ์๋๋ค.
-
-
-
World class๋ฅผ ์ ์ํ๊ณ , test code๋ฅผ ์ด์ฉํด world๊ฐ ์์ฑ๋จ์ ํ์ธํ์๋ค.
์ด์ ๊ฐ๋ฐํ๋ ค๋ ๊ฒ์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ world์ ball์ด ์ ์๋์์ผ๋ฏ๋ก, world๋ฅผ ์ด์ฉํด ball์ ์ถ๋ ฅํด ๋ณด์.
-
world
-
ํฌ๊ธฐ๋ ๊ฐ๋ก 400, ์ธ๋ก 300์ผ๋ก ํ๋ค.
-
๋ณผ์ด ์ถ๊ฐ๋ ๋ ๋ง๋ค ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๋ค.
-
-
ball
-
10๊ฐ๋ฅผ ์์ฑํ์ฌ ์ถ๊ฐํ๋ค.
-
ํฌ๊ธฐ๋ 10์์ 50์ผ๋ก ์ ํํ๋ค.
-
์์น๋ world ๋ด ์์ ์์น๋ก ํ๋ค.
-
world๋ฅผ ๋ฒ์ด๋๊ฑฐ๋ ๊ฒฝ๊ณ์ ๊ฑธ์ณ ์ถ๋ ฅ๋์ง ์๋๋ก ํ๋ค.
-
-
๋ค์ฏ ๊ฐ์ง ์ ์ค ์์์ ํ๋๋ฅผ ์ ์ฉํ๋ค.
-
BLUE, RED, WHITE, BLACK, GREEN
-
-
-
Test Code
-
Exam-03์ ์ฐธ๊ณ ํ๋ค.
-
-
๋ค์๊ณผ ๊ฐ์ด ์ถ๋ ฅ
-
๋ก๊ทธ ์ถ๋ ฅ์ ๋ค์๊ณผ ๊ฐ๋ค.
2024-01-18T00:07:10.276+0900 INFO world ์์ฑ ์๋ฃ
2024-01-18T00:07:10.279+0900 INFO ball ์ถ๊ฐ : 278, 209, 31, ff00ff00
2024-01-18T00:07:10.279+0900 INFO ball ์ถ๊ฐ : 192, 74, 44, ff0000ff
2024-01-18T00:07:10.280+0900 INFO ball ์ถ๊ฐ : 66, 290, 42, ffff0000
2024-01-18T00:07:10.280+0900 INFO ball ์ถ๊ฐ : 194, 260, 31, ffffffff
2024-01-18T00:07:10.280+0900 INFO ball ์ถ๊ฐ : 27, 105, 25, ffffffff
2024-01-18T00:07:10.280+0900 INFO ball ์ถ๊ฐ : 375, 269, 49, ffffffff
2024-01-18T00:07:10.280+0900 INFO ball ์ถ๊ฐ : 96, 289, 26, ffffffff
2024-01-18T00:07:10.280+0900 INFO ball ์ถ๊ฐ : 97, 94, 16, ffff0000
2024-01-18T00:07:10.281+0900 INFO ball ์ถ๊ฐ : 249, 71, 19, ff00ff00
2024-01-18T00:07:10.281+0900 INFO ball ์ถ๊ฐ : 129, 219, 26, ff000000
2024-01-18T00:07:10.281+0900 INFO Frame์ ์ถ๊ฐ ์๋ฃ
2024-01-18T00:07:10.373+0900 INFO ํ๋ฉด ์ถ๋ ฅ
Ball๊ณผ World๋ฅผ ๋ง๋ค์ด ๋ณด์๋ค. ํ์ง๋ง, ๋จ์ํ ๋ค์ํ ๋ชจ์์ ball์ ๊ทธ๋ ค์ฃผ๋ ๊ณผ์ ๋ง ์ํํ์๋ค. ์ด์ ๋ ball์ ์ด๋์ํค๋ฉฐ ์ด์ ๊ด๋ จ๋ ์ฌ๋ฌ ๊ฐ์ง ๊ฒ๋ค์ ์์๋ณด๋๋ก ํ์
ball์ ์ด๋์ ์๊ฐ์ด ๋ณํํจ์ ๋ฐ๋ผ ์์น๊ฐ ๋ณํํจ์ ๋งํ๋ค.
๊ณต๊ฐ์์ ball์ ์ด๋์ ๋ํ๋ด๊ธฐ ์ํด์๋ ๋จ์ ์๊ฐ๊ณผ ๋จ์ ์๊ฐ ๋์์ ์ด๋ ๊ฑฐ๋ฆฌ๊ฐ ์์ด์ผ ํ๋ค.
๋จ์ ์๊ฐ dt๋ ํ๋ฉด์ ๊ตฌ์ฑํ๋ ์๊ฐ ๊ฐ๊ฒฉ ๋๋ ํ์๋ฅผ ์ํํ ์๋ฏธ ์๋ ๋จ์ ์๊ฐ์ผ๋ก Ball์ด๋ World์์๋ Ball์ ์ด๋์ํค๊ณ ํ๋ฉด์ ์ถ๋ ฅํ๋ ๊ณผ์ ์ด ๋ ๊ฒ์ด๋ค.
-
world์์ ์ด๋์ํฌ ์ ์๋ค.
-
ํน์ ์์น๋ก ์ฎ๊ธธ ์ ์๋ค.
-
๋จ์ ์๊ฐ ๋์ ์ผ์ ๊ฑฐ๋ฆฌ๋งํผ ์ด๋ํ ์ ์๋ค.
-
-
๋ณํ๋์ ๊ฐ์ง๋ค.
-
์ด๋ ๋ช ๋ น(move)์ ๋ฐ๋ผ ์ง์ ๋ ๋ณํ๋๋งํผ ์ด๋ํ๋ค.
-
-
๋ณํ๋์ ๋ณ๊ฒฝํ ์ ์๋ค.
-
int dx
-
๋จ์ ์๊ฐ ๋์์ x์ถ ์ด๋๋์ ๋ํ๋ด๋ ๋ณ์๋
-
-
int dy
-
๋จ์ ์๊ฐ ๋์์ y์ถ ์ด๋๋์ ๋ํ๋ด๋ ๋ณ์๋
-
-
int getDX()
-
๋จ์ ์๊ฐ๋น x์ถ์ผ๋ก ์ด๋๋ ๊ฐ์ ธ์ค๊ธฐ
-
-
int getDY()
-
๋จ์ ์๊ฐ๋น y์ถ์ผ๋ก ์ด๋๋ ๊ฐ์ ธ์ค๊ธฐ
-
-
void setDX(int dx)
-
๋จ์ ์๊ฐ๋น x์ถ์ผ๋ก ์ด๋๋ ์ค์
-
-
void setDY(int dy)
-
๋จ์ ์๊ฐ๋น y์ถ์ผ๋ก ์ด๋๋ ์ค์
-
-
void move()
-
๋จ์ ์๊ฐ๋งํผ ์ด๋์ํค๊ธฐ
-
-
void moveTo(int x, int y)
-
ํน์ ์์น๋ก ์ฎ๊ธฐ๊ธฐ
-
-
PaintableBall class๋ฅผ ํ์ฅํ์ฌ MovableBall class๋ฅผ ์ ์ํ๊ณ ๊ตฌํํ๋ผ.
-
๋จ์ ์๊ฐ๋์ ์ด๋ํ ๋ณ์๋ ์ ์ฅ์ ์ํ ๋ณ์๋ค ์ถ๊ฐ
-
๋ณ์๋ ํ์ธ ๋๋ ๋ณ๊ฒฝ์ ์ํ ํจ์ ์ถ๊ฐ
-
๋จ์ ์๊ฐ๋งํผ ์ด๋์ ์ํ ํจ์ ์ถ๊ฐ
-
ํน์ ์์น๋ก ์ด๋ํ ์ ์๋๋ก ํจ์ ์ถ๊ฐ
-
-
๋ฐ๋์ ํ์ํ์ง ์์ ๋ณ์๋ ํจ์๋ ์ ์ํ์ง ์๋๋ค.
-
์คํ ํ ํ์ธ
-
Test code๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ํ๋๋ฉด ์๋์ ๊ฐ์ ๋ก๊ทธ๊ฐ ์ถ๋ ฅ๋๋ค.
2024-01-18T00:18:49.962+0900 INFO creation : 709, 534, 10 2024-01-18T00:18:49.964+0900 INFO set DX/DY : 18, 69 2024-01-18T00:18:49.976+0900 DEBUG 1, 1705504729964, 727, 603 2024-01-18T00:18:49.983+0900 INFO move : 727, 603 2024-01-18T00:18:49.983+0900 DEBUG 2, 1705504729983, 745, 672 2024-01-18T00:18:49.983+0900 INFO move : 745, 672 2024-01-18T00:18:49.984+0900 DEBUG 3, 1705504729984, 763, 741 2024-01-18T00:18:49.984+0900 INFO move : 763, 741 ... 2024-01-18T00:18:50.112+0900 DEBUG 36, 1705504730112, 4185, 1350 2024-01-18T00:18:50.112+0900 INFO move : 4185, 1350 2024-01-18T00:18:50.112+0900 DEBUG 37, 1705504730112, 4278, 1376 2024-01-18T00:18:50.112+0900 INFO move : 4278, 1376 2024-01-18T00:18:50.112+0900 DEBUG 38, 1705504730112, 4371, 1402 2024-01-18T00:18:50.112+0900 INFO move : 4371, 1402 2024-01-18T00:18:50.112+0900 DEBUG 39, 1705504730112, 4464, 1428 2024-01-18T00:18:50.112+0900 INFO move : 4464, 1428
-
-
Unit Test
-
๊ณต๊ฐ์์ ball์ ๋จ์ ์๊ฐ ๋จ์๋ก ์ด๋์ํจ๋ค
-
๋จ์ ์๊ฐ ๋จ์ ์ด๋์ด๋?
-
์ถ๊ฐ๋ ball์ ํ๋ฒ ์ด๋์ํค๋ ๊ฑธ ๋งํ๋ค.
-
-
-
void reset()
-
์ํ๋ฅผ ์ด๊ธฐํํ๋ค
-
์ค์ ํ maxMoveCount๋ ์ด๊ธฐํํ์ง ์๋๋ค.
-
-
void move()
-
๋จ์ ์๊ฐ ๋จ์ ์ด๋
-
ํธ์ถ ์ ๋ฑ๋ก๋ ๋ณผ ์ค์์ ์ด๋ํ ์ ์๋ MovableBall๋ง 1ํ ์ด๋์ํจ๋ค
-
์ด๋ํ๊ณ ๋๋ฉด ํ๋ฉด์ ๋ค์ ๊ทธ๋ ค์ผ ํ๋ค.
-
AWT์์๋ component๋ฅผ ๋ค์ ๊ทธ๋ฆฌ๊ธฐ ์ํด repaint ํจ์ ์ง์
-
-
์ด๋ ํ์๋ฅผ ์ ์ฅํ๋ค.
-
์ต๋ ์ด๋ ํ์๋ฅผ ๋์ง๋ ์๋๋ค.
-
-
void run()
-
์ง์ ํ ํ์ ๋๋ ์๊ฐ ๋์ ball์ ์ด๋์ํจ๋ค.
-
์ต๋ ์ด๋ ํ์๊ฐ 0์ด๋ฉด, ๊ณ์ ์ด๋ํ๋ค.
-
-
int getMoveCount()
-
์ด๋ ํ์๋ฅผ ๋ฐํํ๋ค.
-
-
int getMaxMoveCount()
-
์ต๋ ์ด๋ ํ์๋ฅผ ๋ฐํํ๋ค.
-
-
void setMaxMoveCount(int count)
-
์ต๋ ์ด๋ ํ์๋ฅผ ์ค์ ํ๋ค.
-
-
World class์ ํ๋๋ฅผ ์ง์ ์ ๊ทผํด์ผ ํ ๊ฒฝ์ฐ, World class๋ฅผ ์์ ํ๊ณ ์ง์ ์ ์ธ ์ ๊ทผ์ ๋ฐฉ์งํ๋ผ.
-
Test code๋ฅผ ์ด์ฉํด ํ์ธํ๋ค.
-
MovableWorld class๋ฅผ ์ ์ํ๊ณ , test code๋ฅผ ์ด์ฉํด ๊ธฐ๋ณธ ๋์์ ํ์ธํด ๋ณด์.
-
์ค์ ํ๋ฉด์์๋ ๋์ผํ๊ฒ ๋์ํ๋์ง ํ์ธํด ๋ณด์.
-
JFrame์ ์ด์ฉํด window๋ฅผ ๋ง๋ค๊ณ , MovableWorld๋ฅผ component๋ก ์ฌ์ฉํด ์ ์ฉํ๋ผ.
-
Window ํฌ๊ธฐ๋ ๊ฐ๋ก 400, ์ธ๋ก 300์ผ๋ก ํ๋ค.
-
-
10๊ฐ์ ball์ ์์ฑํ๋ผ.
-
์์ ์์น window ๋ด๋ก ์ ํํ๋ค.
-
ํฌ๊ธฐ๋ ๋ฐ์ง๋ฆ 10~50 ์ฌ์ด๋ก ํ๋ค.
-
๋ณํ๋์ ๊ฐ๋ก, ์ธ๋ก 10์์ 30 ์ฌ์ด๋ก ํ๋ค.
-
ball ๊ฐ ์ค์ฒฉ๋์ง ์๋๋ก ํ๋ค.
-
ball ๊ฐ ์ค์ฒฉ์ ball์์ ์ง์ํ๋ ํจ์๋ก ๊ตฌํํ ์ ์๋ค.
-
-
-
์ด๋ ํ์๊ฐ ์ ์ ๊ฒฝ์ฐ, ๋ค์๊ณผ ๊ฐ์ด ๋ฉ์ถฐ ์๋ค.
-
์ด๋ ํ์๊ฐ ์กฐ๊ธ๋ง ๋์ด๋ ํ๋ฉด์๋ ๋ช ๊ฐ ๋ณด์ด์ง ์๋๋ค.
-
์ด๋ ํ์๊ฐ ์กฐ๊ธ๋ง ๋ง์์ ธ๋ ์ถ๋ ฅ๋๋ ball์ ํ๋๋ ์๋ค.
-
MovableWorld์์๋ ball์ด ์ด๋ํด์ผ ํ๋ค. ball์ด ์ด๋ํ๋๊ฐ?
-
ํ์ธ์ ์ํด ์ฝ๋๋ฅผ ์ผ๋ถ ์์ ํ์ฌ ball์ ์์น๋ฅผ ํ์ธํด ๋ณด์.
public class MovableBall extends Ball { Logger logger; ... public void move() { ... logger.debug("X : {}, Y : {}", getX(), getY()); } }
-
์ถ๋ ฅ ํฐ๋ฏธ๋์๋ ์๋์ ๊ฐ์ด ์ถ๋ ฅ๋๋ค.
18:07:22.562 [main] DEBUG exam.Exam_3_2_2 - world created 18:07:22.571 [main] DEBUG exam.Exam_3_2_2 - add ball : 331, 187, 36 18:07:22.623 [main] DEBUG MovableBall - 360, 194 18:07:22.623 [main] DEBUG MovableBall - 389, 201 18:07:22.623 [main] DEBUG MovableBall - 418, 208 18:07:22.623 [main] DEBUG MovableBall - 447, 215 18:07:22.623 [main] DEBUG MovableBall - 476, 222 18:07:22.623 [main] DEBUG MovableBall - 505, 229 18:07:22.623 [main] DEBUG MovableBall - 534, 236 18:07:22.623 [main] DEBUG MovableBall - 563, 243 18:07:22.623 [main] DEBUG MovableBall - 592, 250 18:07:22.623 [main] DEBUG MovableBall - 621, 257
-
-
๋ฌด์์ด ๋ฌธ์ ์ผ๊น?
-
MovableWorld๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด \(dt\) ๊ฐ๊ฒฉ๋ง๋ค ball์ ์ด๋์ํด
-
์์์ ๊ตฌํํ MovableWorld์์๋ ๋จ์ ์๊ฐ \(dt\)์ ๋ํด ์ ์ํ์ง ์์ ์๊ฐ์ ๋ฐ๋ฅธ ๋ณํ๋ฅผ ๋ณผ ์ ์์
-
\(dt\)๊ฐ ์์ฃผ ์์ ๊ฐ์ ์ฃผ๊ฑฐ๋ 0์ด๋ผ๋ฉด ๊ฒฐ๊ณผ๋ ์ด๋ป๊ฒ ๋ ๊น?
Exam-08. ๋ค์ ์ฝ๋๋ MovableBall์ ์์ ํ์ฌ ball ์ด๋์ด ๋ณด์ด์ง ์๋ ๋ฌธ์ ์ ๊ดํด ํ์ธํด ๋ณด์
MovableWorldTest์์๋ dt๋ฅผ ์ค์ ํ๊ณ ์์ง ์๋ค. MovableBall์ ๋ก๊ทธ๋ฅผ ์ถ๊ฐํ์ฌ ๋ณผ์ด ์ด๋ป๊ฒ ์ด๋ํ๊ณ ์๋์ง ํ์ธํด ๋ณด์.
public class MovableBall ... {
...
public void move() {
...
logger.debug("{} : {}, {}, {}",
getMovementCount(), System.currentTimeMillis(), getX(), getY());
}
}
-
World class์ ๋ก๊ทธ ์ถ๋ ฅ์ ์ํ logger ์ถ๊ฐ
-
์ด๋ ํ์(movementCount)๋ฅผ ์ถ๊ฐํ๋ค.
-
System class์์ ์์คํ ์ ํ์ฌ์๊ฐ์ ๋ฐ๋ฆฌ์ด ๋จ์๋ก ๊ตฌํ ์ ์๋ค.
์คํ ๋ก๊ทธ
-
๊ฐ ๋ผ์ธ์ ๋ณผ์ด ์ด๋๋ ๋๋ง๋ค ์๊ฐ๊ณผ ball์ ์์น๋ฅผ ํ์
-
์๊ฐ์ ๋ฐ๋ฆฌ์ด(milliseconds) ๋จ์๋ก ํ์
๋จ์ ์๊ฐ์ ์ถ๊ฐํด ๋ณด์.
๋จ์ ์๊ฐ์ ball์ ์ด๋ ๊ฐ๊ฒฉ ์ฌ์ด ์ผ์ ์๊ฐ ๊ธฐ๋ค๋ฆผ์ผ๋ก ๊ตฌํํ ์ ์์ผ๋ฉฐ, Thread.sleep()์ ์ด์ฉํด ๋ฐ๋ฆฌ์ด ๋จ์๋ก ์ค์ ํ ์ ์๋ค
-
move ํจ์๊ฐ ํธ์ถ๋ ํ ์ค์ ๋ ๋จ์ ์๊ฐ๋งํผ ๋๊ธฐํ๋ค.
๋จ์ ์๊ฐ์ ์ถ๊ฐํ ํ ๋ก๊ทธ ์ถ๋ ฅ์ ๋ค์๊ณผ ๊ฐ๋ค.
๋ก๊ทธ ์ถ๋ ฅ
2:28:10.274 [main] DEBUG exam.Exam_3_3_2 - world created
22:28:10.285 [main] DEBUG exam.Exam_3_3_2 - add ball : 217, 281, 28, 13, -25
22:28:10.337 [main] DEBUG MovableWorld - start : 1686662890337
22:28:10.337 [main] DEBUG MovableBall - 1, 1686662890337, 230, 256
22:28:10.350 [main] DEBUG MovableBall - 2, 1686662890350, 243, 231
22:28:10.362 [main] DEBUG MovableBall - 3, 1686662890362, 256, 206
22:28:10.375 [main] DEBUG MovableBall - 4, 1686662890375, 269, 181
22:28:10.388 [main] DEBUG MovableBall - 5, 1686662890388, 282, 156
22:28:10.400 [main] DEBUG MovableBall - 6, 1686662890400, 295, 131
22:28:10.412 [main] DEBUG MovableBall - 7, 1686662890412, 308, 106
22:28:10.425 [main] DEBUG MovableBall - 8, 1686662890425, 321, 81
22:28:10.438 [main] DEBUG MovableBall - 9, 1686662890438, 334, 56
...
22:28:11.080 [main] DEBUG MovableBall - 60, 1686662891080, 997, -1219
22:28:11.093 [main] DEBUG MovableBall - 61, 1686662891093, 1010, -1244
22:28:11.106 [main] DEBUG MovableBall - 62, 1686662891106, 1023, -1269
22:28:11.119 [main] DEBUG MovableBall - 63, 1686662891119, 1036, -1294
22:28:11.132 [main] DEBUG MovableBall - 64, 1686662891132, 1049, -1319
...
22:28:11.576 [main] DEBUG MovableBall - 99, 1686662891576, 1504, -2194
22:28:11.587 [main] DEBUG MovableBall - 100, 1686662891587, 1517, -2219
22:28:11.599 [main] DEBUG MovableWorld - finished : 1686662891599 - 1262
-
100ํ ์ด๋ํ๋ ๋์ 1,262๋ฐ๋ฆฌ ์ด ์๋ชจ
-
๋จ์ ์๊ฐ์ 10ms๋ก ์ค์ ํ์๊ธฐ์ ๊ณ์ฐ์์ผ๋ก๋ 1,000ms ์๋ชจ๋์ด์ผ ์ ์
-
move 1ํ ํธ์ถ ํ ๋ฌด์กฐ๊ฑด 10ms ๋๊ธฐ(๋ง์ง๋ง๋ ๋์ผํจ)
-
-
๋ก๊ทธ๋ก ์ถ๋ ฅ๋ ์์ ์๊ฐ์ด 1,262๋ฐ๋ฆฌ ์ด์ธ ์ด์ ๋?
์ํ ์๊ฐ์ ๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค.
move ๊ฐ ๋จ์ ์๊ฐ(\(dt\))์ ์ค ๊ฒฝ์ฐ ์ค์ ์ํ์๊ฐ์ \(T=dt * n\)์ด ์๋๋ค.
์ด๋ move ์ฒ๋ฆฌ์๊ฐ์ ๊ฐ์ํ์ง ์์ ๊ฒ์ผ๋ก์ ์ค์ ์ํ ์๊ฐ์ \(T = (\alpha + dt) * n\) ๊ฐ ๋๋ค.
move๋ฅผ ์ํํ ํ ๋ค์ move๋ฅผ ํธ์ถํ๊ธฐ๊น์ง์ ๋๊ธฐ ์๊ฐ์ ๋จ์ ์๊ฐ์ด ์๋ ์์ ์๊ฐ๊น์ง ๋จ์ ์๊ฐ์ผ๋ก ํ๋ฉด ๋๋ค.
๋ค์ ๋งํด, move์ ๋ค์ ๊ทธ๋ฆฌ๊ธฐ ๋ฑ์ ์ถ๊ฐ ์์ ์ ์ํด 1ms๋ฅผ ์๋นํ๋ค๊ณ ํ๋ค๋ฉด, ๋ค์ move๋ฅผ ์ํด ๋๊ธฐ ์๊ฐ์ ๋จ์ ์๊ฐ - 1์ด ๋์ด์ผ ํ ๊ฒ์ด๋ค.
๋ค์ ๊ทธ๋ฆผ์ ์ค์ ์ํ ์์ ์ ๊ณ ๋ คํ ๋จ์ ์๊ฐ์ ๋ํ๋ธ ๊ฒ์ด๋ค.
์์ ํ ๊ฒฐ๊ณผ๊ฐ ์๋์ ๊ฐ์ด ์ถ๋ ฅ๋๋์ง ํ์ธํด ๋ณด์.
๋ก๊ทธ ์ถ๋ ฅ
23:02:58.564 [main] DEBUG exam.Exam_3_3_2 - world created
23:02:58.573 [main] DEBUG exam.Exam_3_3_2 - add ball : 238, 224, 34, -27, -29
23:02:58.620 [main] DEBUG MovableWorld - start : 1686664978620
23:02:58.621 [main] DEBUG MovableBall - 1, 1686664978621, 211, 195
23:02:58.632 [main] DEBUG MovableBall - 2, 1686664978632, 184, 166
23:02:58.641 [main] DEBUG MovableBall - 3, 1686664978641, 157, 137
23:02:58.652 [main] DEBUG MovableBall - 4, 1686664978652, 130, 108
23:02:58.661 [main] DEBUG MovableBall - 5, 1686664978661, 103, 79
23:02:58.672 [main] DEBUG MovableBall - 6, 1686664978672, 76, 50
...
23:02:59.062 [main] DEBUG MovableBall - 45, 1686664979062, -977, -1081
23:02:59.072 [main] DEBUG MovableBall - 46, 1686664979072, -1004, -1110
23:02:59.083 [main] DEBUG MovableBall - 47, 1686664979083, -1031, -1139
23:02:59.091 [main] DEBUG MovableBall - 48, 1686664979091, -1058, -1168
23:02:59.102 [main] DEBUG MovableBall - 49, 1686664979102, -1085, -1197
...
23:02:59.582 [main] DEBUG MovableBall - 97, 1686664979582, -2381, -2589
23:02:59.592 [main] DEBUG MovableBall - 98, 1686664979592, -2408, -2618
23:02:59.603 [main] DEBUG MovableBall - 99, 1686664979603, -2435, -2647
23:02:59.611 [main] DEBUG MovableBall - 100, 1686664979611, -2462, -2676
23:02:59.621 [main] DEBUG MovableWorld - finished : 1686664979621 - 1001
๊ฒฐ๊ณผ๋ 1,001๋ฐ๋ฆฌ ์ด๋ก ๊ฑฐ์ ๋น์ทํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ธ๋ค. ๋๋จธ์ง ์ค์ฐจ๋ ๋จ์ ๋ฐ ๊ธฐํ ์ฐ์ฐ์ ์ํฅ์ผ๋ก ์ฐจ์ด ๋ ์ ์๋ค.
๋ฌผ์
-
0.999 ๋ฐ๋ฆฌ์ด์์ ์์ํด 1.001 ๋ฐ๋ฆฌ์ด์ ๋๋ฌ๋ค๊ณ ๊ฐ์ ํ์. ์ด ๊ณผ์ ์ ์ํ ์๊ฐ์?
Keyword
-
Collision detection
-
Bounds
ball์ ์๊ฐ์ด ํ๋ฆ์ ๋ฐ๋ผ ์ง์ ๋ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ๋ค. ๊ทธ๋ฆฌ๊ณ , ์ ํด์ง ๊ณต๊ฐ์ ๋ฒ์ด๋๋๋ผ๋ ์ด๋ฅผ ์์ง ๋ชปํ๊ณ ๊ณ์ ์ด๋ํด ๋ฒ๋ ค ๊ฒฐ๊ตญ์๋ ๊ณต๊ฐ์ ๋ฒ์ด๋ ๋ณด์ด์ง ์๊ฒ ๋๋ค.
๊ฒฝ๊ณ๊ฐ ์๋ ์ธ์์ด๋ ์ ํด์ง ๊ณต๊ฐ์ ์ธ๊ณฝ์๋ ๋ณด์ด์ง ์๋ ๋ฒฝ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๊ณ , ๋ฒฝ์ ball์ด ๋ถ๋ช์น ๊ฒฝ์ฐ ๋ฉ์ถ๊ฑฐ๋ ํ๊ฒจ ๋์์ผ ํ๋ค.
์ฌ๊ฐ์ ๊ฒฝ๊ณ๊ฐ ์๋ ์ธ์์์ ball์ด ๋ฒฝ์ ๋ถ๋ชํ๋ ๊ฒฝ์ฐ๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ๊ฒ์ด๋ค.
์ด๋ฅผ ์์์ ์ค๋ช ํ ์์น ๋ณํ๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
-
์ผ์ชฝ ๋ฒฝ : (dx, dy) โ (-dx, dy)
-
์๋์ชฝ ๋ฒฝ : (dx, dy) โ (dx, -dy)
-
์ค๋ฅธ์ชฝ ๋ฒฝ : (dx, dy) โ (-dx, dy)
-
์์ชฝ ๋ฒฝ : (dx, dy) โ (dx, -dy)
์ค๋ช ์ ๋ฐ๋ผ ball์ด ๋ฒฝ์ ๋ถ๋ชํ์ ๊ฒฝ์ฐ ball์ด ๊ฐ์ง๊ณ ์๋ ๋จ์ ๋ณํ๋๋ง ๋ณ๊ฒฝํด์ ์ฃผ๋ฉด ๋๋ค.
์ด์ ๊ฒฐ์ ์ด ํ์ํ๋ค. ๋๊ฐ ์ด ์์ ์ ํด์ค ๊ฒ์ธ๊ฐ? ball? world?
ball ์ค์ค๋ก๊ฐ ๋ณ๊ฒฝ ์์ ์ ํด์ผ ํ๋ค๋ฉด ์ถฉ๋๊ฐ์ง๋ฅผ ํ๋จํ ์ ์๋ ์ ๋ณด๊ฐ ์ ๊ณต๋์ด์ผ ํ ๊ฒ์ด๊ณ , world๊ฐ ๋ณ๊ฒฝ ์์ ์ ๋์์ค๋ค๋ฉด ball์ ์์น๋ฅผ ํญ์ ๊ฐ์ํด์ผ ํ ๊ฒ์ด๋ค.
๋ ๊ฐ์ง ๋ฐฉ๋ฒ ๋ชจ๋ ๋ง๋ค์ด ๋ณด๋๋ก ํ์.
-
๊ฒฝ๊ณ์์ญ ์ ๋ณด๋ฅผ ๊ฐ์ง๋ค.
-
๊ฒฝ๊ณ์์ญ์ ๋ฒฝ์ผ๋ก ๋งํ ์๋ค.
-
๋ฒฝ์ ๋ถ๋ชํ๋ฉด ํ๊ฒจ ๋๋ค.
-
๋ฒฝ์ ๋ฌดํํ ๋จ๋จํ์ฌ ๋ถ๋ชํ ์๋๋ก ํ๊ฒจ์ ธ ๋์จ๋ค.
-
Rectangle getBounds()
-
๊ฒฝ๊ณ ์์ญ ์ ๋ณด
-
-
void setBounds(Rectangle bounds)
-
๊ฒฝ๊ณ ์์ญ ์ค์
-
-
boolean isOutOfBounds()
-
๊ฒฝ๊ณ๋ฅผ ๋ฒ์ด๋ฌ๋์ง ํ์ธ
-
-
void move()
-
MovableBall์์ ์ ์๋ ๊ฒ๊ณผ ๊ฐ์ด ์ด๋
-
์ด๋ ํ ๊ฒฝ๊ณ ์์ญ์ ๋ฒ์ด๋ ๊ฒฝ์ฐ, ์์ญ ๋ด๋ก ๋ค์ด ์ฌ ์ ์๋๋ก ์ถ๊ฐ ๋์ ์คํ
-
-
void bounce()
-
๊ฒฝ๊ณ ์์ญ์ ๋ฒ์ด ๋ ๊ฒฝ์ฐ, ๊ฒฝ๊ณ ์์ญ ๋ด๋ก ๋ค์ด ์ค๋๋ก d์์น ์์
-
-
๊ฒฝ๊ณ์์ญ์ ์ฌ๊ฐํ์ผ๋ก ์ค์ ํ๋ค.
-
AWT์์ Rectangle class๋ฅผ ์ง์ํ๋ค.
-
Rectangle class์๋ ๋ ๊ฐ์ ์ฌ๊ฐํ์ด ๊ฒน์ณค๋์ง ํ์ธํ๊ฑฐ๋, ๊ฒน์น ์์ญ์ ํ์ธํ ์ ์๋ ํจ์๊ฐ ์ ๊ณต๋๋ค.
-
ball๊ณผ ๊ฒฝ๊ณ์์ญ์ด ๊ฒน์น๋ ๊ฒ์ ball์ ๋๋ฌ์ธ๋ ์ต์ํ์ ์ฌ๊ฐํ์ด ๊ฒฝ๊ณ์์ญ๊ณผ ๊ฒน์น๋ ๊ฒ์ด ๋์ผํ๋ค.
-
ํน์ ํ ์ ์ด ์ฌ๊ฒฉํ์ ๋ฒ์ด๋ ๊ฒ์ contains ํจ์๋ก๋ ์ ์ ์๋ค.
-
-
๋ฒฝ์ ํ๊ธฐ๋ ๊ฒ์ ๋ค์์ ๊ฒฝ์ฐ๋ก ๋ถ๋ฅ๋๋ค.
-
์ผ์ชฝ์ด๋ ์ค๋ฅธ์ชฝ ๋ฒฝ์ ๋ถ๋ชํ ๊ฒฝ์ฐ, X์ ์ด๋ ๋ฐฉํฅ์ด ๋ณ๊ฒฝ๋๋ค. ์ฆ, X์ถ์ ๋ณํ๋ \(dx\)๊ฐ ๋ณ๊ฒฝ๋๋ค.
-
ball์ ์ผ์ชฝ ๋๋ถ๋ถ์ด ๊ฒฝ๊ณ์์ญ์ ๋ฒ์ด๋๋ฉด ์ผ์ชฝ ๋ฒฝ์ ๋ถ๋ชํ ๊ฒ์ด๋ค.
-
ball์ ์ค๋ฅธ์ชฝ ๋๋ถ๋ถ์ด ๊ฒฝ๊ณ์์ญ์ ๋ฒ์ด๋๋ฉด ์ค๋ฅธ์ชฝ ๋ฒฝ์ ๋ถ๋ชํ ๊ฒ์ด๋ค.
-
-
์์ชฝ์ด๋ ์๋์ชฝ ๋ฒฝ์ ๋ถ๋ชํ ๊ฒฝ์ฐ, Y์ ์ด๋ ๋ฐฉํฅ์ด ๋ณ๊ฒฝ๋๋ค. ์ฆ, Y์ถ์ ๋ณํ๋ \(dy\)๊ฐ ๋ณ๊ฒฝ๋๋ค.
-
ball์ ์์ชฝ ๋๋ถ๋ถ์ด ๊ฒฝ๊ณ์์ญ์ ๋ฒ์ด๋๋ฉด ์์ชฝ ๋ฒฝ์ ๋ถ๋ชํ ๊ฒ์ด๋ค.
-
ball์ ์๋์ชฝ ๋๋ถ๋ถ์ด ๊ฒฝ๊ณ์์ญ์ ๋ฒ์ด๋๋ฉด ์๋์ชฝ ๋ฒฝ์ ๋ถ๋ชํ ๊ฒ์ด๋ค.
-
-
์คํ ๊ฒฐ๊ณผ
-
๊ฒฝ๊ณ์์ญ์ ๋ฒ์ด๋ ๊ฒฝ์ฐ, ํ๊ฒจ์ ์์ญ ์์ผ๋ก ๋ค์ด์จ๋ค.
-
ball์ด ๊ฒฝ๊ณ์์ญ์ ๋ฒ์ด๋๋ ์์ ์ ํ์ง ์๊ณ , ์ผ๋ถ๋ ์์ญ์ ๋ฒ์ด๋ฌ๋ค ํ๊ฒจ ๋ค์ด์จ๋ค. ์ ๊ทธ๋ด๊น? ํด๊ฒฐ ๋ฐฉ๋ฒ์?
์ค๋ฅธ์ชฝ ๊ฒฝ๊ณ์ ๋ถ๋ชํ ํ ํ๊ฒจ ๋ ๊ฒฝ์ฐ๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค.
๊ทธ๋ฆผ์ ๋ฐํ์ผ๋ก ์ค๋ฅธ์ชฝ ๊ฒฝ๊ณ ์ถฉ๋ ํ ์ด๋ ํ ์ขํ๋ฅผ ๊ณ์ฐํ๋ฉด ์๋์ ๊ฐ๋ค. \begin{align*} X_R & = X_2 - r\\ x_2 &= x_1 + |d_x|\\ x_3 &= X_R - (|d_x| - (X_R - x_1))\\ &= 2X_R - x_1 - |d_x|\\ &= 2{(X_2 - r)} - x_1 - |d_x|\\ &= 2{(X_2 - r)} - x_2\\ y_3 &= y_1 + dy\\ \end{align*}
๊ทธ๋ฆผ์ ๋ฐํ์ผ๋ก ์ผ์ชฝ ๊ฒฝ๊ณ ์ถฉ๋ ํ ์ด๋ ํ ์ขํ๋ฅผ ๊ณ์ฐํ๋ฉด ์๋์ ๊ฐ๋ค. \begin{align*} X_L & = X_1 + r\\ x_2 & = x_1 - |d_x|\\ x_3 &= X_L + (|d_x| - (x_1 - X_L))\\ &= 2X_L - x_1 + |d_x|\\ &= 2{(X_1 + r)} - x_1 + |d_x|\\ &= 2{(X_1 + r)} - (x_1 - |d_x|)\\ &= 2{(X_1 + r)} - x_2\\ y_3 &= y_1 + d_y\\ \end{align*} ๊ทธ๋ฆผ์ ๋ฐํ์ผ๋ก ์์ชฝ ๊ฒฝ๊ณ ์ถฉ๋ ํ ์ด๋ ํ ์ขํ๋ฅผ ๊ณ์ฐํ๋ฉด ์๋์ ๊ฐ๋ค. \begin{align*} Y_T & = Y_2 - r\\ y_2 &= y_1 + |d_y|\\ y_3 &= Y_T - (|d_y| - (Y_T - y_1))\\ &= 2Y_T - y_1 - |d_y|\\ &= 2{(Y_2 - r)} - y_1 - |d_y|\\ &= 2{(Y_2 - r)} - y_2\\ x_3 &= x_1 + d_x\\ \end{align*}
๊ทธ๋ฆผ์ ๋ฐํ์ผ๋ก ์๋์ชฝ ๊ฒฝ๊ณ ์ถฉ๋ ํ ์ด๋ ํ ์ขํ๋ฅผ ๊ณ์ฐํ๋ฉด ์๋์ ๊ฐ๋ค. \begin{align*} Y_B & = Y_1 + r\\ y_2 & = y_1 - |d_y|\\ y_3 &= Y_B + (|d_y| - (y_1 - Y_B))\\ &= 2Y_B - y_1 + |d_y|\\ &= 2{(Y_1 + r)} - y_1 + |d_y|\\ &= 2{(Y_1 + r)} - (y_1 - |d_y|)\\ &= 2{(Y_1 + r)} - y_2\\ x_3 &= x_1 + d_x\\ \end{align*}
-
๊ฒฝ๊ณ ์์ญ์ ๋ฒ์ด๋ ๊ฒฝ์ฐ, ์ถ๊ฐ์ ์ธ ์ฒ๋ฆฌ๋ฅผ ํตํด ์์น๋ฅผ ๋ณด์ ํ๋ผ.
-
Rectangle์ contains๋ก ๊ฒฝ๊ณ ๊ฒ์ฌ๋ฅผ ํ ๋, ํด๋น ์ ์ด ๊ฒฝ๊ณ ์์ ์กด์ฌํ ๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง ๊ฒฐ์ ํด์ผ ํ๋ค.
-
์ ์์์ ๋ณํ๋ \((|d_x|, |d_y|)\) ๋ ์ ๋๊ฐ์ ๋ํ๋์ ์ฃผ์ํ๋ผ.(๋คํํ ์ต์ข ๊ณ์ฐ์๋ ์ฌ์ฉ๋์ง ์์)
BoundedBall class๋ฅผ ๊ตฌํํจ์ผ๋ก์จ ball์ ์ด์ฉํ ๋ซํ ์ธ์์์ ์์ง์์ ํ์ธํด ๋ณด์๋ค. ๊ทธ๋ผ, ball์ด ์๋ world๋ฅผ ์ด์ฉํ ๊ฒฝ์ฐ๋ ์ด๋ ํ์ง ํ์ธํด ๋ณด์.
์์ง์ด๋ ball์ด ์ฃผ์ด์ง ๊ณต๊ฐ์ ๋ฒ์ด๋๋์ง์ ๋ํด world์์๋ ์ง์์ ์ธ ๊ฐ์๋ฅผ ํตํด ์ ์ ์๋ค.
๋ํ, ํ์ฌ๊น์ง ๊ตฌํ์์ world๋ ball์ ์์ง์์ ๊ด๋ฆฌํ๊ณ ์์ผ๋ฏ๋ก ๋์ฑ๋ ์ฝ๊ฒ ๊ตฌํํ ์ ์๊ณ ์ด๋ฅผ BoundedWorld๋ผ๊ณ ํ์.
BoundedWorld๋ ball์ด ํ์ฉ ๊ณต๊ฐ์ ๋ฒ์ด๋ฌ๋์ง ํ์ธํ๊ณ , ๊ทธ๋ฌํ ๊ฒฝ์ฐ ์ ์ ํ๊ฒ ์ด๋ ๋ฐฉํฅ์ ๋ณ๊ฒฝํ๋๋ก ๋ณํ๋์ ์ฌ์ค์ ํด ์ฃผ์ด์ผ ํ๋ค.
-
BoundedWorld๋ ์์ ์ ๊ณต๊ฐ ์ ๋ณด๊ฐ ๊ฒฝ๊ณ ์ ๋ณด๊ฐ ๋๋ฏ๋ก, ๋ณ๋์ ์ถ๊ฐ๋ ํ์ ์๋ค.
-
BoundedWorld๋ ball์ด ๊ฒฝ๊ณ๋ฅผ ๋ฒ์ด๋ฌ๋์ง ํ์ธํ๊ณ , ์๋ก์ด ์์น๋ฅผ ๊ณ์ฐํด ์ค ํ์๊ฐ ์๋ค.
-
Rectangle getBounds()
-
world์ ์์ญ์ ๊ฐ์ ธ์จ๋ค
-
-
boolean outOfBounds(Ball ball)
-
ball์ด ๊ฒฝ๊ณ๋ฅผ ๋ฒ์ด๋ฌ๋์ง ํ์ธํ๋ค
-
-
void bounceBall(Ball ball)
-
ball์ ์๋ก์ด ์ขํ๋ฅผ ๊ณ์ฐํ์ฌ ์ค์ ํ๋ค
-
-
getBounds
-
World์ ์์ญ์ ๋ํ ์ ๋ณด๋ก์ World class์ ์ถ๊ฐํ๋ค.
-
awt component์์๋ getBounds ํจ์๋ฅผ ์ง์ํ๋ฏ๋ก, ์๋กญ๊ฒ ์ ์ํ ํ์๋ ์๋ค.
-
-
outOfBounds
-
ball์ด world๋ฅผ ๋ฒ์ด๋ฌ๋์ง ํ์ธํ๋ค.
-
BoundedWorld ์์ญ๊ณผ ball ์์ญ์ ์ค์ฒฉ ์์ญ์ ๊ตฌํด ball ์์ญ๊ณผ ๋ค๋ฅผ ๊ฒฝ์ฐ ๋ฒ์ด๋ ๊ฒ์ผ๋ก ํ๋จํ๋ค.
-
-
bounceBall
-
ball์ด ๊ฒฝ๊ณ์์ญ ๋ฒฝ์ ๋ถ๋ชํ์ ๋ ํ๊ฒจ ๋์จ ์์น๋ก ์ด๋์ํจ๋ค.
-
MovableBall๋ง ํด๋นํ๋ค.
-
BoundedBall์ bounce๋ฅผ ์ฐธ๊ณ ํ๋ค.
-
-
move
-
ball์ ์ด๋์ํค๊ณ , ์ถฉ๋ ๊ฒ์ฌ๋ฅผ ํด์ผ ํ๋ฏ๋ก ๊ธฐ๋ฅ ๋ณ๊ฒฝ์ด ํ์ํ๋ค
-
Keyword
-
Collision detection
-
Bounds
BoundedBall์ ๊ฒฝ๊ณ์์ญ์ ์ค์ ํ๊ณ ํด๋น ์์ญ์ ๋ฒ์ด๋ ๊ฒฝ์ฐ, ํ๊ฒจ์ ธ ๋์จ๋ค.
๊ทธ๋ผ, ball์ด ํ๋ ์ด์ ์กด์ฌํ ๋ ๋ค๋ฅธ ball์ด ์ฐจ์งํ๊ณ ์๋ ๊ณต๊ฐ์ ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
๋ํ, ๊ฒฝ๊ณ์์ญ์ ball์ ํ์ฉ๋๋ ๋ฐ๋ฉด ๋ค๋ฅธ ball์ด ์ฐจ์งํ ๊ณต๊ฐ์ ๊ฒฝ์ฐ ํ์ฉ๋์ง ์๋ ์์ญ์ด๋ค. ๋ฐ๋ผ์, ๊ณต๊ฐ์ ๋ํด ํ์ฉ ์์ญ์ด ์์ธ์ง ๋ฐ์ด์ง ๊ตฌ๋ณ์ด ํ์ํ๋ค.
-
ํฐ์ ball์ ๊ธฐ์ค์ผ๋ก ํ๋ค.
-
ํ๋์์ ์์์ ์ ์ํ๊ณ ์๋ world๊ฐ ๋๋ค.
-
๋ถ์์ ball์ ์ค์ฒฉ์ด ํ์ฉ๋์ง ์๋ ๋ค๋ฅธ ๋ฌผ์ฒด๊ฐ ๋๋ค.
-
๋ถ์์์ผ๋ก ํ์๋ ์์ญ์ ํฐ์ ball์ ํ์ฉ๋์ง ์๋ ์์ญ์ด๋ค.
-
world๋ฅผ ๊ธฐ์กด์ผ๋ก ํ ๊ฒฝ์ฐ ๋ด๋ถ ์์ญ์ด ํ์ฉ ์์ญ์ด๊ณ , ๋ค๋ฅธ ball์ ๊ธฐ์ค์ผ๋ก ํ ๊ฒฝ์ฐ, ์ธ๋ถ ์์ญ์ด ํ์ฉ ์์ญ์ด ๋๋ค.
-
ball์ด ๊ฒน์นจ์ ball ์ค๊ฐ ๊ฑฐ๋ฆฌ๊ฐ ๋ ball์ ๋ฐ์ง๋ฆ ํฉ๋ณด๋ค ํฌ๋ฉด ๋๋ค.
-
ball ๊ฐ ๊ฑฐ๋ฆฌ๋ \begin{align*} ์ค์ฌ ๊ฐ ๊ฑฐ๋ฆฌ(D) &= r_1+r_2+d=\sqrt{{(x_1-x_2)}^2 + {(y_1-y_2)}^2}\\ ball ๊ฐ ๊ฑฐ๋ฆฌ(d) &= \sqrt{{(x_1-x_2)}^2 + {(y_1-y_2)}^2} - (r_1 + r_2) \end{align*}
ball ๊ฐ ๊ฑฐ๋ฆฌ๊ฐ ๋ ball์ ๋ฐ์ง๋ฆ ํฉ๋ณด๋ค ์์ ๊ฒฝ์ฐ, ๋ ball์ ์ถฉ๋ํ ์ํ๋ค.
์์์ ์์น์ ์์ฑํ ๊ฒฐ๊ณผ ์ผ๋ถ ball์ด ๊ฒน์นจ์ ball ์ ์๋ค. ์ด๋ ์์ ์ถ๊ฐ๋ ball์ด ์ด๋์ ์ผ๋งํ ํฌ๊ธฐ๋ก ์กด์ฌํ๋์ง ํ์ธํ์ง ์๊ณ ์ถ๊ฐํด ๋ฐ์ํ ๋ฌธ์ ์ด๋ค. world์ ball์ด ์ถ๊ฐ๋ ๋ ํด๋น ์์ญ์ ๋ค๋ฅธ ball์ด ์๋์ง ํ์ธํ๊ณ ์ถ๊ฐํ๋๋ก ์์ ํ๋ค. ๋ง์ฝ, ๋ค๋ฅธ ball์ด ์ฐจ์งํ๊ณ ์์ด ์๋ก์ด ball์ ์ถ๊ฐ๊ฐ ์ด๋ ต๋ค๋ฉด exception์ ๋ฐ์์์ผ์ ๋ค๋ฅธ ์์น์ ์ถ๊ฐ๋ ์ ์๋๋ก ํ๋ค.
์ฐธ๊ณ
-
์ ๊ณฑ๊ทผ ํจ์๋ Math.sqrt()๋ฅผ ์ด์ฉํ๋ค.
-
๋ฐ๋ณตํด์ ball์ ์์ฑํ ๋, ๋ฐ๋์ for๋ฌธ์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒ์ ์๋๋ค.
๋ค์ ๊ทธ๋ฆผ์ ball๊ณผ box ๊ฐ ์ถฉ๋์ ๋ํ๋ธ ๊ฒ์ด๋ค.
\begin{align*} ๋ ์ ์ ์ค์ฌ ๊ฐ ๊ฑฐ๋ฆฌ(d) &= \sqrt {{(x_1-x_2)}^2 + {(y_1-y_2)}^2}\\ ์ต์ ์ถฉ๋ ๊ฑฐ๋ฆฌ(c) &= r1 + {w_2 \over 2} \end{align*}
ball๊ณผ box์ ์ถฉ๋ ์ญ์ ๋ณต์กํด ๋ณด์ด์ง๋ ์๋๋ค. ์ค์ฌ ๊ฐ ๊ฑฐ๋ฆฌ๊ฐ ์ต์ ์ถฉ๋ ๊ฑฐ๋ฆฌ๋ ์งง์ผ๋ฉด ์ถฉ๋์ด๋ค.
ํ์ง๋ง, ๋ค์ ๊ทธ๋ฆผ์ ๋ณด์.
๋ณต์กํ ์์ ์ด์ฉํ๋ฉด ๊ตฌํ ์๋ ์์ ๊ฒ์ด๋ค.
ํ์ง๋ง, ๋ณธ ๊ณผ์ ์์๋ ์ค์ํ ๋ฌธ์ ๊ฐ ๋์ง ๋ชปํ๋ค. ๋ฌผ์ฒด๊ฐ ์ถฉ๋ํ ์กฐ๊ฑด์ ์ ์ํ๊ณ , ์ถฉ๋ ์ ๊ทธ์ ๋ํ ํ๋๋ง ์ ์ํ ์ ์์ผ๋ฉด ๋๋ค.
๋ค์ ๊ทธ๋ฆผ์ ๋ ball์ ์ถฉ๋์ intersects ํจ์๋ก ์ด์ฉํ ๊ฒฝ์ฐ๋ฅผ ํํํ ๊ฒ์ด๋ค.
์ค์ ์ถฉ๋ํ์ง๋ ์์์ง๋ง, ์ถฉ๋ํ ๊ฒ์ผ๋ก ๊ฐ์ ํ๋ค. ๋์ box์๋ ์ ์ฉํ ์ ์์ด ๋ฌธ์ ๋ฅผ ๋จ์ํ์ํฌ ์ ์๋ค.
-
Ball class์ ์๋ ์ถฉ๋ ํ์ธ ํจ์๋ฅผ ์์ ํ๋ค.
-
์์ฑ๋๋ ball์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํด ๋ณธ๋ค.
์คํ ๊ฒฐ๊ณผ
-
ball์ ์ถฉ๋์ด ๋ฐ์ํ ๊ฒฝ์ฐ, ์ถฉ๋ ๋ถ๋ถ์ ๋ถ์์์ผ๋ก ํ์ํ๋ค.
-
์ถฉ๋ ์์ญ์ ์ป์ด ๋ผ ์ ์์ด์ผ ํ๋ค.
-
์ถฉ๋์ ๊ฐ์งํ ๋์ ๊ทธ๋ฆด ๋๊ฐ ๋ฌ๋ผ ๋ฐ๋ก ์ ์ฅํด์ผ ํ๋ค.
-
์ ์ฅ๋ ์ถฉ๋ ์์ญ์ ๋งค๋ฒ ๊ฐฑ์ ๋์ด์ผ ํ๋ค.
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์์ง์ด๋ ๋ ball์ด ์ถฉ๋ํ๋ฉด ์๋ก ํ๊ฒจ ๋๊ฐ๋ค. ์ฌ๊ธฐ์๋ ๋์์ ํ๊ธฐ๋ ๊ฒ์ ๊ตฌํํ๊ธฐ๋ ๋ณต์กํ๋ฏ๋ก, ๋ฌธ์ ๋ฅผ ๋จ์ํํ์ฌ ํน์ ์๊ฐ์ ํ๋์ ball๋ง ์์ง์ฌ์ ๊ณ ์ ๋ ball์ ๋ถ๋ชํ๋ ๊ฒ์ผ๋ก ํ๋ค.
์ด๋ด ๊ฒฝ์ฐ, ์์ง์ด๋ ball์ ์ด๋๋ฅผ ๋ถ๋ช์น๋๋์ ๋ฐ๋ผ ํน์ ํ ๋ฐฉํฅ์ผ๋ก ๊บพ์ฌ์ ํ๊ฒจ ๋๊ฐ๊ฒ ๋๋ค.
๋ค์ ๊ทธ๋ฆผ์ ๋ ball์ด ์ถฉ๋ํ์์ ๋, ๊ฒน์น๋ ๋ถ๋ถ์ ํ์ํ ๊ฒ์ด๋ค.
๊ฒน์น ์์ญ์ ๋ฒํธ๋ก ํ์ฌ, 1, 3, 6, 8์ ์งํ ๋ฐฉํฅ์ ๋ฐ๋๋ก, 2, 7์ X์ถ์ ๊ธฐ์ค์ผ๋ก ๋ฐ๋๋ก(์ฆ, dy๋ฅผ ๋ณ๊ฒฝ), 4, 5๋ Y์ถ์ ๊ธฐ์ค์ผ๋ก ๋ฐ๋๋ก ์์ง์ด๋๋ก ํ๋ฉด ์ ํํ์ง๋ ์์ง๋ง, ์ถฉ๋ ํ ํ๊น์ ๊ตฌํํ ์ ์๋ค.
ํฐ ball์ด ์์ง์ผ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง๊ฐ ๋๋ค.
Keyworld
-
ADT
-
Vector(mathematics and physics)
Ball class ์ฝ๋๋ฅผ ๋ณด๋๋ก ํ์.
-
ball ์์น๋ฅผ ์ํ x,y ์ขํ์ ํฌ๊ธฐ๋ฅผ ์ํด radius๋ฅผ ์ ์ธํ๊ณ ์๋ค.
-
ball์ ์ฐจ์งํ๊ณ ์๋ ์์ญ์ ์ฌ๊ฐ์ผ๋ก ๋๋ฌ์ธ๋ ์ต์ ์์ญ์ region์ผ๋ก ์ ์ธํ๊ณ ์๋ค.
-
instance variable๋ก ์ฌ์ฉํ๋, x, y, radius๋ฅผ ์ ๊ฑฐ
-
Rectangle์ ์ด์ฉํ region์ผ๋ก ๋์ฒด
-
๊ธฐ์กด์ ์ฌ์ฉํ๋ ํจ์์ ์ ์๋ ์์ ํ์ง ์๊ณ , ๊ตฌํ๋ง ์์
-
์ฝ๋๋ฅผ ๋ง์ด ์์ ํ์๋?
-
์์ ๋ง๋ค์ด ๋ test code์๋ ๋ฌธ์ ๊ฐ ์๋? ๋ชจ๋ ์ ์?
-
x, y, radius์ region์ ๊ด๊ณ๋ ์ด๋ป๊ฒ ๋ ๊น?
-
x, y, radius์ access modifier๋?
์์์ 2์ฐจ์ ๊ณต๊ฐ์์์ ๋ฌผ์ฒด ์ด๋์ \((dx, dy)\), ์ฆ, x์ถ์ ๋ณํ๋๊ณผ y์ถ์ ๋ณํ๋์ ์ฌ์ฉํ์๋ค. ํ์ง๋ง, ์ด๊ฒ์ ๋ฌผ์ฒด์ ์ด๋์ ๋ํ๋ด๋ ๋ฐ ํ๊ณ๊ฐ ์๋ค.
์๋ฅผ ๋ค์ด, ball์ 30๋ ๊ฐ๋(\(\theta\))๋ฅผ 10๋งํผ์ ํฌ๊ธฐ(\(v\))๋ก ์๋ค๊ณ ํด๋ณด์. x์ถ๊ณผ y์ถ์ ๋ณํ๋์ ์ผ๋ง์ธ๊ฐ?
\begin{align*} dx = v sin \theta\\ dy = v cos \theta \end{align*}
๊ณ์ฐ์ ๊ฐ๋ฅํ๋ค. ํ์ง๋ง, ์ด๊ฒ์ ๋งค๋ฒ ํ๊ฑฐ๋ ์ฌ๋ฌ ๋ณ์๋์ด ์ค์ฒฉํ๊ฒ ๋๋ค๋ฉด ๋งค์ฐ ๋ณต์กํ ๊ณ์ฐ์ ๋ฐ๋ณต์ ์ผ๋ก ํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์๊ธธ ๊ฒ์ด๋ค.
์ด๋ฌํ ๋ฌธ์ ํด๊ฒฐ์ ์ํด 2์ฐจ์ ๊ณต๊ฐ์์์ ๋ฌผ์ฒด ์ด๋๊ณผ ๊ด๋ จ๋ class๋ฅผ ๋ง๋ค๋๋ก ํ๋ค.
Motion class๋ ๋ฌผ๋ฆฌํ์ด๋ ์ํ์์ ๋งํ๋ Vector๋ฅผ ํํํ ๊ฒ์ด๋ค.
Variables
Motion์ ์ขํ๊ณ๋ฅผ ๊ธฐ์ค์ผ๋ก ํจ์ผ๋ก dx, dy๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ๊ฐ๋๋ค.
-
int dx
-
x์ถ ๋ณํ๋
-
-
int dy
-
y์ถ ๋ณํ๋
-
Method
Motion์ ์ํ๊ณผ ๋ฌผ๋ฆฌํ์์ ์ด์ผ๊ธฐํ๋ ๋ฒกํฐ๋ก์ ๊ฐ๊ฐ์ ์ฑ๋ถ์ ๊ฐ๋ณ์ ์ผ๋ก ๋ฐํํ๊ฑฐ๋, motion ๊ฐ ์ฐ์ฐ์ด ๊ฐ๋ฅํ๋ค.
-
Motion createPosition(int dx, int dy)
-
x์ถ๊ณผ y์ถ ๋ณํ๋์ผ๋ก ์์ฑํ ์ ์๋ค
-
-
Motion createDisplacement(int angle, int magnitude)
-
๊ฐ๋(angle)์ ํฌ๊ธฐ(magnitude)๋ก ์์ฑํ ์ ์๋ค
-
-
void add(Motion other)
-
motion์ ๋ํ ์ ์๋ค.
-
-
void sub(Motion other)
-
motion์ ๋บ ์ ์๋ค.
-
-
int getDX()
-
x์ถ ๋ณํ๋
-
-
x์ถ๊ณผ y์ถ์ ๋ณํ๋์ ์ค ๊ฒฝ์ฐ์ ๊ฐ๋์ ํฌ๊ธฐ๋ฅผ ์ค ๊ฒฝ์ฐ๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ด๋ ต๋ค(์ ์์ ์ค์๋ก ๊ตฌ๋ถํ ์๋ ์์ง๋งโฆ.)
-
Motion์ ์ ์ํ๊ณ , ์์ฑ์๋ class ํจ์๋ก ์ ์ํ๋ค.
-
x์ถ๊ณผ y์ถ์ ๋ณํ๋์ createPosition
-
๊ฐ๋์ ํฌ๊ธฐ๋ createDisplacement
-
๊ณต๊ฐ์์์ ์ด๋์ ๋ฌผ์ฒด๊ฐ ๋ฐฉํฅ๊ณผ ํฌ๊ธฐ(motion)์ ๋ฐ๋ผ ์์น๊ฐ ๋ณํ๋ ๊ฒ์ ๋งํ๋ฉฐ, ์ด๋ฅผ Motion class๋ก ์ ์ํ์๋ค.
์์ MovableBall์ ๋จ์ ์ด๋๋์ dx, dy๋ก ์ค์ ํ์๋ค.
์ด๋ฅผ Motion class๋ก ๋ณ๊ฒฝํ์ฌ ์ ์ฉํด ๋ณด์.
-
๊ธฐ์กด์ ์ฌ์ฉํ๋ move(int dx, int dy)๋ ํธํ์ฑ์ ์ํด ๋๋๋ก ํ๋ค.
-
Ball test code์ Motion ์ถ๊ฐ์ ๊ด๋ จ๋ test code๋ฅผ ์ถ๊ฐํ๋ค.
-
๊ธฐ์กด์ ์์ฑํ๋, Exam-19.java๋ฅผ ์คํํด ๋์ผํ๊ณ ๋์ํ๋์ง ํ์ธํ๋ค.
๋ณ๊ฒฝ ์
public class MovableBall extends Ball {
int dx = 0;
int dy = 0;
long movementCount = 0;
...
}
๋ณ๊ฒฝ ํ
public class MovableBall extends Ball {
motion = new Motion();
long movementCount = 0;
...
}
ํ์ฌ์ world์๋ ball๋ง ์กด์ฌํ๋ค. ball ์ด์ธ์ ๋ค๋ฅธ ๋ฌผ์ฒด๊ฐ ์กด์ฌํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊ฒ์ธ๊ฐ?
์ฌ๊ฐํ์ box๋ฅผ world์ ์ถ๊ฐํด ๋ณด๋๋ก ํ์.
2์ฐจ์ ๊ณต๊ฐ์์์ Box๋ ์ฐ๋ฆฌ๊ฐ ํํ ์๊ณ ์๋ ์ฌ๊ฐํ์ด๋ค.
-
์์ฑ ํ ์ด๋์ด๋ ์ ๋ณด ๋ณ๊ฒฝ ๋ถ๊ฐ
box๋ ์ค์ฌ ์ขํ์ ํญ๊ณผ ๋์ด๋ฅผ ๊ฐ๋๋ค.
-
int x
-
2์ฐจ์ ํ๋ฉด์์์ X์ถ ์ ์์น
-
์์ฑ์ ์ง์
-
-
int y
-
2์ฐจ์ ํ๋ฉด์์์ Y์ถ ์ ์์น
-
์์ฑ์ ์ง์
-
-
int width
-
์์์ ๊ฐ๋ก ๊ธธ์ด
-
์์ฑ์ ์ง์
-
-
int height
-
์์์ ๋์ด
-
์์ฑ์ ์ง์
-
-
Color color
-
box ์์
-
์์ฑํ ๋ ์๋ต ๊ฐ๋ฅ
-
์๋ต์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๊ฒ์์(BLACK)
-
box์๋ ๊ฐ์ ์ป๊ธฐ ์ํ ํจ์์ ํ๋ฉด์์ ํ์ํ๊ธฐ ์ํ ํจ์๊ฐ ์ ๊ณต๋์ด์ผ ํ๋ฉฐ, ์์์ ์ ์ํ ํ๋์ ๊ฐ์ ์ป์ ์ ์๋๋ก ๋ค์์ ํจ์๊ฐ ์๊ตฌ๋๋ค.
-
int getX()
-
x์ถ ์์์์ box ์ค์ฌ
-
-
int getY()
-
y์ถ ์์์์ box ์ค์ฌ
-
-
int getWidth()
-
box ๊ฐ๋ก ๊ธธ์ด
-
-
int getHeight()
-
box ๋์ด
-
-
Color getColor()
-
box ์
-
-
Rectangle getRegion()
-
์์ญ ๋ฐํ
-
-
void paint(Graphics g)
-
๊ทธ๋ฆฌ๊ธฐ
-
๊ธฐ๋ณธ์ ์ธ Box class ๊ตฌ์ฑ์ด ์๋ฃ๋์๋ค๋ฉด, ํ๋ฉด์์ ํ์ํ๊ธฐ ์ํด์๋ ๋ค์์ ํจ์๊ฐ ์๊ตฌ๋๋ค.
ํ๋ฉด์ ๊ทธ๋ฆฌ๊ธฐ๋ awt library๋ฅผ ์ฌ์ฉํ๋ฏ๋ก, ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์๊ตฌํ๋ ํ์์ ๋ง์ถฐ ๊ตฌ์ฑ๋์ด์ผ ํ๋ค.
AWT์์๋ Graphics context ์ ๊ณตํ์ฌ ํ๋ฉด ์ถ๋ ฅ์ด ๊ฐ๋ฅํ๋๋ก ์ง์ํ๋ฏ๋ก, ๊ทธ๋ฆฌ๊ธฐ ํจ์์์๋ ์ ๊ณต๋๋ context๋ฅผ ์ด์ฉํด ๊ทธ๋ ค์ผ ํ๋ค.
void paint(Graphics g) {...}
์ฐธ๊ณ . AWT์์ ์ฌ๊ฐํ ๊ทธ๋ฆฌ๊ธฐ
Box class์์ ๋ํ์ ๊ทธ๋ฆฌ๋ paint ํจ์๋ฅผ ๋ณด๋ฉด, ์ฌ๊ฐํ์ ๊ทธ๋ฆฌ๊ธฐ ์ํด fillRect๋ฅผ ์ฌ์ฉํ๋ค.
-
(x, y)๋ box์ ์ค์ฌ ์ขํ๋ฅผ ๋ํ๋ธ๋ค.
-
fillRect๋ ์ฐ์ธก ์๋จ ๊ผญ์ง์ ๊ณผ ํญ, ๋์ด ์ ๋ณด๊ฐ ํ์ํ๋ค.
-
x, y๋ก ์ด๋ฃจ์ด์ง ์ค์ฌ์ ์ขํ, ํญ, ๋์ด, ์์ ๊ฐ๋๋ค.
-
์ค์ฌ์ ์ขํ, ํญ, ๋์ด๋ ์์ฑ ์ ์ค์ ํ๋ค.
-
๋ณต์ ์์ฑ์๋ฅผ ๊ตฌ์ฑํ๋ค.
-
์์ ์์ฑ ์ ์ค์ ํ ์ ์๊ณ , ๊ธฐ๋ณธ์์ ํ๋์์ผ๋ก ์ง์ ํ๋ค.
-
๊ฐ ํ๋ ๊ฐ์ ์์ฒญํ ์ ์๋ค.
-
์ฝ๋ ์ค๋ณต์ ์ต์ํํ๋ผ.
-
์ฝ๋ฉ ๊ท์น์ ๋ฐ๋ผ ์์ฑํ๋ค.
-
awt Graphics context๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ๊ทธ๋ฆด ์ ์๋๋ก ํจ์๋ฅผ ์ถ๊ฐํ๋ค.
-
๋ํ์ ์์ graphics context์์ ์ค์ ํ ์ ์๋ค. (setColor)
-
์ผ๋ฐ์ ์ผ๋ก ์ธ๋ถ์ ์์์ ํ์ฉํ ๊ฒฝ์ฐ, ์์ ํ์ฉ ํ ํ์ฉ ์ ์ค์ ์ ์ต๋ํ ๋ณต์ํด ๋๋ ๊ฒ์ด ์ข๋ค. ๋ฐ๋ผ์, graphics context์ ์ ์ค์ ์ ๋ณ๊ฒฝํ๊ธฐ ์ ์ ๊ธฐ์กด ์์ ์ ์ฅํ์๋ค ๋ณต์์ ์ฌ์ฉํ๋ค.
Test Code
-
Exam_2_1_1.java์ Exam_2_1_2.java ์ฐธ์กฐ
-
DummyGraphics์ Rect ๊ด๋ จ ํจ์๋ฅผ ์ถ๊ฐํ๋ค.(test code ์ฐธ์กฐ)
World์๋ Ball๋ง ์ถ๊ฐ๋๋๋ก ๊ตฌ์ฑ๋์ด ์๋ค. World์ Box๋ฅผ ์ถ๊ฐํ ์ ์๋๋ก ์์ ํด ๋ณด์.
๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ ๊ฒ ๊ฐ๋ค.
์ฒซ ๋ฒ์งธ, Box class๋ฅผ ์ํ ํจ์๋ค์ ์ถ๊ฐํด ๋ณด์.
์คํ ๊ฒฐ๊ณผ
-
Box ์ถ๊ฐ์ ๋ฌธ์ ๋ ์๋?
-
Data type๋ง ๋ค๋ฅผ ๋ฟ ๋์ผํ ์์ ์ ๋ฌธ์ ์๋?
-
์๋ก์ด ์ข ๋ฅ๊ฐ ์ถ๊ฐ๋๋ค๋ฉด?
box๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ํ๋๋ฅผ ์ถ๊ฐํ ๋ฟ๋ง ์๋๋ผ ๊ด๋ จ๋ ํจ์๋ค์ ๋ชจ๋ ์ถ๊ฐํด์ผ ํ๋ค. ์๊ฐ๋ณด๋ค ๋ฒ๊ฑฐ๋ก์ด ์ผ์ด ์๋ ์ ์๋ค.
์ด๋ World class๊ฐ ํ์ฅ์ฑ์ ์ ํ ๊ฐ์ง๊ณ ์์ง ๋ชปํ๋ค๋ ๊ฒ์ ๋ณด์ฌ ์ค๋ค.
๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ผ๋ก Ball class์ Box class์ ์์ class์ธ Object class๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด ์์ ์ ์๋ค.
Exam-23. World class์ ์ค๋ธ์ ํธ๋ค์ Obect class๋ก ๋จ์ผํ์์ผ ๊ด๋ฆฌํ ๋ก ๋ฐ๊ฟ ๋ณด์
-
์๋ก์ด ์ข ๋ฅ ์ถ๊ฐ์ ๋ฌธ์ ๊ฐ ์๋๊ฐ?
-
paint์์ Object class์ ๋ํด ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๊ฐ?
๋ ๊ฐ์ง ๋ฐฉ์ ๋ชจ๋ ์ข์ ๋ณด์ด์ง ์๋๋ค. ๊ทธ๋ ๋ค๊ณ ํ๋๋ผ๊ณ ๋๋จธ์ง ์ถ๊ฐ ์์ ์ด ์๋ค๋ฉด ์ฌ์ฉํ ์ ์์ ๊ฒ์ด๋ค.
ํ์ง๋ง, World class๋ฅผ ํ์ฅํด์ ์ ์ํ MovableWorld, BoundedWorld๋ ์ด๋ป๊ฒ ํด์ผ ํ๋?
World class์์ ํ๋ ์์ ์ ๋์ผํ๊ฒ ๋ฐ๋ณตํด์ผ ํ๋ค.
๋ฌธ์ ๊ฐ ๊ฐ๋จํ์ง๋ง์ ์์ ๋ฏํ๋ค.
Keyword
-
Interface
-
Subclassing
-
Subtyping
๋ฌธ์ ๋ฅผ ๋จ์ํํ๊ธฐ ์ํด Box class๊ฐ ์ถ๊ฐ๋ World class๋ฅผ ๋ค์ ๋ณด์.
World class ๋ด์์ ball๊ณผ box๋ฅผ ๊ตฌ๋ถํด์ผ ํ ๊ณณ์ ์ด๋์ธ๊ฐ?
์ด๊ฒ๋ง ์ผ๋ฐํํ ์ ์๋ค๋ฉด ๋ฌธ์ ๊ฐ ์ฝ๊ฒ ํด๊ฒฐ๋์ง ์์๊น?
World class๋ ์ถ๋ ฅ๋๋ ์ค๋ธ์ ํธ๋ค์ ๋ชจ๋ ์ผ์ ํ ์์ญ์ ๊ฐ๋๋ค. ์์ ์ ์ํ ball์ด๋ box์์๋ getRegion ํจ์๋ฅผ ์ด์ฉํด ์์ญ ํ์ธ์ด ๊ฐ๋ฅํ๋ค.
์ด๋ฌํ ๊ณตํต์ ์ธ ๊ธฐ๋ฅ๋ค์ด ์ ๊ณต๋๋ type์ ์ ์ํ๋ค.
World class๋ ๋ํ์ ๋ฐ์์ ํ๋ฉด์ ์ถ๋ ฅํ๋ ์์ ์ ํ๋ค. ๋ฐ๋ผ์, ์ค์ ๋ก ํ์ํ ๊ฒ์ paint ํจ์๋ฅผ ๊ฐ์ง ์ค๋ธ์ ํธ๋ฉด ์ด๋ ํ ์ข ๋ฅ๋ ์๊ด์ด ์๋ค.
-
class๊ฐ ์์ ๋์๋ค๋ฉด ์์ ๋ง๋ค์ด ๋ SingleBallWorldTest๋ฅผ ์ด์ฉํด ๋์์ ํ์ธํด ๋ณด์.
-
MultiBallWorldTest์์๋ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์ด๋ ํ์ธ์ ์ํด getBall ํจ์๋ฅผ ์ด์ฉํด Ball์ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ด๋ค. ์์ ํด ๋ณด๋๋ก ํ๋ค.
-
MovableBall, MovableBox ๊ทธ๋ฆฌ๊ณ MovableWorld? Movable!
-
MovableWorld์์ ์ค๋ธ์ ํธ๋ฅผ ์ด๋ํ๊ธฐ ์ํด ํ์ํ ๊ฒ์ ํด๋น ์ค๋ธ์ ํธ์์ ์ด๋์ ํ์ํ ํจ์ ์ง์ ์ฌ๋ถ
-
BoundedBall, BoundedBox ๊ทธ๋ฆฌ๊ณ BoundedWorld?? Bounded!
Keyword
-
Model, View
์ปดํจํฐ ํ๋ฉด์ ์ขํ์ ์ฌ๋๋ค์ด ์ผ๋ฐ์ ์ผ๋ก ์๊ฐํ๋ ์ขํ๊ณ์๋ ๋ค๋ฅด๋ค.
-
ํ์ ๋ฐฉํฅ์ ์ค๋ธ์ ํธ ๋จ์๋ก ์ค์ ํ๊ฑฐ๋, ํจ์ ํธ์ถ ์ ์ง์ ํ ์ ์๋ค.
-
setRotation
-
-
X์ถ ๋๋ Y์ถ์ ๊ธฐ์ค์ผ๋ก ํ์ ํ๋ค.
-
ํ์ ํ ์ถ์ enum์ผ๋ก ์ ์ธํ๋ค.
-
AXIS_X, AXIS_Y
-
-
์ด๋๋์ ๋ฏธ๋ฆฌ ์ค์ ํ๊ฑฐ๋, ํจ์ ํธ์ถ ์ ์ง์ ํ ์ ์๋ค(setTranslation, translate)
-
X์ถ, Y์ถ ๋๋ ์ ์ถ์ ๊ธฐ์ค์ผ๋ก ์ด๋ํ๋ค.(translate)
-
ํฌ๊ธฐ ์กฐ์ ๋น์จ์ ๋ฏธ๋ฆฌ ์ค์ ํ๊ฑฐ๋, ํจ์ ํธ์ถ ์ ์ง์ ํ ์ ์๋ค.(setScale, scale)
-
๊ณต๊ฐ ํฌ๊ธฐ๋ฅผ ํ๋ ๋๋ ์ถ์ํ๋ค(scale)
-
๋จ์ํ ํ๋์ ์ ์ ๋ํ ์ขํ ๋ณํ์ X์ถ์ ๊ธฐ์ค์ผ๋ก ํ์ ์ํจ ํ Y์ ์์ ์์น๋ฅผ ์กฐ์ ํ๋ฉด ๋๋ค.
-
๋ํ์ ๊ฒฝ์ฐ, ๊ธฐ์ค์ ๋ณ๊ฒฝ์ ๋ฌธ์ ๊ฐ ๋์ง ์์ง๋ง, ๊ทธ๋ ค์ง๋ ๋ํ์ด ์์์ ์๋๋ก ๊ทธ๋ ค์ง๋์ง, ์๋์์ ์๋ก ๊ทธ๋ ค์ง๋์ง์ ๋ฐ๋ผ ๋ํ์ ์์น๊ฐ ๋ฌ๋ผ์ง ์ ์๋ค.
-
ํ๋ฉด์ ์ถ๋ ฅํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๊ธฐ์ค์ ์ ๋ณ๊ฒฝํ๋๋ผ๋ ๋ํ์ ๊ทธ๋ฆฌ๋ ๋ฐฉํฅ์ด ์์์ ์๋ ๋ฐฉํฅ์ผ๋ก ์๊ฐํ๋ ๊ฒ๊ณผ ๋ฐ๋๊ฐ ๋๋ค.
-
๋ํ์ ํ์ ๋ฟ๋ง ์๋๋ผ ์์น ์ด๋๋ ํ์ํ๋ค.
Exam-32. ๋ํ ๊ทธ๋ฆด ๋ ์ขํ์ ๋ณํ์ด ํ์ํ๋ค. Ball, box ๋ฑ์์ ๋ํ์ ๊ทธ๋ฆด ๋ ์ขํ๊ฐ ๋ณํ๋ ๋ํ์ ๊ทธ๋ฆฌ๋๋ก ์์ ํด ๋ณด์
-
๋ํ์ ํ๋ฉด์์์ ์ข์ธก ์๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ค. ์ขํ๋ฅผ ๋ณํํ๊ฒ ๋๋ฉด, ์ฐ์ธก ์๋๋ก ๋ณ๊ฒฝ๋์ด ๊ธฐ์ค์ ์ ๋ณ๊ฒฝํด ์ฃผ์ด์ผ ํ๋ค.
Keyword
-
Acceleration
-
Vector Operation
๋ฌผ์ฒด์ ์์ง์์ ๋ณํ์ํค๋ ๊ฒ์ ์ธ๋ถ ์ํฅ์ด๋ค. ์์ ์ ์ํ ๋ฒฝ์ ๋ถ๋ชํ ๊ฒฝ์ฐ ๋ฌผ์ฒด์ ์งํ ๋ฐฉํฅ์ด ๋ณ๊ฒฝ๋๋ ๊ฒ ๋ํ ์ธ๋ถ ์ํฅ์ด๋ฉฐ, ๊ฒ์ ํ๊ฒฝ์์๋ ๋ฌผ์ฒด์ ์์ง์์ ์ํฅ์ ์ค ์ ์๋ ๋ค์ํ ์์๋ค์ ์ถ๊ฐ๊ฐ ๊ฐ๋ฅํ๋ค.
์ฐ๋ฆฌ๊ฐ ๋ชฉํ๋ก ํ๋ ๋ํฌ๊ฒ์์ ๋ํฌ๋ฅผ ์์ ์๋๋ฐฉ ๋ชฉํ๋ฌผ์ ๋งํ๋ ๊ฒ์ด๋ค. ์ค์ ํ๊ฒฝ์ ๋ํฌ์ ์ํด ๋ฐ์ฌ๋ ํฌํ์ ๋ฐ๋, ์ค๋ ฅ, ๊ณต๊ธฐ ์ ํญ ๋ฑ ๋ค์ํ ์์๋ค์ ์ํฅ์ ๋ฐ๋๋ค.
์ด์ ๋ฐ๋ผ ์ฐ๋ฆฌ๊ฐ ๋ง๋๋ ๊ฒ์์์๋ ์ค๋ ฅ๊ณผ ๋ฐ๋์ ์ํฅ์ ๋ฃ์ด ๋ณด๋๋ก ํ๋ค.
์ด๋ค์ ํน์ ๊ฐ์ผ๋ก ์ค์ ๋๊ธฐ๋ณด๋ค๋ ํฌํ์ด ๋ ์๊ฐ๋ ๋จ์ ์๊ฐ ๋์ ์ผ์ ๋์ ์ํฅ์ ์ฃผ๋ ํํ๋ก ํํ๋ ๊ฒ์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ด๋ ์ค๋ธ์ ํธ์ ์ด๋์ ์ํฅ์ ์ฃผ๋ ์ธ๋ถ ํจ๊ณผ๋ผ ํ ์ ์๋ค.
์ธ๋ถ ํจ๊ณผ๋ world ๋ด์์ ๋ฌผ์ฒด์ ์ํฅ์ ์ฃผ์ง๋ง, ๋ณํ๋๊ณผ ๊ฐ์ด ๊ณ ์ ๋์ง ์๊ณ ์ถ๊ฐ๋๋ ์ฑ์ง์ ๊ฐ์ง๊ณ ์๋ค.
๊ธฐ์กด์ ๋ณํ๋์ ๋จ์ ์๊ฐ๋น ๋ณํ๋๊ณผ ๊ฐ์ด ์ง์ํด ๊ฐ์ ์ํฅ์ ์ฃผ๊ธฐ๋ณด๋ค๋ ๋ฌผ์ฒด๊ฐ ์์ง์ผ ๋๋ง๋ค ์ถ๊ฐ์ ์ธ ์ํฅ์ ์ค์ผ๋ก์จ ๋ฌผ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ ๋จ์ ์๊ฐ๋น ๋ณํ๋์ ๋ณํ๋ฅผ ์ค๋ค.
์ธ๋ถ ํจ๊ณผ๋ ๋ฌผ์ฒด์ ์ด๋๊ณผ ๊ด๊ณ๋๋ฏ๋ก Motion์ ์ด์ฉํด ํํํ ์ ์๋ค.
์ฐธ๊ณ
-
์๋ \begin{align*} v = {dx \over dt} \end{align*}
-
๋ฌผ์ฒด์ ์๋์ ์ด๋ ๋ฐฉํฅ์ผ๋ก ๋ฌผ์ฒด์ ๋จ์ ์๊ฐ๋น ์์น ๋ณํ๋ฅผ ๋ํ๋ธ๋ค.
-
์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ฌผ์ฒด์ ์์น๊ฐ ๋ณ๊ฒฝ๋๋ค.
-
-
๊ฐ์๋
stem \begin{align*} a={dv \over dt} \end{align*}
-
์๋์ ๋ณํ๋ก์จ ๋ฌผ์ฒด์ ๋จ์ ์๊ฐ๋น ์๋ ๋ณํ๋ฅผ ๋ํ๋ธ๋ค.
-
์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ฌผ์ฒด์ ์๋๊ฐ ๋ณ๊ฒฝ๋๋ค.
ball์ด๋ box๊ฐ ์์ง์ผ ๋, ์ธ๋ถ ํจ๊ณผ๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด์๋ Movable ์ธํฐํ์ด์ค์ ์ธ๋ถ ํจ๊ณผ๋ฅผ ์ฃผ๋ฉด์ ์์ง์ผ ์ ์๋ ํจ์๋ฅผ ์ถ๊ฐํ๊ณ , ๊ฐ๊ฐ์ class์์ ํจ์๋ฅผ ๊ตฌํํ๋ค.
MovableWorld์๋ ์ธ๋ถ ํจ๊ณผ๋ฅผ ์ถ๊ฐํ์ฌ ๊ด๋ฆฌํ ์ ์๋๋ก ํ๋์ ํจ์๋ฅผ ์ถ๊ฐํ๋ค.
๊ธฐ๋ฅ ์ถ๊ฐ๋ฅผ ์ํด ๋ค์ ํจ์๋ฅผ ์ถ๊ฐํ๋ค.
Method
-
์ธ๋ถ ํจ๊ณผ๋ฅผ ์ถ๊ฐํ๋ค.(addEffect)
-
์ธ๋ถ ํจ๊ณผ๋ 0๊ฐ ์ด์ ์ ์ฉ๋ ์ ์๋ค.
-
-
์ถ๊ฐ๋ ์ธ๋ถ ํจ๊ณผ์ ์๋ฅผ ๋ฐํํ๋ค(getEffectCount)
-
์ธ๋ถ ํจ๊ณผ๋ฅผ ๊ฐ์ ธ์จ๋ค(getEffect)
-
์ธ๋ถ ํจ๊ณผ๋ฅผ ์ ๊ฑฐํ๋ค(removeEffect)
Exam-33. MovableWorld์์ ํ๋์ ball์ ์์ฑํ์ฌ, ball์ด ์์ง์ผ ๋๋ง๋ค ์ธ๋ถ ํจ๊ณผ๋ฅผ ์ถ๊ฐํด ๋ณด์
MovableWorld์ ์ถ๊ฐ๋ ํจ์๋ค์ ๊ตฌํํ๋ค.
-
์ค๋ ฅ ๊ฐ์๋(\(g\))๋ \(a=-9.8 {m \over {s^2}}\) ๋ก ๋ณํ๋ ๊ณ์ฐ์ ์ถ๊ฐํ๊ธฐ ์ํด์๋ ๋ณต์กํ๋ค.
-
์ฌ๊ธฐ์, ์ด๋ฅผ ๋จ์ํ์์ผ์ ๋จ์ ์๊ฐ๋น ์ผ์ ํ ๋ณํ๋์ ์ถ๊ฐํ๋ ๊ฒ์ผ๋ก ์ ๋ฆฌํ๋ค. ๋ค๋ง, ๋ฐฉํฅ์๋ ์ฃผ์ํ์.
-
\(g\) ๋ Y์ถ์ ์์ ๋ฐฉํฅ์ผ๋ก ๊ฐํด์ง๋ ๋ณํ๋์ด๋ค.
-
-
์ค๋ ฅ์ ์ผ์ ํ ๋ฐฉํฅ์ผ๋ก ์ผ์ ํ๊ฒ ์ ์ฉ๋๋ค.
-
๋ฐ๋์ ์๊ฐ์ ๋ฐ๋ผ ๋ณํ ์ ์๋ค.
Movable ์ค๋ธ์ ํธ๋ค์ ๊ฒ์์์์ ์์ง์ด๋ ๋ฌผ์ฒด๋ค์ ๋ํ๋ด๊ณ ์๋ค. MovableWorld์์ ๋ฑ๋ก๋ ์ค๋ธ์ ํธ ์ค Movable type์ ์ค๋ธ์ ํธ๋ค๋ง ์ฐพ์์ ๋ฐ๋ณต๋ฌธ์ ํตํด ์์ฐจ์ ์ผ๋ก ์ด๋์์ผฐ์ง๋ง, Thread๋ฅผ ์ ์ฉํ๋ฉด Movable type ์ค์ค๋ก ์์ง์ด๋๋ก ํ ์ ์๋ค.
๋จผ์ , Thread์ ๋ํด ์์๋ณด๊ณ ๊ณ์ ์งํํ์
Keyword
-
Thread
-
Synchronization
Thread๋ฅผ ํ์ตํ๊ธฐ ์ ๊น์ง๋ ํ๋ก๊ทธ๋จ์ ๋๋ถ๋ถ์ด ํ๋์ thread์์ ๋์ํ์๋ค. (์ ํํ ๋งํด์๋ ๊ทธ๋ ์ง ์์ง๋ง, ์ต์ํ ์ฌ๋ฌ๋ถ์ด ์์ฑํ ์ฝ๋์ ๋ํด์๋ ๊ทธ๋ฌํ๋ค)
์ด์ ๋ thread์ ๋ํด์ ํ์ตํ๊ณ ์ฐ์ตํ์์ผ๋ฏ๋ก ๊ฒ์์ ์ ์ฉํด ๋ณด๋๋ก ํ์.
Thread์ ๋ํด ์ดํดํ์๋ค๋ฉด, Movable์ Thread ์ ์ฉ์ด ๊ฐ๋ฅํ Runnable ์ธํฐํ์ด์ค์ ํ์ฅ์ผ๋ก ์ ์ํ๋ค.
Movable์ ์ค์ค๋ก ์์ง์ผ ์ ์๋ type์ผ๋ก์, ์ด์ ํ์ํ ํจ์ ์ถ๊ฐ๊ฐ ์๊ตฌ๋๋ค.
Exam-36. Movable ์ธํฐํ์ด์ค๋ฅผ Runnable ์ธํฐํ์ด์ค์ ํ์ฅ์ผ๋ก ์ ์ํ๊ณ , MovableBall, MovableBox ๋ฑ์ thread๋ก ๋์ํ๋๋ก ์์ ํ๋ผ
-
๊ตฌํ class๋ ๋ณ๋์ Thread ์ธ์คํด์ค์ ๋์์ ๋ฐ์ง ์๋๋ก ๊ตฌํํ๋ค.
์ฃผ์
-
paint ํจ์๊ฐ ์ด๋ thread์์ ์คํ๋๋์ง ํ์ธํ๋ผ.
-
๋์ผํ ์์์ ๋ํด ๋ ๊ฐ ์ด์์ thread๊ฐ ๋์ ์ ๊ทผ ์ ๋ฌธ์ ๊ฐ ๋ ์ ์๋ค.
-
Thread ํ์ต์์ ๋ฐฐ์ด ๋ด์ฉ์ผ๋ก ๋์ฒํ๋ผ
-
MovableWorld์์๋ ์ผ์ ํ ์๊ฐ ๊ฐ๊ฒฉ์ผ๋ก ์ค๋ธ์ ํธ๋ฅผ ์ด๋์ํค๋ ์์ ์ ์ํํ์๋ค.
์ค๋ธ์ ํธ๋ฅผ Runnable type์ผ๋ก ์ ํํ์ฌ ๊ฐ๋ณ์ ์ผ๋ก ๋์ํ๊ฒ ํ ๊ฒฝ์ฐ, ์ค๋ธ์ ํธ ์ด๋์ ์ํ ์์ ์ ํ์ ์๊ฒ ๋๊ณ ์ ์ฒด์ ์ธ ๋์์ ์์๊ณผ ๋ฉ์ถค๋ง ์ํํ๋ฉด ๋๋ค.
๋ํ, MovableWorld์์๋ง์ ๊ด๋ฆฌ ์์ ์ด ํ์ํ๋ค๋ฉด, MovableWorld๋ thread๋ฅผ ์ด์ฉํด ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ๋ ์ค๋ธ์ ํธ๋ก ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
์ด๋ฅผ ์ํด ํจ์๋ฅผ ์์ ํ๋ค.
-
Thread์ ์ํด ๊ฐ๋ณ ๋์ํ ๊ฒ์ Runnable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ค.
์์์๋ BoundedWorld์์ ์ค๋ธ์ ํธ๋ฅผ ์ด๋์ํค๊ณ , ์ถฉ๋ ๊ฐ์ง ๋ฐ ๊ทธ์ ๋ฐ๋ฅธ ํ๊ธฐ๊ธฐ๋ฅผ ๊ตฌํํ์๋ค. Movable ๊ฐ์ฒด์ ๋ํด thread๋ฅผ ์ ์ฉํ์ฌ ์ค์ค๋ก ์์ง์์ ๊ตฌํํ ํ ๋ ์ด์ BoundedWorld์์ ๊ฐ๋ณ ์ค๋ธ์ ํธ์ ๋ํ ์ถฉ๋ ๊ฒ์ถ ๋ฐ ํ๊ธฐ๊ธฐ ๊ตฌํ์ด ์ด๋ ค์์ก๋ค. ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
BoundedWorld์ ๊ธฐ๋ณธ ์ญํ ์ ์ ์งํ์ง๋ง, ์ค๋ธ์ ํธ๋ฅผ ์ด๋์ํค๋ ์ฃผ์ฒด๊ฐ ๋ณ๊ฒฝ๋์์ผ๋ฏ๋ก ์ด๋ฅผ ์กฐ์ ํด ๋ณด์.
BoundedWorld์์ ์ด๋๊ณผ ์ถฉ๋ ๊ฒ์ถ์ ํจ๊ป ํ ๊ฒฝ์ฐ, ์ด๋ ํ ์์ ์ ๋ํด์ ์ค์ค๋ก ์ ์ ์์ง๋ง, ๊ฐ๋ณ ์ค๋ธ์ ํธ๊ฐ ์ค์ค๋ก ์์ง์ผ ๊ฒฝ์ฐ ํด๋น ์์ ์ ์ ์ ์๋ค.
์ด๋ป๊ฒ ํด๊ฒฐํด์ผ ํ ๊น?
๊ณ ๋ ค ์ฌํญ์ ๋ค์๊ณผ ๊ฐ๋ค.
-
์์ง์ด๋ ์ฃผ์ฒด๋ ์ค๋ธ์ ํธ์ด๋ค.
-
๊ฒฝ๊ณ ์์ญ์ ๋ํ ์ ๋ณด๋ ํด๋น ์ค๋ธ์ ํธ๊ฐ ๊ฐ์ง ์ ์๋ค.
-
์ค๋ธ์ ํธ ๊ฐ ์ถฉ๋ ํ์ธ์ ์ํด์๋ World์ ์ค๋ธ์ ํธ ๋ชฉ๋ก์ด ํ์ํ๋ค.
-
์ค๋ธ์ ํธ ๋ฑ๋ก ์ ๋ชฉ๋ก์ ๋ฐ๊ณ , ์ ๊ท ๋ฑ๋ก ์ ์ ๋ฐ์ดํธ๋๊ฑฐ๋
-
๋งค๋ฒ World์ ์์ฒญํ๊ฑฐ๋
-
Exam-38. ์ค๋ธ์ ํธ๊ฐ ์ด๋ ํ World๋ก๋ถํฐ ์ ๋ณด๋ฅผ ๋ฐ์ ์ถฉ๋ ๊ฐ์ง ๋ฐ ํ๊น ๊ตฌํ์ด ๊ฐ๋ฅํ๋๋ก ์์ ํ๋ผ
-
World์ ์ค๋ธ์ ํธ๋ฅผ ์ถ๊ฐํ ๋, ์ค๋ธ์ ํธ์ world๋ฅผ ์ฐธ์กฐํ ์ ์๋๋ก ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
-
์ค๋ธ์ ํธ๋ ์ด๋ ํ ์ถฉ๋ ํ์ธ world๋ก๋ถํฐ ์ฅ์ ๋ฌผ(๊ฒฝ๊ณ์์ญ, ๋ค๋ฅธ ์ค๋ธ์ ํธ)์ ๋ํ ์ ๋ณด๋ฅผ ๋ฐ์ ์ถฉ๋ ํ์ธํ๋ค.
-
์ถฉ๋ ๊ฒ์ถ ์ ํ๊ธฐ๋ฉด ์ฒ๋ฆฌํ๋ค.
Keyword
-
GUI
๊ฒ์ ํ๋ฉด์๋ ๋ค์ํ ๋ฌผ์ฒด๋ค์ ์กด์ฌํ ์ ์๋ค.
ํฌํ์ ๋ฐ์ฌํ๋ ํฌ, ํฌํ์ด ํ๊ฒจ์ ธ ๋์ค๋ ๋ฒฝ์ด๋ ๋ฌผ์ฒด, ํฌํ์ด ๋ฐํ ๋ฒ๋ฆฌ๋ ๋ช์ง๋ ๊ทธ๋ฆฌ๊ณ ํฌํ์ผ๋ก ๋ง์ถ๋ฉด ์ ์๋ฅผ ์ป์ ์ ์๋ ๋์ ๋ฌผ์ฒด ๋ฑ์ด ์๋ค.
-
ํฌํ์ ๋ฐ์ฌํ๋ ๋ฌผ์ฒด๋ก์ ํฌํ์ ๊ฐ๋, ์๋ ๋ฑ์ ์กฐ์ ํ ์ ์๋ค.
-
ํฌ์ ์ ๋์์ ํฌํ์ด ๋ฐ์ฌ๋๋ค.
-
ํฌ์ ์ ํ์ชฝ์ด ๊ณ ์ ๋์ด ์๊ณ , ๋ค๋ฅธ ํ์ชฝ์ ์์ ๊ทธ๋ฆฌ๋ฉฐ ํ์ ํ ์ ์๋ค.
-
ํฌํ์ ๋ง์ผ๋ฉด ๊ฒ์์ ๋๋๋ค.
-
ํฌํ์ ๋ฌผ์ฒด์ ๋ถ๋ชํ ๊ฒฝ์ฐ ํ๊ธฐ์ง๋ง ๋ช์ง๋์์๋ ํ๊ธฐ์ง ์๊ณ , ๋ฉ์ถฐ ๋ฒ๋ฆฐ๋ค.
-
ํฌํ์ด ๋ช์ง๋์ ๋น ์ง๋ฉด ํด๋น ๊ฒ์์ ๋ชฉํ๋ฌผ์ ๋งํ์ง ๋ชปํ ๊ฒ์ด๋ค.
-
๋ช์ง๋๊ฐ ๋ฐ๋์ ๋ฐ๋ฅ์ ์์นํ ํ์๋ ์๋ค.
-
๊ฒ์์ด ์คํ๋๋ ๊ณต๊ฐ์ผ๋ก ๋ค์ฉํ ๊ตฌ์ฑ ์์๊ฐ ํฌํจ๋๋ค.
-
๋ํฌ
-
์ฅ์ ๋ฌผ
-
๋ชฉํ๋ฌผ
-
-
๊ฒ์ ์ด์์ ํ์ํ ์ ์ด๊ฐ ์ถ๊ฐ๋๋ค.
-
ํฌํ ๋ฐ์ฌ
-
์ด๊ธฐํ
-
-
๊ฒ์ ๋ด์์ ๋ฐ์ํ๋ ์ฌ๊ฑด(?)์ ์ธ๋ถ๋ก ์๋ฆฌ๊ธฐ ์ํ ๋ฐฉ๋ฒ ์ ๊ณต
-
ํฌํ ๋ฐ์ฌ ์ด๋ฒคํธ
-
๋ชฉํ๋ฌผ ๋งํ๊ธฐ๊ฐ ๋๋๊ธฐ ์ ๊น์ง ๋ค์ ํฌํ ๋ฐ์ฌ์ ๊ฐ์ด UI๋ฅผ ์ ์ดํ ์ ์๋ค.
-
-
๋ชฉํ๋ฌผ ๋งํ๊ธฐ ์ฑ๊ณต
-
์ ์๋ฅผ ์ฆ๊ฐ์ํค๊ณ , ๋ค์ ์ฅ๋ฉด์ ์ค๋นํ๋ค.
-
-
๋ชฉํ๋ฌผ ๋งํ๊ธฐ ์คํจ
-
์คํจ ํ์๋ฅผ ์ฆ๊ฐ์ํค๊ณ , ๋์ผํ ํ๊ฒฝ์์ ๋ค์ ์คํํ ์ ์๋๋ก ์ค๋นํ๋ค.
-
-
-
๊ฒ์์ ๊ตฌ์ฑํ Frame
-
๋ค์ํ component๋ฅผ ์ด์ฉํ์ฌ ๊ฒ์ ์ธํฐํ์ด์ค ๊ตฌ์ฑ
-
์ธํฐํ์ด์ค์ ๊ฒ์ ํ๋ฉด์ด ์ฐ๊ฒฐ๋ ์ ์๋๋ก ์ง์ํ๋ค.
๋ฌธ์ . JFrame์ ํ์ฅํ์ฌ Game Frame์ ์ ์ํ๊ณ , ๋ค์์ ๋์ด๋ ๊ธฐ๋ฅ ์ง์์ ์ํ component๋ฅผ ์ถ๊ฐํ์ฌ ๋ฐฐ์นํ๋ค
-
๊ฒ์ ํ๋ฉด์ ์ถ๊ฐํ๋ค.
-
ํฌํ ๋ฐ์ฌ ๋ฒํผ์ ์ถ๊ฐํ๋ค.
-
์ธ๋ถ ํจ๊ณผ์ธ ๋ฐ๋ ์ธ๊ธฐ๋ฅผ ์ํ ์ฌ๋ผ์ด๋๋ฅผ ์ถ๊ฐํ๋ค.
-
์ ์ํ์ ์ถ๊ฐํ๋ค.
๊ณ ์ ์ ์ธ ๊ฒ์ ์ค ๋ฒฝ๋ ๊นจ๊ธฐ๊ฐ ์๋ค. ๊ฒ์ ํ๋ ์ด์ด๊ฐ ๋ฐ์ฌํ ๋ณผ์ ๊ณต๊ฐ์ ํ๊ธฐ๋ฉด์ ๋์๋ค๋๊ณ , ๊ณต๊ฐ ๋ด์ ์กด์ฌํ๋ ๋ค์ํ ๋ง๋๋ค์ ํน์ฑ์ ๋ฐ๋ผ ๊นจ์ง๊ฑฐ๋ ๋ฐ์ฌ๋ง ์ํค๋ ๋ฑ ๋ค์ํ ํ๋์ ์ทจํ๋ค.
์์ ๋ง๋ ๋ํฌ ๊ฒ์๊ณผ ๋ค๋ฅธ ๊ฒ์์ด์ง๋ง ๊ธฐ๋ณธ ๋์์ ๋์ผํ๋ค.