본문 바로가기

Java/BookExample

Ch6 클래스 - 메소드

17 매개 변수의 수를 모를 경우
package BookExampleHomeWork;

public class Computer {
	int sum1(int[] values) { //리턴타입은 int, 매개변수를 정수배열 values로 가지는 메소드 sum1 선언
		int sum = 0;
		for (int i = 0; i < values.length; i++) {
			sum += values[i]; //sum은 누적 변수이기 때문에 for문 밖에 선언
		}
		return sum; //return값은 sum
	}

	int sum2(int... values) { //리턴타입은 int, 마찬가지로 매개변수를 정수 배열 values로 가지는 메소드 sum2 선언(단, 여기선 ...를 이용함)
		int sum = 0;
		for (int i = 0; i < values.length; i++) {
			sum += values[i];

		}
		return sum;
	}
}
=================================
18 매개 변수의 수를 모를 경우
package BookExampleHomeWork;

public class ComputerExample {

	public static void main(String[] args) {
		Computer myCom = new Computer();
		int[] values1 = {1,2,3}; //호출방법1 : 배열선언 
		int result1 = myCom.sum1(values1); 
		//이후 배열명을 매개값으로 메소드 sum1호출 //리턴값은 result1에 넣는다.
		System.out.println("result1: " + result1);
		
		int result2 = myCom.sum1(new int[] {1,2,3,4,5}); 
		//호출방법2 : 특정 값 목록을 가진 배열을 선언하는 명령어를 매개값으로 넣어 메소드 sum1호출
		System.out.println("result2: " + result2);
	
		int result3 = myCom.sum2(1,2,3); 
		//호출방법3 : 배열의 값을 일반 매개변수처럼 직접 입력하면, 메소드가 호출되면서 자동으로 해당 값을 가진 배열이 생성된다.
		System.out.println("result3: " + result3); 
		//이때 라이브러리 클래스에는 ...를 사용한 배열을 매개변수로 가지는 메소드 선언 필요
		
		int result4 = myCom.sum2(1,2,3,4,5);
		System.out.println("result4: " + result4);
		
		myCom.sum2(values1); 
		//사실 ...를 사용해서 메소드 선언한 경우에도 메소드 호출 방법1,2를 사용할 수 있다.
		myCom.sum2(new int[] {1,2,3,4,5});			
	}
}

 

19 returnpackage BookExampleHomeWork;

public class Car2 {
	// 필드
	int gas;

	// 메소드
	void setGas(int gas) { //gas 필드의 초기값을 주는 메소드 
		this.gas = gas; //리턴값이 없는 메소드로 매개값을 받아서 gas필드값을 변경
	}

	boolean isLeftGas() { //gas의 잔량 여부를 알렫주는 메소드
		if (gas == 0) {//리턴값이 boolean인 메소드로 gas 필드값이 0이면 false,아니면 true를 리턴
			System.out.println("gas가 없습니다.");
			return false; // false를 리턴
		}
		System.out.println("gas가 있습니다");
		return true; // true를 리턴
	}
	
	void run() { //gas의 잔량에 따라 자동차를 작동하거나 작동하지 않게 하는 메소드
		while(true) {
			if(gas > 0) {
				System.out.println("달립니다. (gas 잔량: " + gas + ")");
				gas -= 1;
			} else {
				System.out.println("멈춥니다. (gas 잔량: " + gas+ ")");
				return; //메소드 실행 종료 
				(반복문 안에 있기 때문에 return이나 break가 필요하다. 
				사실 while문 뒤에 실행문이 더이상 없기 때문에 break도 가능함) 
			}
		}
	}
}
==============================================
20 returnpackage BookExampleHomeWork;

public class CarExample2 {

	public static void main(String[] args) {
		Car2 myCar = new Car2();
		
		myCar.setGas(5); //Car2의 setGas()메소드 호출 (리턴값 없음)
		
		boolean gasState = myCar.isLeftGas(); 
		//Car2의 isLeftGas()메소드 호출 (매개변수는 없음. 사실 위의 메소드에서 필드값 변경을 이미했기 때문)
		if(gasState) { 
		//위에서 bollean리턴값이 담긴 gasState로 조건문 안에서 또다른 메소드를 호출할 수 있게 한다.
			System.out.println("출발합니다");
			myCar.run(); //Car의 run()메소드 호출
		}
		
		if(myCar.isLeftGas()) { //Car2의 isLeftGas() 메소드 호출
			System.out.println("gas를 주입할 필요가 없습니다");
		} else {
			System.out.println("gas를 주입하세요.");
		}
	}
}

package BookExampleHomeWork;

public class Calculator { 
	int plus(int x, int y) {		//3. 세번째 호출되는 메소드 (x=7, y=10)
		int result = x + y; 		//4. 처음으로 연산 후 result값을 리턴한다. 
		return result; 				//result = 17
	}

	double avg(int x, int y) {		//2. 두번째 호출되는 메소드
		double sum = plus(x,y); 	//plus 메소드 호출
		double result = sum /2 ; 	//5. plus메소드를 실행한 후 바로 직전 호출해준 여기로 돌아와 연산 수행 (이 때 result =17이란 리턴값을 가지고 왔다)
		return result; 			 //result = 17/2 = 8.5
	}

	void execute() { 			//1.실행클래스에서 호출된 메소드
		double result = avg(7,10); 	//avg 메소드 호출
		println("실행결과: " + result);	//6. result = 8.5을 가지고 돌아옴. 괄호 안은 문자열 연산이 됨(문자열 + 8.5 = String) > println메소드를 호출한다.
	}
	
	void println(String message) { 		//7. message = "실행결과: 8.5"란 문자열이다.
		System.out.println(message); 	//8.문자열을 출력한다.
	}
}
================================================
package BookExampleHomeWork;

public class CalculatorExample {

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

 

23 클래스 외부에서 메소드 호출
package BookExampleHomeWork;

public class Car3 {
	//필드
	int speed;
	
	//메소드
	int getSpeed() { //단순히 필드 speed의 값을 return해주는 메소드
		return speed;
	}
	
	void keyTurnOn() { //
		System.out.println("키를 돌립니다.");
	}
	
	void run() {
		for(int i=10; i<=50; i+=10) {
			speed = i; //필드 값 speed = 50을 저장하고 끝남.
			System.out.println("달립니다.(시속:" + speed + "km/h)");
		}
	}
}
============================================
24 클래스 외부에서 메소드 호출
package BookExampleHomeWork;

public class CarExample3 {

	public static void main(String[] args) {
		Car3 myCar = new Car3();
		myCar.keyTurnOn();
		myCar.run();
		int speed = myCar.getSpeed(); 
//getSpeed 메소드를 통해 Car3의 필드 speed값을 받아와 실행 클래스에서도 저장한다.
		System.out.println("현재 속도: " + speed + "km/h");
	}
}

25 메소드 오버로딩
package BookExampleHomeWork;

public class Calculator2 {
	// 정사각형의 넓이
	double areaRectangle(double width) {
		return width * width;
	}

	// 직사각형의 넓이
	double areaRectangle(double width, double height) {
		return width * height;
	}
}
==================================
26 메소드 오버로딩
package BookExampleHomeWork;

public class CalculatorExample2 {

	public static void main(String[] args) {
		Calculator2 myCalcu = new Calculator2();
		
		//정사각형의 넓이 구하기
		double result1 = myCalcu.areaRectangle(10);
        //자동형변환으로 areRectangle(double width)를 알아서 찾는다. 이때 warning혹은 error가 뜨지만 정상적으로 실행된다.
		
		//직사각형의 넓이 구하기
		double result2 = myCalcu.areaRectangle(10, 20);
		
		//결과 출력
		System.out.println("정사각형 넓이=" + result1);
		System.out.println("직사각형 넓이=" + result2);
	}
}
 

 

'Java > BookExample' 카테고리의 다른 글

열거 객체의 메소드  (0) 2021.03.03
열거 타입과 열거 상수  (0) 2021.03.03
배열복사  (0) 2021.03.02
add메소드와 배열생성  (0) 2021.02.28
배열 속의 배열  (0) 2021.02.28