Method
자판기에 돈을 넣으면, 음료가 나온다. 햄버거 세트 메뉴도 번호만 알려주면 주문이 된다. 프로그래밍 또한 마찬가지다. 일련의 코드를 단순화하여 사용할 수 있다. 이를 메소드(methods)라 한다
일련의 코드를 단순화한 문법. 이를 메소드라 한다. 메소드는 입력에 따른 결과를 반환한다.
Call out method
만들진 메소드를 사용하는 것. 이를 메소드 호출이라 한다. 아래는 절댓값, 반올림을 반환하는 예이다.
Definition
메소드를 사용하려면, 먼저 만들어져 있어야 한다. 다시 말해, 메소드가 정의돼 있어야한다.
method structure >> 메소드를 만들려면, 그 구성 요소를 알아야 한다. 메소드는 크게 4가지로 이루어져 있다. ① 메소드명(methods name)은 호출 시 사용한다. ② 입력 변수(parameters)는 입력 값을 저장한다. ③ 반환 값(return value)은 반환될 값이다. ④ 반환 타입(return type)은 반환 값의 타입이다.
Make Method
정수값의 제곱을 반환하는 메소드를 만들어보자.
이를 위해 먼저, ①메소드명을 square로 작성한다.public static ④TYPE square(②PARAMETER) { ... return ③VALUE; }
다음으로 호출 시, 입력되는 정수 3을 받기 위해 ②파라미터(입력 변수) int n을 추가한다.
public static ④TYPE square(int n) { ... return ③VALUE; }
이제 제곱값을 만들기 위한 일련의 코드를 작성하고, 최종 ③반환 값을 지정한다.
public static ④TYPE square(int n) { int result; result = n * n; return result; }
마지막 반환 값의 ④타입을 정의한다.
public static int square(int n) { int result; result = n * n; return result; }
이제 square() 메소드는 아래와 같이 호출 가능한다.
int z = square(4); // 입력: 4 => 반환: 16 System.out.println(z); // 16
single parameter >> 입력 변수가 하나만 있는 메소드를, 단일 파라미터 메소드라 합니다. 여기서 파라미터(parameters)란 입력 변수의 또 다른 표현입니다.
# 단일 파라미터 메소드 호출 예 int x = square(4); // 입력값: 4 => 반환값: 16
go in input value to parameter >> 메소드 호출 시 입력한 값은 입력 변수 즉, 파라미터로 대입됩니다.
# 단일 파라미터 메소드 정의 예 public static int square(int n) { int result = n * n; // 변수 생성 및 제곱 값 대입 return result; // 값 반환 }
CODE
public class CubeVolume { public static void main(String[] args) { // 변수 생성 int n = 3; // 메소드 호출을 통한 값 계산 int x = cube(n); // 결과 출력 System.out.printf("%d의 세제곱 => %d", n, x); } public static int cube(int num) { // 변수 생성 int result; /* 2. 세제곱을 계산하시요 */ result = num*num*num; // 값 반환 return result; } }
multiple parameters >> 입력 변수가 2개 이상인 경우, 이를 다중 파라미터 메소드라 합니다.
# 다중 파라미터 메소드 호출 예 int a = times(3, 4); // 12 int b = times(5, 6); // 30
go in input values to multi parameters >> 메소드 호출 시 입력한 값은 차례로 파라미터(입력 변수)에 대입됩니다.
# 다중 파라미터 메소드 정의 예 public static int times(int a, int b) { return a * b; }
CODE
public class CylinderVolume { // 프로그램 실행의 시작점! public static void main(String[] args) { // 변수 생성 double r = 7.0; double h = 5.0; // 부피 계산 double v = volume(r, h); // 결과 출력 System.out.printf("반지름이 %.1f, 높이가 %.1f인 원기둥의 부피: %.1f", r, h, v); } // 반지름과 높이를 입력받아 원기둥의 부피를 반환 public static double volume(double R, double H) { return Math.PI * R * R * H; } }
메소드 호출 시 주의해야할 점이 있습니다. 이는 입력된 전달과 파라미터(입력 변수)의 타입이 일치해야 한다는 것이죠.
# 메소드 호출 예 int x = foo(0.0); // double을 int로 대입 불가 int y = foo("3"); // String을 int로 대입 불가 # 메소드 정의 예 public static int foo(int n) { return n + n; }
그뿐 아니라, 반환값 또한 항상 신경써야 합니다.
// ERROR: 6 => String (X) String z = foo(3);
CODE
public class WhatIsWrong { public static void main(String[] args) { int a = square((int) 3.0); int b = (int) cube(2); System.out.printf("a = %d, b = %d\n", a, b); } public static int square(int n) { return n * n; } public static double cube(double n) { return n * n * n; } }
case of none parameter >> 메소드의 파라미터는 없을 수도 있습니다.
# 파라미터가 없는 메소드 호출 예 int a = getTen(); # 파라미터가 없는 메소드 정의 예 public static int getTen() { return 10; }
math.random() method >> 자바에서 제공하는 Math.random() 메소드는 파라미터가 없는 대표적 예입니다. 해당 메소드는 0.0 이상 1.0 미만의 임의 실수를 반환합니다.
# 파라미터가 없는 메소드 호출 예 double x = Math.random(); // 0.0 <= x < 1.0
get a number 1 ~ 10 >> 아래는 위 메소드를 사용하여, 1부터 10사이의 임의 정수를 구하는 예입니다.
// 0.0 <= r < 10.0 double r = 10 * Math.random(); // 0, 1, ..., 9 중 하나 int temp = (int) r; // 1, 2, ..., 10 중 하나 int n = temp + 1;
CODE
public class Random { public static void main(String[] args) { // 메소드로부터 값을 반환 int x = rollDie(); // 결과 출력 System.out.printf("주사위의 눈: %d", x); } // 1~6 사이의 임의의 정수를 반환 public static int rollDie() { /* 해당 메소드를 완성하시오. */ double r = 5 * Math.random(); int temp = (int) r; int t = temp + 1; return t; } }
type of void method >> 메소드에 항상 리턴값이 존재하는 것은 아닙니다. 반환할 값이 없는 경우, 타입의 자리에 void를 넣어줍니다.
# 리턴값이 없는 메소드 호출 예 printHello(); # 리턴값이 없는 메소드 정의 예 public static void printHello() { System.out.println("Hello"); return; }
skip return >> 반환할 값이 없기 때문에 return 키워드는 생략할 수도 있습니다.
public static void printHello() { System.out.println("Hello"); }
CODE
public class Ramyun { public static void main(String[] args) { /* 해당 메소드를 완성하시오. */ buy(); boil(); put(); eat(); } public static void boil() { System.out.println("물을 끓인다."); } public static void buy() { System.out.println("라면을 사온다."); } public static void eat() { System.out.println("맛있게 먹는다."); } public static void put() { System.out.println("라면을 넣는다."); } }
call out method into method >> 메소드 안에서 또 다시 메소드를 호출할 수 있습니다.
# 메소드 호출 예 threeStar();
threeStar() 메소드는, 내부적으로 oneStar()를 3번 호출합니다.
# 메소드 정의 예 public static void threeStar() { oneStar(); oneStar(); oneStar(); } public static void oneStar() { System.out.printf("*"); }
따라서 다음과 같은 결과가 출력됩니다.
***
CODE
public class ControlFlow { public static void main(String[] args) { drawRectangle(); } public static void drawRectangle() { /* 직사각형이 그려지도록 해당 메소드를 구현하세요. */ drawLine(); drawEdge(); drawLine(); } // 직선을 그리는 메소드 public static void drawLine() { System.out.println("* * * * * *"); // 양 끝점을 그리는 메소드 public static void drawEdge() { System.out.println("* *"); } }
CODE
public class Pork { public static void main(String[] args) { /* 1. 변수를 생성하시오. */ int num = 3; /* 2. 메소드를 통한 칼로리를 계산하시오. */ double result = kcal(num); /* 3. 결과를 출력하시오 */ System.out.printf("삼겹살 %d인분: %.2f kcal", num, result); } /* 4. 칼로리 계산을 위한 메소드를 작성하시오. */ public static double kcal(int n){ int gram = n * 180; double weight = gram * 5.179; return weight; } }