[인프런] 김영한의 자바 입문 - 10

김다은·2024년 11월 26일

JAVA

목록 보기
14/14
post-thumbnail

이 게시글은 인프런 "김영한의 자바 입문" 강의를 바탕으로 작성했습니다:)

메서드

1. 메서드

자바에서는 함수를 메서드(Method)라고 한다.
메서드도 함수의 한 종류라고 생각하면 된다.

2. 메서드 정의

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

메서드 본문 (Method Body)

 {
   System.out.println(a + "+" + b + " 연산 수행");
   int sum = a + b;
   return sum;
 }
  • 메서드가 수행해야 하는 코드 블록이다.
  • 메서드의 실행 결과를 반환하려면 return문을 사용해야 한다. return문 다음에 반환할 결과를 적어주면 된다.

3. 메서드 호출과 용어정리

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

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

인수 (Argument)

"hello",20처럼 넘기는 값을 영어로 Argument, 한글로는 인수 또는 인자라 한다.
즉, 메서드 내부로 들어가는 값을 의미

매개변수 (Parameter)

메서드를 정의할 때 선언한 변수인 String str, int age를 매개변수(파라미터)라 한다.
메서드를 호출할 때 인수를 넘기면, 그 인수가 매개변수에 대입된다.
즉, 메서드 호출부와 메서드 내부 사이에서 값을 전달하는 역할을 하는 변수

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

 package method;
 
 public class Method2 {
 
   public static void main(String[] args) {
     printHeader();
     System.out.println("프로그램이 동작합니다.");
     printFooter();
   }
 
   public static void printHeader() {
     System.out.println("= 프로그램을 시작합니다 =");
     return; //void의 경우 생략 가능
     }
     public static void printFooter() {
     System.out.println("= 프로그램을 종료합니다 =");
     }
}
  • 매개변수가 없는 경우
    • 선언 : public static void printHeader() 와 같이 매개변수를 비워두고 정의하면 된다.
    • 호출 : printHeader()와 같이 인수를 비워두고 호출하면 된다.
  • 반환 타입이 없는 경우
    • 선언 : public static void printHeader()와 같이 반환 타입을 void로 정의하면 된다.
    • 호출 : printHeader()와 같이 반환 타입이 없으므로 메서드만 호출하고 반환 값을 받지 않으면 된다.
      • String str = printHeader() 반환 타입이 void이기 때문에 이렇게 반환 값을 받으면 컴파일 오류가 발생한다.

void와 return의 생략

모든 메서드는 항상 return을 호출해야 한다. 그런데 반환 타입 void의 경우에는 예외로 printFooter()와 같이 생략해도 된다. 자바가 반환 타입이 없는 경우에는 return을 마지막 줄에 넣어준다. 참고로 return을 만나면 해당 메서드는 종료된다.

5. 메서드 호출과 값 전달1

자바는 항상 변수의 값을 복사해서 대입한다.

 package method;
 
 public class MethodValue1 {
 
 	public static void main(String[] args) {
     int num1 = 5;
     System.out.println("1. changeNumber 호출 전, num1: " + num1);
     changeNumber(num1);
     System.out.println("4. changeNumber 호출 후, num1: " + num1);
   }

 	public static void changeNumber(int num2) {
     System.out.println("2. changeNumber 변경 전, num2: " + num2);
     num2 = num2 * 2;
     System.out.println("3. changeNumber 변경 후, num2: " + num2)
실행결과
1. changeNumber 호출 전, num1: 5
2. changeNumber 변경 전, num2: 5
3. changeNumber 변경 후, num2: 10
4. changeNumber 호출 후, num1: 5

6. 메서드와 형변환

 package method;
 
 public class MethodCasting1 {
 
    public static void main(String[] args) {
         double number = 1.5;
         //printNumber(number); // double을 int형에 대입하므로 컴파일 오류
         printNumber((int) number); // 명시적 형변환을 사용해 double을 int로 변환
       }

     public static void printNumber(int n) {
         System.out.println("숫자: " + n);
       }
    }

7. 메서드 오버로딩

add(int a, int b)
add(int a, int b, int c)
add(double a, double b)

이렇게 이름이 같고 매개변수가 다른 메서드를 여러개 정의하는 것을 메서드 오버로딩이라 한다.

profile
꾸준함으로 성취하는 개발자

0개의 댓글