Media Log


1. 메소드(Method)


메소드에 대해 본격적으로 들어가기 전, 메소드가 무엇인지 간략하게나마 설명을 드리도록 하겠습니다.


메소드(Method)는 C언어의 함수(Function)와 동일한 기능을 합니다. C언어의 함수에서 반환되는 값의 자료형, 함수 이름, 매개변수(Parameter)등을 이미 알고계시는 분들도 있을겁니다. 프로그래밍을 처음 접하시는 분들이라면, 함수(Function)가 무엇인지, 매개변수(Parameter)가 무엇인지, 반환(return)되는 값의 자료형이 뭔지 궁금증을 품는게 정상입니다. 간략히 말하자면 여기서의 함수(Function)란 어떤 행위들을 묶어놓은 것을 말합니다.


우린 메소드가 뭔지 모르지만, 예제를 진행하면서 이미 하나의 메소드를 본적이 있습니다. 바로 프로그램의 진입점(Entry Point)으로 프로그램에서 아주 중요한 역할을 담당하는 main 메소드입니다. 우리가 처음 자바를 배울때 보았던 예제를 아래에 써두었습니다.


class JavaTutorial1

{

public static void main(String[] args)

{

System.out.println("Hello, world!");

}

}


위의 예제에서 main 메소드를 한번 살펴봅시다.

(우선 아직은 public(접근자), static(지정어)를 몰라도 되므로 추후에 자세히 설명하려 합니다.)


void가 뭐길래 main 앞에 써두는건가요? 이 void는 "해당 메소드는 값을 반환하지 않습니다."라는 의미를 지니고 있습니다. 즉, 반환(return)되는 값의 자료형이라고 생각하시면 됩니다. void 옆의 main은 당연히 메소드의 이름이고, 옆에 괄호안에 "String[] args"는 매개변수(Parameter)라고 합니다. 메소드 호출시 같이 넘어오는 값이라고 기억합시다. 이제, 우리가 직접 메소드를 정의해봅시다. (메소드를 정의하는 것이란 메소드를 만드는것과 같습니다.)


아래의 예제는 두개의 매개변수를 받아, 서로 더한 후 출력시키는 메소드입니다.

...

public static void add(int a, int b) {

System.out.println(a + b);

}

...


이 메소드를 어떻게 사용하냐구요? 아래의 예제를 보시면 한번에 이해하실 수 있습니다.

class AddMethod

{

public static void main(String[] args)

{

add(500, 4000);

add(600, 700);

}


public static void add(int a, int b) {

System.out.println(a + b);

}

}


결과:

4500

1300


코드로 돌아가, 5~6행에 add란 메소드가 사용되었고 9~11행에서 add란 메소드가 정의된것을 확인하실 수 있습니다. 5~6행에서 정수 500, 4000와 600, 700을 add 메소드에 넘겨주어 그 값을 더한 결과를 출력하고 있습니다.


먼저, 5행에서 정수 500과 4000을 add 메소드에 넘겨주었습니다. 그런 뒤에 500은 정수형 매개변수 a에 값이 저장되고, 4000은 정수형 매개변수 b에 값이 저장됩니다. 그런 뒤에 a와 b를 서로 더한후 출력시킵니다. add 메소드의 매개변수가 두개임을 확인함으로써 매개변수는 콤마를 구분으로 두개 이상이 올수 있다는 것을 알 수 있습니다. 그리고 6행을 보면 메소드는 여러번 쓰일수 있다는것도 알 수 있습니다. 간단하죠?


이제, 앞서 배울 return 키워드를 사용해 add 메소드를 수정해볼까요?


2. 반환(return)


우리가 방금 전달해준 값이 매개변수에 저장되어 메소드 안으로 들어왔죠? 반대로 메소드가 값을 내보낼 수 있습니다. 메소드에서 값을 호출한 영역으로 내보내는 것을 반환(return)이라고 합니다. 여기서 return의 뜻이 뭘까요? 말그대로 '돌려주다, 돌려보내다'라는 의미를 가지고 있습니다. 메소드안에 존재하는 값을 호출한 영역으로 돌려주는 것과 같습니다. 반환에 대한 이해를 돕기 위해 아래의 예제를 작성해두었습니다. 


class AddMethod

{

public static void main(String[] args)

{

System.out.println(add(500, 4000));

}


public static int add(int a, int b) {

return a+b;

}

}


결과:

4500


코드로 돌아가서, 5행으로 보시면 add 메소드가 괄호 안에서 쓰였습니다. 그리고 add 메소드를 보시면, 매개변수에 저장된 두 값을 더해서 출력하는게 아닌, 값을 반환하고 있습니다. 순서대로 정리해보면, 정수 500과 4000이 add 메소드의 매개변수 a, b에 각각 저장되어 a와 b를 더한 값을 호출 영역으로 되돌려줍니다. 즉 500과 4000을 더한 값 4500이 호출 영역으로 반환되어 add(500, 4000)은 4500으로 대체되어 4500이 출력됩니다. 그리고 나서 메소드가 종료됩니다. return 키워드는 값을 반환 후 인접한 메소드를 종료시킨다고 생각하시면 됩니다. 반환되는 값 4500은 정수형이므로 void가 아닌 int로 적어주어야 합니다. 만약 반환되는 값이 실수라면 double형을 사용하면 되겠죠?


이번 강좌에서 메소드(Method)와 반환(return)을 알아보았습니다. 다음 강좌에서는 클래스(Class)가 등장합니다.

  1. BlogIcon vorfeed at 2012.08.30 15:58 신고 [edit/del]

    c언어를 공부하고 자바를 배우니 더욱 이해가 잘돼네요 잇힝

    Reply
  2. 김승현 at 2012.10.04 03:22 신고 [edit/del]

    class AddMethod

    {

    public static void main(String[] args)

    {

    add(500, 4000);

    add(600, 700);

    }




    public static void add(int a, int b) {

    System.out.println(a + b);

    }

    }
    이 예제에서 실행순서가 어찌되는지요ㅠㅠ 너무 혼란이오네요 위에서 아래로 실행되는줄로만 알앗는데...
    public static void add(int a, int b)<=이리 선언해주면 add안 a,b 에 무한으로 저장되나요?ㅠㅠ
    add(500, 4000);
    add(600, 700); <=보면은 add(a,b)에 500,4000이 선언되구 곧바로 600,700이 선언되엇는데 4개의 값을 다 가지고잇는건가요? 후자값 600,700만 가지고잇어야될것같은데 출력해보니 둘다 나오더라구여ㅠㅠ
    System.out.println(a + b);<=그리고 이부분 분명히 반복이 없는데도 어떻게 2개가 찍혀요?ㅠㅠ

    Reply
    • BlogIcon EXYNOA at 2012.10.04 19:33 신고 [edit/del]

      자바는 순서대로 실행되는 절차 지향언어가 아닙니다.

      그리고, 매개변수가 프로그램이 종료될 때까지 생존하는게 아닌, 함수가 끝나면 자동적으로 소멸합니다. 임시로 담아두고 있는거죠.

      500, 4000을 a, b에 담고 이 값을 가지고 덧셈을 한 값을 출력한 뒤에 알아서 소멸합니다. 그리고 600, 700이 들어왔을때 또한 그렇죠.

  3. 김승현 at 2012.10.04 03:26 신고 [edit/del]

    class AddMethod

    {

    public static void main(String[] args)

    {

    System.out.println(add(500, 4000));

    }




    public static int add(int a, int b) {

    return a+b;

    }

    }
    위에 예제에서 add(a,b)에 500,4000을 넣고 return a+b; <=이쪽에서 500+4000되서 값이
    System.out.println(add(500, 4000));<=호출부터 반환해서 4500이된건 알겟는데여ㅠㅠ
    왜 처음에 System.out.println(add(500, 4000)); <=이부분에서 출력을하지않고 add(a,b)에 값만 입력된건가요?
    지금껏 한줄한줄 실행해 나간다고 생각햇는데 뭔가 뒤엉켜버린 느낌이네요.

    Reply
    • BlogIcon EXYNOA at 2012.10.04 19:35 신고 [edit/del]

      먼저 500과 4000이란 값을 인자로 넘겨줍니다. 그럼 매개변수 a에는 500, 매개변수 b에는 4000이란 값이 남습니다. 그리고 이것을 서로 더해 4500이란 값을 호출한 영역으로 다시 되돌려줍니다.

      그럼 4500이란 값이 add(500, 4000)자리에 위치하게 되는거죠.

      System.out.println(4500);
      출력되는 값은 4500이 맞습니다.

  4. 김승현 at 2012.10.04 03:33 신고 [edit/del]

    혹시 add가 method 이기 때문에 add가 선언되면 바로
    public static void add(int a, int b) {

    System.out.println(a + b);

    }
    이쪽으로가서 500,4000 더한값 출력하고 다시
    public static void main(String[] args)

    {

    add(500, 4000);

    add(600, 700); <= 이쪽으로가서 다시 add가 선언됫으니
    }
    public static void add(int a, int b) {

    System.out.println(a + b);

    }
    이쪽으로가서 600,700 더한값 출력하고 그렇게 되는건가요? 맞나요?ㅎㅎㅠㅠ

    Reply
    • BlogIcon EXYNOA at 2012.10.04 19:36 신고 [edit/del]

      무언가 잘못 아시고 계신듯 하네요. 프로그램의 진입점은 main 메소드입니다. add 메소드가 정의되었다고 하더라도, 메인 메소드가 존재하지 않으면 프로그램은 실행되지 않습니다.

      메인 메소드부터 시작하여 add 메소드를 만나 출력하는거죠.

  5. 김승현 at 2012.10.06 16:50 신고 [edit/del]

    감사합니다~

    Reply
  6. 하마두리 at 2012.10.11 03:00 신고 [edit/del]

    잘보고갑니다

    Reply
  7. 김광연 at 2013.02.04 20:43 신고 [edit/del]

    java도 c처럼 헤더 파일 같이 함수를 모아놓을수는 없나요?

    Reply
  8. 알비노 at 2013.06.07 13:07 신고 [edit/del]

    궁금한게
    class AddMethod

    {

    public static void main(String[] args)

    {

    add(500, 4000);

    add(600, 700);

    }




    public static void add(int a, int b) {

    System.out.println(a + b);

    }

    }

    여기서 메소스 public static void add(int a, int b) 도 int a, int b 에 정수가 들어가니까 앞에 void 가 아니고

    int 가 들어 가는게 아닌가요? ,, 아직 void를 왜쓰는지 그자리에 뭐가 와야하느느지 헷갈리네요 ,,ㅠㅜ

    Reply
    • BlogIcon EXYNOA at 2013.06.07 13:12 신고 [edit/del]

      void는 '공허한'이라는 뜻을 지니고 있으며, 이는 반환되는 값이 없다는 것을 의미합니다. 만약 void가 쓰인 자리에 int가 오려면 add 함수가 정수형(integer) 데이터를 반환해야만 합니다. 아래와 같이 말입니다.

      public static int add(int a, int b) {
      return a + b;
      }

  9. 읭... at 2014.05.09 21:50 신고 [edit/del]

    c언어에서도 자바언어에서도 return은 모르겟다...;; ㅠㅠ

    Reply
    • BlogIcon EXYNOA at 2014.12.29 18:06 신고 [edit/del]

      어떤 부분이 이해가 힘드신지 말씀해주시면 그 부분에 대한 설명을 조금 보태드리도록 하겠습니다. ^ㅡ^*

    • 손강 at 2017.04.19 17:59 신고 [edit/del]

      return은 말그대로 해당 메소드가 끝났을때
      값을 리턴해야한다는 것을 말합니다.
      메소드 앞에 void를 지정하면 필요없고
      int add, double add 등등 메소드명앞에
      리턴 형식을 지정해주면
      해당 메소드가 끝나는 제일 마지막에
      return을 사용해서 리턴 형식에 해당하는
      값을 넘겨주어야 합니다.
      int add(int a, int b)
      {
      return a+b;
      }
      or
      int add(int a, int b)
      {
      int result = a+b;
      return result;
      }
      예를 들어, int add(int a, int b)라는 메소드가 있으면
      해당 메소드 마지막에 return a+b;나
      앞에서 이미 계산한 int result값을
      리턴해주어야 합니다.
      메소드명 앞에 리턴 형식을 지정햇는데
      return이 없거나 리턴 형식과 틀린 값을
      넘겨주면 오류가 발생하빈다.

  10. 도지니 at 2014.11.25 21:38 신고 [edit/del]

    두번째 예제의 add를 int로 한것이 이해가 잘 안가서 질문드려요.

    첫번째 예제의 add는 값을 받아만 오고 자체 실행하기 때문에 int가 아니여도 상관이 없고,
    두번째 예제의 add는 값을 받아와 실행한 뒤 다시 호출된 부분에 결과를 넘겨줘야 하는데 그 4500이라는 결과값이 정수형이라 정수형으로 넘겨줘야해서 int를 써주는 건가요?

    Reply
    • 지나가던또다른사람 at 2014.12.29 15:42 신고 [edit/del]

      두번째 예제의 add를 int로 한 것이 이해가 안된다 하시는데, add를 int로 했다는 말이
      public static int add 그러니까 메소드를 선언할 때 void가 아닌 int를 사용한 이유를 모르겠다는 거죠??

      그런거라면 딱 쉽게 설명할 수 있습니다.

      여기 메인 메소드와 Add라는 메소드가 있습니다.
      메인에서 Add메소드를 호출합니다.
      Add메소드에서 연산이 이루어 집니다.
      연산한 결과를 메인 메소드로 반환(return)해야 됩니다.
      그 반환값이 정수일 때 -> public static int Add(){}
      그 반환값이 실수일 때 -> public static double Add(){}

      즉, 해당 메소드에서 return을 사용한다면 해당 타입명을,
      반환할 필요가 없다면 void를 사용합니다.

      혹시 틀렸다면 누군가 지적해주세요.

  11. 누군가 at 2015.01.13 14:34 신고 [edit/del]

    어디 교육기관의 선생님쯤 되시나요??
    잘 가르쳐 주시네요

    Reply
  12. EXYNOA FAN at 2015.12.30 14:27 신고 [edit/del]

    잘 보고 갑니다

    Reply
  13. 테오 at 2017.09.06 20:56 신고 [edit/del]

    메소드가 C언어의 함수 개념과 비슷한것인가요?

    Reply
    • BlogIcon EXYNOA at 2017.09.25 10:43 신고 [edit/del]

      네, C언어의 함수와 비슷한 개념이라고 말할 수 있습니다. 메소드는 단순하게 클래스 안에 들어가는 함수라고 기억을 하고 계셔도 괜찮습니다. 절차지향(함수)에서 객체지향(메소드)에서 넘어오면서 부르는 것이 조금 달라졌습니다.

submit

티스토리 툴바