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 ํด๋ž˜์Šค์˜ ์˜ˆ์‹œ์ด๋‹ค. ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๋‹ค์Œ