본문 바로가기

자바 웹 개발자가 될거야/JAVA

[JAVA] 메서드 / 리턴문 / 메서드 호출 / 메서드 오버로딩

 

 

< 메서드 >

 

- 객체의 동작에 해당하는 { } 블록

- 메서드 호출하면 중괄호 블록에 있는 모든 코드들이 실행

 

 

① 메서드 선언

 

- 리턴타입 메서드명 ( [매개변수 선언, ... ] ) {

    실행할 코드 ....

  }

 

 

- 메서드 선언은 선언부와 실행 블록으로 구성

  · 선언부 : 리턴 타입, 메소드 이름, 매개 변수 선언

 

 

- 메서드는 두가지 값을 return 할 수 없다.

  · return 변수1, 변수2 (X)

  · 리턴값이 없으면 void로 선언

 

 

 

- 메소드 이름 규칙

 

· 숫자로 시작하면 안됨

·특수문자는 $, _ 만 사용가능

· 관례적으로 소문자 사용

· 혼합된 이름이라면 띄어쓰기 다음에 오는 문자는 대문자로

 

 

- 매개 변수 선언

  · 매개변수는 메소드가 실행할 때 필요한 데이터를 외부로부터 받기 위해 사용

 

 

- 호출시에는 참조변수.메서드이름(매개값, ...)

 

 

public class Calculator{

	// 메서드
    void powerOn(){
    	System.out.println("전원을 켭니다.");
    }
    
    int plus(int x, int y){
    	int result = x + y;
        return result;
    }
    
    double divide(int x, int y){
    	double result = (double)x/(double)y;
        return result;
    }
    
    void powerOff(){
    	System.out.println("전원을 끕니다.");
    }
}


public class CalculatorExample{
	public static void main(String[] args){
    	// 생성자
    	Calculator myCalc = new Calculator();
        // 메서드 호출
        myCalc.powerOn();
        
        int result1 = myCalc.plus(5,6);
        System.out.println("result1: "+result1);
        
        byte x = 10;
        byte y = 4;
        double result2 = myCalc.divide(x,y);
        System.out.println("result2: "+result2);
        
        myCalc.powerOff();
        
    }
}

 

 

- 가변인자

 

· 메서드 선언할 때 매개변수 개수를 알 수 없는 경우

1) ... 으로 선언

2) 같은 타입의 매개변수가 많이 들어오면 배열로 생각해서 처리해줌

 

int sum1(int ... values) {}
int sum2(int[] values) {}

sum2(10,20); // int [] values = {10,20}
sum2(100,200,300); // int [] values = {100,200,300}

 

public class Computer{
	int sum1(int[] values){
    	int sum=0;
        for(int i=0; i<values.length;i++){
        	sum+=values[i];
        }
        return sum;
    }
    
    int sum2(int ... values){
    	int sum=0;
        for(int i=0; i<values.length; i++){
        	sum+=values[i];
        }
        return sum;
    }
    
}


public class ComputerExample{
	public static void main(String[] args){
    	Computer myCom = new Computer();
        
        int[] values1 = {1,2,3};
        int result1 = myCom.sum1(values1);
        System.out.println("result1: "+result1);
        
        int result2 = myCom.sum1(new int[] {1,2,3,4,5});
        System.out.println("result2: "+result2);
        
        int result3 = myCom.sum2(1,2,3);
        System.out.println("result3: "+result3);
        
        int result4 = myCom.sum2(1,2,3,4,5);
        System.out.println("result4: "+result4);
        
    }
}

 

 

 

< 리턴문 >

 

- 메서드 선언에 리턴 타입이 있는 메서드는 반드시 리턴문을 사용해서 리턴값 지정

- 리턴문 이후의 실행문은 실행되지 않는다

 

 

① void

 

- 리턴값이 없는 메서드에서 사용

- void로 선언된 메서드에서도 return문을 사용할 수 있고 이것은 메서드 실행을 강제 종료시키는 역할임

  · while문에서 break문 대신 return문 사용가능

 

 

 

< 메서드 호출 >

 

- 메서드는 클래스 내/외부의 호출에 의해 실행

 

 

① 객체 내부에서 호출

 

- 단순한 메서드 이름으로 호출

- 리턴값이 있어도 받고 싶지 않으면 return문 생략가능

- 리턴값이 있는 메서드 호출하고 리턴값 받고 싶으면 변수 선언해서 리턴값 대입

 

public class ClassName{
	int method1(int x, int y){
    	int result = x + y;
        return result;
    }
    
    void method2(){
    	int result1 = method1(10,20);
    	double result2 = method1(10,20);
    }
    
    void method3(){
    	method1(10,20);
    }
}

  · 리턴값을 result1,2 변수 선언해서 받음

  · 리턴값없이 호출만 하려면 메서드명만 쓰면됨

 

 

② 객체 외부에서 호출

 

- 클래스부터 생성한 뒤 참조 변수 이용해서 호출

 

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

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

 

Car myCar = new Car();
myCar.keyTurnOn(); // 리턴값 X
myCar.run(); // 리턴값 X
int speed = myCar.getSpeed(); // 리턴값 O

 

 

< 메서드 오버로딩 >

 

 

- 클래스 내에 같은 이름의 메서드를 여러 개 선언하는 것

- 조건 : 매개변수의 타입, 개수, 순서 중 하나가 달라야함

- 매개값을 다양하게 받아 처리할 수 있도록 하기 위함

- 오버로딩된 메서드를 호출할 경우 매개값의 타입을 보고 메서드 선택함

 

- 아래와 같이 리턴 타입만 다르고 매개변수가 동일한 경우 메소드 오버로딩 아님

int divide(int x, int y) { ... }
double divide(int a, int b) { ... }

 

 

public class Calculator{
	//정사각형 넓이
    double areaRectangle(double width){
    	return width*width;
    }
    
    //직사각형 넓이
    double areaRectangle(double width, double height){
    	return width*height;
    }
}

public class CalculatorExample{
	public static void main(String[] args){
    	Calculator myCalcu = new Calculator();
        
        //정사각형 넓이 구하기
        double result1 = myCalcu.areaRectangle(10);
        System.out.println(result1);
        
        //직사각형 넓이 구하기
        double result2 = myCalcu.areaRectangle(10,20);
        System.out.println(result2);
    }   
}