메서드

이유진·2024년 7월 26일

TIL

목록 보기
13/24

메서드

🍒 오늘은 강의 위주로 진행해서 개념정리로 TIL 마무리!!

  • 메서드 정의

    • 자바에서는 함수를 메서드(Method)라 한다.

      public static int add(int a, int b) {
       System.out.println(a + "+" + b + " 연산 수행");
       int sum = a + b;
       return sum;
      }
    • 무언가 정의해두고 필요할 때 불러서 사용한다는 개념

  • 메서드 선언

    • 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을 사용해야 한다.

  • 메서드 호출 / 용어정리

    • int sum1 = add(5, 10);
      int sum2 = add(15, 20);
    • 메서드를 호출할 때는 다음과 같이 메서드에 넘기는 값과 매개변수(파라미터)의 타입이 맞아야 한다.

    • 물론 넘기는 값과 매개변수(파라미터)의 순서와 갯수도 맞아야 한다.

    • 인수 : 넘기는 값을 말함 = 메서드 내부로 들어가는 값을 의미, 영어로 Argument

    • 매개변수 : 중간에서 전달하는 변수 = 메서드 호출부와 내부 사이에서 값을 전달하는 역할을 하는 변수

      ​ 메서드를 호출할 때 인수를 넘기면, 그 인수가 매개변수에 대입된다.

  • 모든 메서드는 항상 return을 호출해야 한다. 자바가 반환 타입이 없는 경우에는 return을 마지막줄에 넣어준다.
  • 메서드 호출과 값 전달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
    • 간단하게 num1 에 있는 값을 num2 에 대입한다고 표현한다. 하지만 실제로는 그 값을 복사해서 대입하는 것이다.

    • 결과적으로 매개변수 num2 의 값만 10으로 변경되고 num1 의 값은 변경되지 않고 기존 값인 5로 유지된다.

    • 자바는 항상 값을 복사해서 전달하기 때문에 num2 의 값을 바꾸더라도 num1 에는 영향을 주지 않는다.

    • 메소드가 다르면 변수 이름이 같아도 아예 다른 독립된 변수임

      • ( main의 number != changeNumber의 number )
  • 메서드 호출과 값 반환받기

    • package method;
      
      public class MethodValue3 {
          
      	public static void main(String[] args) {
              int num1 = 5;
              System.out.println("changeNumber 호출 전, num1: " + num1); // 출력: 5
              num1 = changeNumber(num1);
              System.out.println("changeNumber 호출 후, num1: " + num1); // 출력: 10
           }
       	public static int changeNumber(int num2) {
              num2 = num2 * 2;
              return num2;
       	}
      }
    • 값을 반환받으려면 return 넣어주기

    • 꼭 기억하자! 자바는 항상 변수의 값을 복사해서 대입한다

  • 메서드 오버로딩

    • add(int a, int b)
      add(int a, int b, int c)
      add(double a, double b)
    • 이름이 같고 매개변수가 다른 메서드를 여러개 정의하는 것을 메서드 오버로딩이라 한다.

    • 같은 이름의 메서드를 여러개 정의했다고 이해하기

    • 규칙

      • 메서드의 이름이 같아도 매개변수의 타입 및 순서가 다르면 오버로딩을 할 수 있다.( 반환 타입은 인정하지 않는다.)

      • 오버로딩 실패!!
            
        int add(int a, int b)
        double add(int a, int b)
    • 매개변수 갯수가 다른경우

      package overloading;
      public class Overloading1 {
          
          public static void main(String[] args) {
              System.out.println("1: " + add(1, 2));
              System.out.println("2: " + add(1, 2, 3));
          }
          
          // 첫 번째 add 메서드: 두 정수를 받아서 합을 반환한다.
          public static int add(int a, int b) {
              System.out.println("1번 호출");
              return a + b;
          }
          
          // 두 번째 add 메서드: 세 정수를 받아서 합을 반환한다.
          // 첫 번째 메서드와 이름은 같지만, 매개변수 목록이 다르다.
          public static int add(int a, int b, int c) {
              System.out.println("2번 호출");
              return a + b + c;
          }
          
      결과
      1번 호출
      1: 3
      2번 호출
      2: 6
    • 매개변수 타입이 다른경우

      package overloading;
      public class Overloading2 {
          public static void main(String[] args) {
              myMethod(1, 1.2);
              myMethod(1.2, 2);
          }
          public static void myMethod(int a, double b) {
              System.out.println("int a, double b");
          }
          public static void myMethod(double a, int b) {
              System.out.println("double a, int b");
          }
      }
      
      결과 
      int a, double b
      double a, int b    
profile
🙌중요한건 꺾였는데도 그냥 하는 마음

0개의 댓글