본문 바로가기
[JAVA]

[처음부터 다시 하는 JAVA] 메서드

by 북방바다코끼리표범 2024. 1. 21.

처음부터 다시 하는 자바 공부는 인프런의 김영한 강사님의 강의를 참고해서 공부했다.

링크 : https://www.inflearn.com/course/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%9E%90%EB%B0%94-%EC%9E%85%EB%AC%B8

 

 

[지금 무료] 김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음 강의 - 인프런

프로그래밍에 처음 입문하는 분들을 위한 자바 강의입니다. 코드를 따라하면서 손쉽게 자바를 배울 수 있습니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 자바 입문[사진][임베

www.inflearn.com

 

메서드

자바에서는 함수를 메서드(Method)라고 함.
메서드도 함수의 한 종류라고 생각하면 된다. 지금은 둘을 구분하지 않고, 이정도만 알아두자.

 
메서드를 사용하면 앞서 고민한 문제를 한번에 해결할 수 있다.
메서드에 대한 자세한 설명보다는 우선 메서드를 사용해서 코드를 작성해보자.

package method;

public class Method1Ref {
	public static void main(String[] args) { 
		int sum1 = add(5, 10);
        System.out.println("결과1 출력:" + sum1); 
        
        int sum2 = add(15, 20);
        System.out.println("결과2 출력:" + sum2);
    }

        //add 메서드
        public static int add(int a, int b) {
			System.out.println(a + "+" + b + " 연산 수행"); 
            int sum = a + b;
            return sum;
            }
      }
실행 결과

5+10 연산 수행 
결과1 출력:15 
15+20 연산 수행 
결과2 출력:35

 

메서드 정의

public static int add(int a, int b) {
  System.out.println(a + "+" + b + " 연산 수행"); 
  int sum = a + b;
  return sum; 
}

이 부분이 바로 메서드이다. 이것을 함수를 정의하는 것과 같이, 메서드를 정의한다고 표현한다.
메서드는 수학의 함수와 유사하게 생겼다. 함수에 값을 입력하면, 어떤 연산을 처리한 다음에 결과를 반환한다. 

(수학에 너무 집중하지는 말자, 단순히 무언가 정의해두고 필요할 때 불러서 사용한다는 개념으로 이해하면 충분)

메서드는 크게 메서드 선언과 메서드 본문으로 나눌 수 있다.

 

메서드 선언(Method Declaration)

public static int add(int a, int b)


메서드의 선언 부분으로, 메서드 이름, 반환 타입, 매개변수(파라미터) 목록을 포함한다.
이름 그대로 이런 메서드가 있다고 선언하는 것이다. 메서드 선언 정보를 통해 다른 곳에서 해당 메서드를 호출할 수 있다.

  • public static
    • public : 다른 클래스에서 호출할 수 있는 메서드라는 뜻이다. 접근 제어에서 학습한다.
    • static : 객체를 생성하지 않고 호출할 수 있는 정적 메서드라는 뜻이다. 자세한 내용은 뒤에서 다룬다. 
    • 두 키워드의 자세한 내용은 뒤에서 다룬다. 지금은 단순하게 메서드를 만들 때 둘을 사용해야 한다고 생각하자.
  • int add(int a, int b)
    • int : 반환 타입을 정의한다. 메서드의 실행 결과를 반환할 때 사용할 반환 타입을 지정한다. 
    • add : 메서드에 이름을 부여한다. 이 이름으로 메서드를 호출할 수 있다.
    • (int a, int b) : 메서드를 호출할 때 전달하는 입력 값을 정의한다. 이 변수들은 해당 메서드 안에서만 사용된다. 
      이렇게 메서드 선언에 사용되는 변수를 영어로 파라미터(parameter), 한글로 매개변수라 한다.

메서드 본문(Method Body)

{
  System.out.println(a + "+" + b + " 연산 수행"); 
  int sum = a + b;
  return sum;
}
  • 메서드가 수행해야 하는 코드 블록이다.
  • 메서드를 호출하면 메서드 본문이 순서대로 실행된다.
  • 메서드 본문은 블랙박스이다. 메서드를 호출하는 곳에서는 메서드 선언은 알지만 메서드 본문은 모른다. 
  • 메서드의 실행 결과를 반환하려면 return 문을 사용해야 한다. return 문 다음에 반환할 결과를 적어주면 된다.
    • return sum : sum 변수에 들어있는 값을 반환한다.

메서드 호출
앞서 정의한 메서드를 호출해서 실행하려면 메서드 이름에 입력 값을 전달하면 된다. 보통 메서드를 호출한다고 표현.

int sum1 = add(5, 10); 
int sum2 = add(15, 20);

 

메서드를 호출하면 어떻게 실행되는지 순서대로 확인해보자

int sum1 = add(5, 10); //add라는 메서드를 숫자 5,10을 전달하면서 호출한다. 
int sum1 = 15; //add(5, 10)이 실행된다. 실행 결과는 반환 값은 15이다. 
//sum1에 15 값이 저장된다.

 

메서드를 호출하면 메서드는 계산을 끝내고 결과를 반환한다. 

쉽게 이야기하자면, 메서드 호출이 끝나면 해당 메서드가 반환한 결과 값으로 치환된다.

 

조금 더 자세히 알아보자. 메서드의 코드는 일부 축약했다.

//1: 메서드 호출
int sum1 = add(5, 10);

//2: 파라미터 변수 a=5, b=10이 전달되면서 메서드가 수행된다. 
public static int add(int a=5, int b=10) {
int sum = a + b; 
return sum;
}

//3: 메서드가 수행된다.
public static int add(int a=5, int b=10) { 
int sum = a(5) + b(10);
return sum; 
}

//4: return을 사용해서 메서드 실행의 결과인 sum을 반환한다. sum에는 값 15가 들어있으므로 값 15가 반환된다.
public static int add(int a=5, int b=10) { 
int sum = 15;
return sum(15); 
}

//5: 메서드 호출 결과로 메서드에서 반환한 값 15가 나온다. 이 값을 sum1에 대입했다. 
int sum1 = 15;

 

 

메서드 호출이 끝나면 더 이상 해당 메서드가 사용한 메모리를 낭비할 이유가 없다. 
메서드 호출이 끝나면 메서드 정의에 사용한 파라미터 변수인 int a , int b 는 물론이고, 그 안에서 정의한 int sum 도 모두 제거된다.

 

메서드 호출과 용어정리
메서드를 호출할 때는 다음과 같이 메서드에 넘기는 값과 매개변수(파라미터)의 타입이 맞아야 한다. 물론 넘기는 값과 매개변수(파라미터)의 순서와 갯수도 맞아야 한다.

호출: call("hello", 20)
메서드 정의: int call(String str, int age)

 

인수(Argument)
여기서 "hello" , 20 처럼 넘기는 값을 영어로 Argument(아규먼트), 한글로 인수 또는 인자라 한다. 

실무에서는 아규먼트, 인수, 인자라는 용어를 모두 사용한다고 한다.

 

매개변수(Parameter)
메서드를 정의할 때 선언한 변수인 String str , int age 를 매개변수, 파라미터라 한다. 
메서드를 호출할 때 인수를 넘기면, 그 인수가 매개변수에 대입된다.
실무에서는 매개변수, 파라미터 용어를 모두 사용한다고 한다.

 

용어정리

  • 인수라는 용어는 '인’과 '수’의 합성어로, '들어가는 수’라는 의미를 가진다.
    즉, 메서드 내부로 들어가는 값을 의미한다. 인자도 같은 의미이다.
  • 매개변수, parameter는 '매개’와 '변수’의 합성어로, '중간에서 전달하는 변수’라는 의미를 가진다. 
    즉, 메서드 호출부와 메서드 내부 사이에서 값을 전달하는 역할을 하는 변수라는 뜻이다.