본문 바로가기

BackEnd/Java

[java] 이것이 자바다 ch06 메소드

728x90
반응형

1. 메소드 선언과 호출

 

◎ 메소드 선언

   ▷ 객체의 동작을 실행 블록으로 정의하는 것입니다.

   ▷ 리턴 타입 : 메소드 실행 후 호출한 곳으로 전달하는 결과 값의 타입

   ▷ 메소드명 : 첫 문자를 소문자로 시작하고, 캐멀 스타일로 작성

   ▷ 매개변수 : 메소드를 호출할 때 전달한 매개 값을 받기 위해 사용합니다.

   ▷ 실행 블록 : 메소드 호출 시 실행되는 부분입니다.

 

 

◎ 메소드 선언 예시

public class Calculator {
	
	// 리턴 값이 없는 메소드 선언
	void powerOn() {
		System.out.println("전원을 켭니다.");
	}

	// 리턴 값이 없는 메소드 선언
	void powerOff() {
		System.out.println("전원을 끕니다.");		
	}
	
	// 호출 시 두 정수 값을 전달 받고,
	// 호출한 곳으로 결과 값을 int 형으로 리턴한느 메소드
	int plus(int x, int y) {
		int result = x + y;
		return result;
	}
	
	// 호출 시 두 정수 값을 전달 받고,
	// 호출한 곳으로 결과 값을 double 형으로 리턴하는 메소드
	double divide(int x, int y) {
		double result = (double)x / y;
		return result;
	}
}

 

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);
		
		double result2 = myCalc.divide(10, 4);
		System.out.println("result2: " + result2);
		
		myCalc.powerOff();
	}
}


여기서 plus, divide에 들어가는 값들은 별도로 변수로 선언해도 됩니다.

 

◎ 메소드 호출

   ▷ 메소드 블록을 실제로 실행하는 것입니다.

   ▷ 클래스로부터 객체가 생성된 후에 메소드는 생성자와 다른 메소드 내부에서 호출될 수 있고,

        객체 외부에서도 호출될 수 있습니다.

   ▷ 외부 객체에서는 참조 변수와 도트(.) 연산자로 호출됩니다.

 

◎ 가변길이 매개변수

   ▷ 메소드가 가변길이 매개변수를 가지고 있다면 매개변수의 개수와 상관없이 매개 값을 줄 수 있습니다.

   ▷ 메소드 호출 시 매개값을 쉼표로 구분해서 개수와 상관없이 제공할 수 있습니다.

   ▷ 매개값들은 자동으로 배열 항목으로 변환되어 메소드에서 사용됩니다.

 

public class computer {
	
	int sum(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 result1 = myCom.sum(1, 2, 3);
		System.out.println("result1 : " + result1);
		
		int result2 = myCom.sum(1, 2, 3, 4, 5);
		System.out.println("result2 : " + result2);
		
		int[] values = { 1, 2, 3, 4, 5};
		int result3 = myCom.sum(values);
		System.out.println("result3 : " + result3);
		
		int result4 = myCom.sum(new int[] {1,2,3,4,5});
		System.out.println("result4 : " + result4);
	}
}

// 출력 :
// result1 : 6
// result2 : 15
// result3 : 15
// result4 : 15

 

◎ return문

   ▷ 메소드의 실행을 강제 종료하고 호출한 곳으로 돌아간다는 의미입니다.

   ▷ 메소드 선언에 리턴 타입이 있을 경우에는 return 문 뒤에 리턴 값을 추가로 지정해야 합니다.

   ▷ return문 이후에 실행문을 작성하면 'Unreachable code'라는 컴파일 에러가 발생합니다.

 

public class Car {
	
	int gas;
	
	void setGas(int gas) {
		this.gas = gas;
	}
	
	boolean isLeftGas() {
		if(gas == 0) {
			System.out.println("gas가 없습니다.");
			return false;
		}
		System.out.println("gas가 있습니다.");
		return true;
	}
	
	void run() {
		while(true) {
			if(gas > 0) {
				System.out.println("달립니다.(gas잔량:" + gas + ")");
				gas -= 1;
			} else {
				System.out.println("멉춥니다.(gas잔량:" + gas + ")");
				return;
			}
		}
	}
}



public class CarExample {
	public static void main(String[] args) {
		
		Car myCar = new Car();
		
		myCar.setGas(5);
		
		if(myCar.isLeftGas()) {
			System.out.println("출발합니다.");
			
			myCar.run();
		}
		
		System.out.println("gas를 주입하세요.");
	}
}

//	출력 : 
//	gas가 있습니다.
//	출발합니다.
//	달립니다.(gas잔량:5)
//	달립니다.(gas잔량:4)
//	달립니다.(gas잔량:3)
//	달립니다.(gas잔량:2)
//	달립니다.(gas잔량:1)
//	멉춥니다.(gas잔량:0)
//	gas를 주입하세요.

 

 

 

◎ 메소드 오버로딩

   ▷ 메소드 이름은 같되 매개변수의 타입, 개수, 순서가 다른 메소드를 여러 개 선언하는 것입니다.

 

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 myCalc = new Calculator();
		
		double result1 = myCalc.areaRectangle(10);
		double result2 = myCalc.areaRectangle(10, 20);
		
		System.out.println("정사각형의 넓이= " + result1);
		System.out.println("직사각형의 넓이= " + result2);	
	}
}

 

메소드를 생성하고 사용하는 방법에 대해서 배워보았습니다.

 

아직은 익숙하게 사용이 되지 않네요,, 노력해서 익숙해지도록 해봐야겠어요!

 

많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

 

 

728x90
반응형