2 minute read

Updated:

06-4 메소드

메소드 호출

  • 클래스 내부에서 호출할 경우 메소드 이름만 호출, 외부에서 호출할 경우 객체을 생성하고 참조 변수를 이용해야 함

객체 내부에서 호출

  • 리턴값이 없거나 있어도 받고 싶지 않을 경우

    메소드( 매개값, … );

public class ClassName{
  void method1( String p1, int p2 ){
  
  }
  
  void method2(){
  method1( "홍길동", 100 );
  }
}
  • 리턴값이 있는 메소드를 호출하고 리턴값을 받고 싶을 경우

    타입 변수 = 메소드( 매개값, … );

  • 이때 변수 타입은 메소드 리턴 타입과 동일하거나, 자동 타입 변환이 될 수 있어야 함.
    public class ClassName {
    int method1( int x, int y ){
      int result = x + y;
      return result;
     }
       
    void method2() {
      int result1 = method(10, 20); //result1에는 30이 저장
      double result2 = method(10, 20); //result2에는 30.0이 저장
      }
    }
    

객체 외부에서 호출

1) 클래스로부터 객체를 생성

클래스 참조변수 = new 클래스( 매개값, …);

2) 참조 변수와 함께 도트(.) 연산자를 이용해서 메소드를 호출

참조변수.메소드( 매개값, … ); //리턴값이 없거나 리턴값을 받지 않을 경우
타입 변수 = 참조변수.메소드( 매개값, … ); //리턴값이 있고, 리턴값을 받고 싶을 경우

메소드 오버로딩

  • 같은 이름의 메소드를 여러 개 선언하는 것
  • 메소드 오버로딩의 조건은 매개 변수의 타입, 개수, 순서 중 하나가 달라야 한다는 점
    class 클래스 {
    리턴 타입   메소드 이름  ( 타입 변수, ... ) { ... }
       ↑            ↑             ↑
    상관없음       동일      매개 변수의 타입, 개수, 순서가 달라야 함
       ↓            ↓             ↓
    리턴 타입   메소드 이름  ( 타입 변수, ... ) { ... }
    
  • 오버로딩이 필요한 이유 : 매개값을 다양하게 받기 위함
// 메소드 선언

int plus( int x, int y ) {
  int result = x + y;
  return result;
}

double plus( double x, double y) {
  double result = x + y;
  return result;
}
  • 오버로딩된 메소드를 호출할 경우 JVM의 매개값은 타입을 보고 메소드를 선택
 // plus(int x, int y) 실행
 
 plus(10, 20);
 
 // plus(double x, double y) 실행
 
 plus(10.5, 20.3);
 
 // int 타입은 double 타입으로 자동변환되므로 plus(double x, double y) 실행
 
 int x = 10;
 double y = 20.3;
 plus(x, y);
  • 매개변수의 타입과 개수, 순서가 똑같을 경우 매개 변수 이름이 다르다고 메소드 오버로딩이 아님
 // 메소드 오버로딩 x (컴파일 에러)
 
 int divide( int x, int y ) { ... }
 double divide( int boonja, int boonmo) { ... }

### 메소드 오버로딩 예제

  • 매개값이 1개면 정사각형의 넓이를, 2개이면 직사각형의 넓이를 계산하여 리턴함.
  • 어떤 메소드가 호출될 것인지는 매개값의 개수에 달려있음.
 // 소스코드 Calculator.java
 
 public class Calculator{
  //정사각형의 넓이
    double areaRectangle(double width) {
      return width * width;
     }
  
  //직사각형의 넓이
    double areaRectangle(double width, double height) {
      return width * height;
    }
}
// 소스코드 CalculatorExample.java

public class CalculatorExample {
  public static void main(String[] args) {
    Calculator myCalc = new Calculator();
    
    //정사각형의 넓이 구하기
    double result1 = myCalc.areaRectangle(10);
    
    //직사각형의 넓이 구하기
    double result2 = myCalc.areaRectangel(10, 20);
    
    //결과 출력
    system.out.println("정사각형 넓이=" + result1);
    system.out.println("직사각형 넓이=" + result2);
    }
}

Categories:

Updated: