메서드(method)

민범·2023년 12월 22일

Java -기본-

목록 보기
14/18

메서드 시작

  • 두 숫자를 입력 받아서 더하고 출력하는 단순한 기능을 개발해보자. 먼저 1 + 2를 수행하고, 그 다음으로 10 + 20을 수행할 것이다.
//계산 1
int a = 1;
int b = 2;
int sum1 = a + b;
//계산2
int x = 10;
int y = 20;
int sum2 = x + y;
  • 계산1, 계산2 둘 다 변수를 두 개 선언하고, 어떤 연산을 수행하는지 출력하고, 두 변수를 더해서 결과를 구한다. 만약 프로그램의 여러 곳에서 이와 같은 게산을 반복한다면? 같은 코드를 여러번 반복해서 작성해야한다. 더 나아가 어떤 연산을 수행하는지 출력하는 부분을 변경하거나 또는 제거하고 싶다면 해당 코드를 다 찾아다니며 모두 수정해야한다. 이런 문제를 어떻게 깔끔하게 해결할 수 있을까?

함수 정의

add(a, b) = a + b

  • 이름이 add이고 a,b라는 두 값을 받는 함수이다. 그리고 이 함수는 a+b연산을 수행한다.

함수 사용

add(1,2) -> 결과: 3
add(5,6) -> 결과: 11
add(3,5) -> 결과: 8

  • 함수에 값을 입력하면, 함수가 가진 연산을 처리한 다음 결과를 출력한다. 여기서 단순히 a+b라는 연산을 수행한다.
  • 여러번 같은 계산을 해야 한다면 지금처럼 함수를 만들어두고(정의), 필요한 입력 값을 넣어서 해당 함수를 호출하면 된다. 그러면 계산된 결과가 나온다.
  • 함수는 마치 블랙박스와 같아서 함수를 호출할 때 외부에서 필요한 값만 입력하면 된다. 그러면 계산된 결과가 출력된다.
  • 여기서 핵심은 함수를 한번 정의해두면 계속해서 재사용할 수 있다는 점이다!

메서드 사용

  • java에서는 함수를 메서드(Method)라 한다. 메서드도 함수의 한 종류라고 생각하면 된다.
int sum1 = add(5, 10);
int sum2 = add(15, 20);
//add 메서드
public static int add(int a, int b){
    int sum = a + b;
    return sum;
   }

메서드 정의

public static int add(int a, int 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): 메서드 호출 시 전달하는 입력 값을 정의한다. 이 변수들은 해당 메서드 안에서만 사용되며 이렇게 메서드 선언에 사용되는 변수를 영어로 파라미터, 한글로 매개변수라 한다.

메서드 본문(Method Body)

{
    int sum = a + b;
    return sum;
}
  • 메서드가 수행해야 하는 코드 블록이다.
  • 메서드를 호출하면 메서드 본문이 순서대로 실행된다.
  • 메서드 본문은 블랙박스다. 메서드를 호출하는 곳에서는 메서드 선언은 알지만 메서드 본문은 모른다.
  • 메서드의 샐행 결과를 반환시에는 return문 다음에 반환할 결과를 꼭 사용해야 한다. 해주지 않으면 결과를 반환해주지 않기 떄문이다.

메서드 호출

  • 앞서 정의한 메서드를 호출해서 실행하려면 메서드 이름에 입력 값을 전달하면 된다. 보통 메서드를 호출한다고 표현한다.
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가 된다.

자세히 보면

public static int add(int a=5, int b=10){ //매개변수에 5와 10이 전달이되며 메서드가 수행된다.
    int sum = a(5) + b(10); //5, 10
    return sum; //5+10이 return이되며 메서드를 종료한다..
   }
  • 메서드 호출이 끝나면 더 이상 해당 메서드가 사용한 메모리를 낭비할 이유가 없다. 메서드 호출이 끝나며 사용한 파라미터 변수는 몰론이고, 그 안에서 정의한 코드 또한 제거된다.

메서드 용어정리

  • 메서드 호출시 다음과 같이 메서드에 넘기는 값과 매개변수(파라미터)의 타입이 맞아야 한다. 몰론 넘기는 값과 매개변수(파라미터)의 순서와 갯수도 맞아야 한다.
    호출: call("hello", 20)
    메서드 정의: int call(String str, int age)

인수(Argumnet)

  • 여기서 "hello", 20처럼 넘기는 값을 영어로 Argumnet(아규먼트), 한글로 인수 또는 인자라 한다. 메서드 내부로 들어가는 값이다. 실무에서도 사용한다.

매개변수(Parameter)

  • 메서드 정의시 선언한 변수인 String str, int age를 매개변수, 파라미터라 한다. 메서드를 호출할 때 인수를 넘기면, 그 인수가 매개변수에 대입된다.

메서드 정의

public static int add(int a, int b) {
		//메서드 본문, 실행 코드
}
제어자 반환타입 메서드이름(매개변수 목록) {
	메서드 본문
}
  • 제어자(Modifier):public, static과 같은 부분이다.
  • 반환 타입(Return Type): 메서드가 실행 된 후 반환하는 데이터의 타입을 지정한다. 메서드가 값을 반환하지 않는 경우, 없다는 뜻의 void를 사용한다.
  • 메서드 이름(Method name): 메서드의 이름이다. 이 이름은 메서드를 호출할때 사용한다.
  • 매개 변수(Parameter): 메서드가 호출시 필요한 변수로 입력값이 필요 없는 메서드는 매개변수를 지정하지 않아도 된다 예)add()

매개변수가 없거나 반환 타입이 없는 경우

public static void main(String[] args) {
	 printHeader();
     System.out.println("프로그램이 동작합니다.");
     printFooter();
	}
public static void printHeader() {
	System.out.println("= 프로그램을 시작합니다 =");
    return;
}
public static void printHeader() {
	System.out.println("= 프로그램을 시작합니다 =");
}

printHeader(),printFooter() 메서드는 매개변수가 없고, 반환 타입도 없다.

  • 매개변수가 없는 경우
    ▶️ 선언: public static void printHeader()와 같이 매개변수를 비워두고 정의하면 된다.
    ▶️ 호출: printHeader();와 같이 인수를 비워두고 호출하면 된다.
  • 반환 타입이 없는 경우
    ▶️ 선언: public static void printHeader()와 같이 반환 타입을 void로 정의하면 된다.
    ▶️ 호출: printHeader();와 같이 반환 타입이 없으므로 메서드만 호출하고 반환 값을 받지 않으면 된다.

void와 return 생략

  • 모든 메서드는 항상 return을 호출해야 한다. 그런데 반환 타입 void의 경우에는 예외로 printFooter()와 같이 생략해도 된다. 자바 컴파일러가 반환 타입이 없는 경우에는 return을 마지막줄에 넣어준다. 참고로 return을 만나면 해당 메서드는 종료된다.
profile
웹 백엔드 개발자를 지향하고 있습니다.

0개의 댓글