Day 10(21.09.14) - Gomserker/Java-101 GitHub Wiki
11. Method(๋ฉ์๋, ํจ์(Function))
๊ฐ์ฒด์ ๋์์ ํด๋นํ๋ ์ค๊ดํธ({}) ๋ธ๋ก์ ๋งํ๋ค. ๊ฐ ์ค๊ดํธ ๋ธ๋ก์ ์ด๋ฆ์ ๊ฐ์ง๊ณ ์๋๋ฐ, ์ด๊ฒ์ด ๋ฉ์๋์ ์ด๋ฆ์ด ๋๋ค.
Method๋ ํ๋๋ฅผ ์ฝ๊ณ ์์ ํ๋ ์ญํ ๋ ํ์ง๋ง, ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ค์ ์ธ๋ถ์์ ๋งค๊ฐ๊ฐ์ ๋ฐ์ ์๋ ์๊ณ , ์ด๋ค ๊ฐ์ ๋ฆฌํดํ๋ ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ์ํํ ์ ์๋ค.
1. Method์ ์ ์ธ
Method์ ๊ตฌ์ฑ์ ๋ค์๊ณผ ๊ฐ๋ค.
๋ฆฌํดํ์
๋ฉ์๋์ด๋ฆ (๋งค๊ฐ๋ณ์, ๋งค๊ฐ๋ณ์, ...) {
Method ์คํ ๋ธ๋ก
}
1. ๋ฆฌํด ํ์ (return type)
๋ฆฌํด ํ์
์ Method๊ฐ ์คํ๋ ํ ๋ฆฌํดํ๋ Value์ ํ์
์ ๋งํ๋ค. Method๋ ๋ฆฌํด๊ฐ์ด ์์ ์๋ ์๊ณ ์์ ์๋ ์์ง๋ง, Method๊ฐ ์คํ๋ ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ํธ์ถํ ๊ณณ์ ๋๊ฒจ์ค ๊ฒฝ์ฐ์ Return value๊ฐ ์์ด์ผํ๋ค. ์๋์ฐจ๋ผ๋ ๊ฐ์ฒด๋ฅผ ์์๋ก ๋ค์ด๋ณด์, ์๋์ฐจ์ ์๋์ ๊ฑฐ๋ turnOn()์ด๋ผ๋ method์ ์๋๋ฅผ ์ฌ๋ฆฌ๋ acceleration()์ด๋ผ๋ method๊ฐ ์๋ค๊ณ ๊ฐ์ ํ ๋, acceleration()์ด๋ผ๋ method๋ ์์ง์ ํ์ ์, ๋ฐํด์ ํ์ ๋ฑ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํด์ผ ํ์ง๋ง, turnOn()์ด๋ผ๋ method๋ ์๋์ฐจ์ ์๋๋ง ์ผ๋ฉด ๊ทธ๋ง์ด๋ค. ์ฆ, turnOn()์ด๋ผ๋ method๋ reutrn value๊ฐ ์๊ณ , acceleration()์ด๋ผ๋ method๋ return value๊ฐ ์๋ค๊ณ ์๊ฐํด์ผ ํ๋ค.
์ด๋ฌํ ๊ฒฝ์ฐ์ return value๊ฐ ์์๋ return type์ void๊ฐ ์์ผํ๋ฉฐ, return value๊ฐ ์์ ๊ฒฝ์ฐ์ ํด๋น ์๋ฃํ์ ๋ง๋ ํ์
์ด ์์ผํ๋ค. ์๋ฅผ ๋ค์ด ๋ฐํด์ ํ์ ์ ๊ฐ์ด ์ ์ํ์ผ๋ก ๋ํ๋๋ method์ ๊ฒฝ์ฐ์ int๊ฐ, ์์ง์ rpm์ (x1000) ์ผ๋ก ์์์ ๊น์ง ๋ํ๋ด์ผํ ๊ฒฝ์ฐ์ double์ ์ฌ์ฉํด์ผํ๋ค๋ ๊ฒ์ด๋ค.
void turnOn() {...}
int acceleration(int tireSpin) {...}
์ด์ ๊ฐ์ return type์ method๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ์๋ ์ํฅ์ ๋ฏธ์น๋๋ฐ,
turnOn();
int numberOfTireSpin = acceleration(20);
turnOn() method๋ return value๊ฐ ์์ผ๋ฏ๋ก ๋ณ์์ ์ ์ฅํ ๋ด์ฉ์ด ์๋ค. ๋ฐ๋ผ์ ๋จ์ํ method๋ง ํธ์ถํ๋ฉด ๋๋ค. ๋ฐ๋ฉด, acceleration() method๋ ์ดํ ํ์ด์ด์ ํ์ ์๋ฅผ ๋ฆฌํดํ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ ์ฅํ ๋ณ์๊ฐ ์์ด์ผ ํ๋ค. ๋ํ, ์ด๋ฅผ ๋ฐ๊ธฐ ์ํด method์ return type์ธ int ํ์ ์ผ๋ก ์ ์ธ๋์ด์ผํ๋ค. ๋ง์ฝ ์ฌ๊ธฐ์ numberOfTireSpin์ด double๋ก ์ ์ธํ๊ฒ ๋๋ฉด acceleration()์ ์ ์ ๊ฐ์ ์ ์ฅํ ์ ์๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ํฌ๋ง์ ์ธ ๋ถ๋ถ(?)์ return type์ด ์๋ค๊ณ ํด์ return value๋ฅผ ๋ฐ๋์ ๋ณ์์ ์ ์ฅํ ํ์๋ ์๋ค. method์ ์คํ์ด ์ค์ํ ๊ฒฝ์ฐ์ ๋ณ์ ์ ์ธ ์์ด ๋ฐ๋ก method๋ฅผ ํธ์ถํ ์๋ ์๋ค.
2. ๋ฉ์๋ ์ด๋ฆ
๋ฉ์๋ ์ด๋ฆ์ ์์ฑํ ๋ ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ ์ ์ํด์ผ ํ๋ค.
(1) ์ซ์๋ก ์์ํ๋ฉด ์๋๋ค.
(2) $์ _๋ฅผ ์ ์ธํ ํน์๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ฉด ์๋๋ค.
(3) ์๋ก ๋ค๋ฅธ ๋จ์ด๊ฐ ํผํฉ๋ ์ด๋ฆ์ด๋ผ๋ฉด ๋ค์ด์ด ์ค๋ ๋จ์ด์ ์ฒซ๋จธ๋ฆฌ ๊ธ์๋ ๋๋ฌธ์๋ก ์์ฑํ๋ค.(๋ํ์ฒด)
์ด๋ฆ์ ์ด ๋ฉ์๋๊ฐ ์ด๋ค ๊ธฐ๋ฅ์ ํ๋์ง ์ฝ๊ฒ ์ ์ ์๋๋ก ๊ธฐ๋ฅ ์ด๋ฆ์ผ๋ก ์ง์ด์ฃผ๋ ๊ฒ์ด ์ข๋ค. ํ๋ก๊ทธ๋จ ์คํ๊ณผ๋ ๋ฌด๊ดํ๋ ๋๋ฌด ์งง๊ฑฐ๋ ๊ธธ๊ฒ ์์ฑํ์ง ์๋๋ก ํ๋ค.
3. ๋งค๊ฐ๋ณ์ ์ ์ธ
๋งค๊ฐ ๋ณ์๋ method๊ฐ ์คํ๋ ๋ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ถ์์ ๋ฐ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. ์ด ๋งค๊ฐ ๋ณ์๋ผ๋ ๊ฒ๋ ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๊ณ ์๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ, ์์ turnOn()๊ณผ acceleration()์ ๊ฒฝ์ฐ, turnOn() method๋ ๊ทธ๋ฅ ์๋๋ง ๊ฑธ๋ฉด ๋์ง๋ง, acceleration() method์ ๊ฒฝ์ฐ ๋งค๊ฐ ๋ณ์๊ฐ ํ์ํ๋ค. ์ฌ๊ธฐ์ ๋งค๊ฐ ๋ณ์์ ๋งค๊ฐ ๊ฐ์ ๋งค๊ฐ ๋ณ์์ ํ์ ๊ณผ ๊ฐ์์ผ ํ๋ค. ์์์ acceleration() method์ ๊ฒฝ์ฐ int ํ์ ๋งค๊ฐ ๋ณ์๋ฅผ ๋ฐ๊ณ ์์ผ๋ฏ๋ก ๋ฐ๋์ int ํ์ ์ผ๋ก ๋ณํ๋ ์ ์๋ ๊ฐ์ ๋๊ฒจ์ฃผ์ด์ผ ํ๋ค.
2. return๋ฌธ
1. return value๊ฐ ์๋ method
๋ฉ์๋ ์ ์ธ์ return type์ด ์๋ method๋ ๋ฐ๋์ return๋ฌธ์ ์ฌ์ฉํด์ return value๋ฅผ ์ง์ ํด์ผ ํ๋ค. ๋ง์ฝ return type์ด ์๋๋ฐ๋ return๋ฌธ์ด ์๋ค๋ฉด ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. return๋ฌธ์ ์คํ๋๋ ์ฆ์ method๋ฅผ ์ข ๋ฃ์ํจ๋ค.
return ๋ฆฌํด๊ฐ;
return๋ฌธ์ return value๋ return type์ด๊ฑฐ๋ return type์ผ๋ก ๋ณํ๋ ์ ์์ด์ผ ํ๋ค. ์๋ฅผ ๋ค๋ฉด return type์ด int์ธ ๋ฉ์๋์์ byte๋ short, int ํ์ ์ ๊ฐ์ด return๋์ด๋ ์๊ด์๋ค. byte์ short์ int๋ก ์๋์ผ๋ก ํ์ ์ด ๋ณํ๋์ด ๋ฆฌํด๋๊ธฐ ๋๋ฌธ์ด๋ค. ๋ํ, return ๋ฌธ์ ์ฌ์ฉํ ๋ ์ฃผ์ํ ์ ์ return์ ์ฌ์ฉํ ํ์ ์คํ๋ฌธ์ด ์ค๋ฉด "Unreachable code"๋ผ๋ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ return; ํ์ ์คํ๋ฌธ์ด ์คํ๋์ง ์๊ธฐ ๋๋ฌธ์ธ๋ฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
boolean isLeftGas() {
if(gas==0) {
System.out.println("์ฐ๋ฃ๊ฐ ์์ต๋๋ค.");
return false;
}
System.out.println("์ฐ๋ฃ๊ฐ ์์ต๋๋ค.");
return true;
}
"์ฐ๋ฃ๊ฐ ์์ต๋๋ค"๋ฅผ ์ถ๋ ฅํ๋ ๋ฌธ์ฅ์ ๊ฒฝ์ฐ, return false; ๋ค์์ ์์ง๋ง if๋ฌธ์ ์กฐ๊ฑด์์ด false๊ฐ ๋ ๊ฒฝ์ฐ์ ์ ์์ ์ผ๋ก ํด๋น ๋ฌธ์ฅ์ด ์คํ๋๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค. ์ฆ, if ๋ฌธ์ ์กฐ๊ฑด์(gas==0)์ด true๊ฐ ๋๋ฉด "์ฐ๋ฃ๊ฐ ์์ต๋๋ค." ์ถ๋ ฅ๋ฌธ์ด ์คํ๋๊ณ return false;๊ฐ ์คํ๋์ด ๋ฉ์๋๋ ์ฆ์ ์ข ๋ฃ๋๊ณ ์๋์ ์คํ๋ฌธ์ ์ ๋๋ก ์คํ๋์ง ์๋๋ค.
2. return value๊ฐ ์๋ ๋ฉ์๋(void)
void๋ก ์ ์ธ๋์ด return value๊ฐ ์๋ ๋ฉ์๋์์๋ return๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค.
return;
์์ ๊ฐ์ด return๋ฌธ์ ์ฌ์ฉํ๋ฉด ๋ฉ์๋ ์คํ์ ๊ฐ์ ๋ก ์ข
๋ฃ์ํจ๋ค.
์๋๋ gas ๊ฐ์ด 0๋ณด๋ค ํด ๊ฒฝ์ฐ ๊ณ์ํด์ while๋ฌธ์ ์คํํ๊ณ , 0์ผ ๊ฒฝ์ฐ return๋ฌธ์ ์ฌ์ฉํด์ run() ๋ฉ์๋๋ฅผ ์ข
๋ฃํ๋ ํ๋ก๊ทธ๋จ์ด๋ค.
void run() {
while(true) {
if(gas > 0) {
System.out.println("๋ฌ๋ฆฝ๋๋ค. (์ฐ๋ฃ ์๋: " + gas + ")");
gas -= 1;
} else {
System.out.println("๋ฉ์ถฅ๋๋ค. (์ฐ๋ฃ ์๋: " + gas + ")");
return;
}
}
}
while๋ฌธ์ด ํ ๋ฒ ๋ฐ๋ณต๋ ๋๋ง๋ค gas๊ฐ 1์ฉ ๊ฐ์๋๊ธฐ ๋๋ฌธ์ gas๊ฐ 0์ด ๋๋ ์๊ฐ run() ๋ฉ์๋๋ฅผ ์ข
๋ฃํ๋ค.
๋ค์ ํ๋ก๊ทธ๋จ์ return value๊ฐ ์๋ method๋ฅผ ์ฌ์ฉํ๋ Car ํด๋์ค์ ์์์ด๋ค. ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.