본문 바로가기
Programing/JAVA (& 혼공자Java)

자바(Java) - 메소드4 (메소드호출)

by a.k.a DUKI 2020. 10. 14.
728x90
반응형
SMALL

메소드 호출

메소드는 클래스 내부, 외부의 호출에 의해 실행된다.

클래스 내부의 다른 메소드에서 호출할 경우에는 단순히 메소드 이름으로 호출이 가능하다.

클래스 외부의 메소드를 호출하는 경우 클래스로부터 객체를 생성한 뒤 참조 변수를 이용해서 메소드를 호출해야 한다.

객체 내부에서 호출

클래스 내부에서 다른 메소드를 호출할 경우 아래처럼 작성한다. 메소드가 매개 변수를 가지고 있을 떄에는 매개변수의 타입과 수에 맞게 매개값을 제공한다.

메소드 (매개값, ... );

 

메소드가 리턴값이 없거나, 있어도 받고 싶지 않을 경우 아래처럼 모두 호출이 가능하다.

혼공자 유툽 참고

리턴값이 있는 메소드를 호출하고 리턴값을 받고 싶다면 아래처럼 변수를 선언하고 리턴값을 대입한다.

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

혼공자 유툽 참고

 

예시1) 클래스 내부에서 메소드 호출 / Calculator execute() 실행

public class Calculator {
	// 메소드
	int plus(int x, int y) {
		int result = x + y;
		return result;
	}

	double avg(int x, int y) {
		double sum = plus(x, y); // 2. plus() 호출
		double result = sum / 2;
		return result;
	}

	void execute() {
		double result = avg(7, 10); // 1. avg() 호출
		println("실행결과: " + result); // 3. println() 호출
	}

	void println(String msg) {
		System.out.println(msg);
	}

}
public class CalculatorEx {

	public static void main(String[] args) {
		Calculator calc = new Calculator();
		calc.execute(); //Calculator의 execute() 메소드 호출
	}

}

 

 

객체 외부에서 호출

클래스 외부에서 다른 메소드를 호출할 경우 클래스로부터 객체를 생성한다. 메소드는 객체에 소속된 멤버이므로 객체가 존재하지 않으면 메소드도 존재하지 않기 때문이다.

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

 

객체가 생성되면 참조 변수와 함께 도트(.) 연산자를 사용해서 메소드를 호출 한다.

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

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

예시2) 클래스 외부에서 메소드 호출

Car myCar = new Car(); //Car 객체 생성
myCar.key TrunOn(); //Car객체의 메소드 호출 리턴값이 없음
myCar.run(); //Car객체의 메소드 호출 리턴값이 없음
int speed = myCar.getSpeed(); ////Car객체의 메소드 호출, 리턴값이 있고 변수 speed에 저장

 

예시3) 클래스 외부에서 메소드 호출

public class Car {
	// 필드
	int speed;

	// 생성자

	// 메소드
	int getSpeed() {
		return speed;
	}

	void keyTurnOn() {
		System.out.println("키를 돌린다.");
	}

	void run() {
		for (int i = 0; i <= 10; i++) {
			speed = i;
			System.out.println("달립니다. (시속: " + speed + "km/h)");
		}
	}
}
public class CarEx {

	public static void main(String[] args) {
		Car myCar = new Car();

		myCar.keyTurnOn();
		myCar.run();
		int speed = myCar.getSpeed();
		System.out.println("현재 속도: " + speed + "km/h");
	}
}

 

 

메소드 오버로딩

클래스 내에 같은 이름의 메소드를 여러 개 선언 하는 것이며, 매개값을 다양하게 받아 처리할 수 있도록 하기 위함이다.

메소드의 오버로딩의 조건은 매개변수의 타입, 개수, 순서 중 하나가 달라야 한다.

혼공자 유툽 참고

예시4) 메소드 오버로딩

//같은 메소드 이름으로  변수 타입이 다르게 선언

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


double plus(double x, double y){
	double result = x + y;
    return result;
}
plus(10,20); // plus(int x, int y)가 실행된다.
plus(10.2, 7.2); //plus(double x, double y)가 실행된다.

 

그럼 아래의 경우는 어떻게 될까?

int x = 3;
double y = 0.2;
plus(x, y);

plus(double x, double y) 가 실행된다.

그 이유는 JVAM이 매개 변수 타입을 먼저 보지만, 매개 변수의 타입이 일치하지 않을 경우 자동 타입 변환이 가능한지 검사한다.

그래서 int는 double타입으로 변환이 가능하므로 plus(double x, double y) 가 실행된다.

 

 

메소드 오버로딩 주의 할 점

  • 매개 변수의 타입과 개수, 순서가 똑같은 경우 매개 변수 이름이 다르다고 해서 오버로딩이 아니다.
  • 리턴 타입만 다리고 매개 변수가 동일한 경우 오버로딩이 아니다.
//컴파일 에러남
int divide(int x, int y){ ... }
double divide(int k, int j){ ... }

 

오버로딩의 대표적인 예는 System.out.println() 메소드이다. 매개값의 타입에 따라서 오버로딩된 println() 메소드 중 하나를 호출한다.

void println() { ... }
void println(boolean x) { ... }
void println(char x) { ... }
void println(char[] x) { ... }
void println(double x) { ... }
void println(float x) { ... }
void println(int x) { ... }
void println(long x) { ... }
void println(Object x)) { ... }
void println(Striing x) { ... }

 

예시5) 메소드 오버로딩

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

	public static void main(String[] args) {
		Calculator calc = new Calculator();
		
		//정사각형 넓이
		double result1 = calc.areaRectangle(7);
		
		//직사각형 넓이
		double result2 = calc.areaRectagle(5, 7);
		
		System.out.println(result1);
		System.out.println(result2);
	}

}

 

 

※용어 정리

  • 호출: 메소드를 실행하려면 '메소드 이름(매개값, ...)' 형태로 호출

  • 오버로딩: 클래스 내에 같은 이름의 메소드를 여러개 선언하는 것. 메소드 오버로딩의 조건은 매개 변수의 타입, 개수, 순서 중 하나가 달라야 한다.

 

 

본 내용은 #혼자공부하는자바 책을 참고해 공부하려 작성했습니다.
728x90
반응형
LIST

댓글