본문 바로가기
JAVA

JAVA(메서드)

by 글로리. 2020. 6. 3.

01. 메서드

1) 정의

메서드 = 함수

2) 위치

  • 메서드는 반드시 클래스 안에 포함되어야함.

  • 특정조건이 충족되지 않는 한 하나의클래스안에는 동일한 매서드가 공존 할 수 없음.

3) 이름 규칙

  • 영어, 숫자, 언더바( _ ), $ 만 사용가능.

  • 첫 글자는 반드시 영어로 지정.

  • 두 개 이상의 단어로 조합할경우

   * 언더바사용(스네이크표기법) : hello + java -> hello_java
   * 대문자변환(카멜표기법) : hello + java -> helloJava
   * 보통 카멜표기법을 많이 사용.

4) 예제

public class Note1
{
    // (1) 프로그램의 출발점
    public static void main(String[] args)
    {
        test();
    }

    public static void test() {
        int x = 5;
        System.out.println(x + 1);

        x = 10;
        System.out.println(x + 1);
    }
}

// 실행결과
6
11

02. 파라미터

1) 정의

  • 함수를 'f(x) = x+1' 이라 했을 때 괄호안에 들어가는 x 를 '파라미터'라고 함.

    2) 예제

public class Note2
{
    public static void main(String[] args) {
        test(3);   // 파라미터 x 에 3 대입
        test(6);  // 파라미터 x 에 6 대입
    }

    // 호출시에 파라미터를 전달해야 하는 메서드
    public static void test(int x) {
        int y = x + 5;
        System.out.printf("test(%d) = %d\n", x, y);
    }
}

// 실행결과
test(3) = 8
test(6) = 11

03. 다중 파라미터

1) 형태

  • 'f(x,y) = x + y + 1' 처럼 파라미터(변수)가 2개 이상인 경우.

    2) 예제

public class Note3
{
    public static void main(String[] args) {
        test(1, 5);   // 파라미터 x,y에 각각 1,5 대입
        test(5, 10);  // 파라미터 x,y에 각각 5,10 대입
    }


    public static void test(int x, int y) {
        int z = x + y + 1;
        System.out.printf("test(%d,%d) = %d\n", x, y, z);
    }
}

// 실행결과
test(1,5) = 7
test(5,10) = 16

04. 함수의 결과값

1) 매서드의 리턴값

예약어 return의 사용

  • 매서드 실행결과를 리턴하기 위해서는 'return'이라는 명령어가 사용되며

    매서드 이름 옆에 void 대신 리턴하고자하는 데이터 타입을 명시해야 함.

  • 'void' 는 리턴값이 없다는 의미

  • 'return' 을 만나면 그 메서드는 그 즉시 수행을 중단.

public class Note4
{
    public static void main(String[] args)
    {
        int a = div(10, 2);
        System.out.println("10 / 2 = " + a);

        int b = div(3, 0);
        System.out.println("3 / 0 = " + b);
    }

    public static int div(int x, int y)
    {
        // 0으로 나누면 에러이므로 y가 0일때 0을 출력하도록 명령
        if (y == 0)
        {
            System.out.println("0으로 나눌 수 없습니다.");
            return 0;
        }

        int z = x / y;
        return z;
    }
}

// 실행결과

10 / 2 = 5
0으로 나눌 수 없습니다.
3 / 0 = 0

05. 메서드 간의 호출

1) 함수간의 연립호출

  • 아래의 함수는 f2에서 f1을 호출.
   f1(x) = x +1 
   f2(y) = f1(y) * 2

   f2(10) = f1(10) * 2
   f1(10) = 10 +1 
   f2(10) = 11 * 2
   f2(10) = 22

2) 예제

public class Note5
{
    public static void main(String[] args)
    {
        int a = 5;
        int b = f2(a);
        System.out.printf("f2(%d) = %d\n", a, b);
    }

    public static int f1(int x)
    {
        System.out.printf("f1(%d) = %d + 1\n", x, x);
        return x + 2;
    }

    public static int f2(int y)
    {
        System.out.printf("f2(%d) = f1(%d) * 2\n", y, y);
        return f1(y) * 3;
    }
}

// 실행결과

f2(5) = f1(5) * 2
f1(5) = 5 + 1
f2(5) = 21

3) 메서드의 호출순서와 종료순서 간의 관계

   위 예제에서 메서드 호출순서는 다음과 같다

  • main -> f2 -> f1

    종료순서는 다음과 같다.

  • f1 -> f2 -> main

    * 메서드 A가 실행중 다른 메서드B를 실행시키면 B가 종료되어야 A가 종료된다.

    즉, 먼저 실행(First Input)된 메서드가 가장 나중(Last Output)에 종료된다.

    이를FILO혹은선입후출관계라고 하는데 프로그래밍에서는 이러한 관계를스택(Stack)이라고 한다.

4) 소스코드로 표현

public class Note6
{
    public static void main(String[] args)
    {
        System.out.println("--- main 시작 --");
        hello();
        System.out.println("--- main 종료 --");
    }

    public static void hello()
    {
        System.out.println("--- hello 시작 --");
        world();
        System.out.println("--- hello 종료 --");
    }

    public static void world()
    {
        System.out.println("--- world 시작 --");
        System.out.println("--- world 종료 --");
    }
}

// 실행결과

--- main 시작 --
--- hello 시작 --
--- world 시작 --
--- world 종료 --
--- hello 종료 --
--- main 종료 --

'JAVA' 카테고리의 다른 글

JAVA(재귀함수)  (0) 2020.06.04
JAVA(값 복사 / 참조 복사)  (0) 2020.06.03
JAVA(2차 배열)  (0) 2020.06.02
JAVA(1차 배열)  (0) 2020.06.02
JAVA(기본문법 활용)  (0) 2020.06.01

댓글