메서드 오버로딩3

Mia Lee·2021년 11월 25일
0

JAVA

목록 보기
51/98
package ex_overloading;

public class Ex2 {

	public static void main(String[] args) {

		/*
		 * 메서드 오버로딩과 코드의 재사용
		 * 
		 */
		
		WalkBad wb = new WalkBad();
		wb.walk();
		wb.walk(2);
		wb.walk(2, "m"); // m로 변환
		wb.walk(2, "cm"); // cm 그대로 출력
		wb.walk(2, "inch"); // 계산 불가능한 단위!
		
		System.out.println("============================");
		
		WalkGood wg = new WalkGood();
		wg.walk();
		wg.walk(2);
		wg.walk(2, "m");
		// => 하나의 메서드에서 다른 메서드 호출을 통해 중복 코드를 제거할 수 있으며
		//    중복 코드를 제거하면 유지보수성이 향상!
		
	}

}

class WalkGood {
	// 오버로딩 된 메서드끼리 수행할 작업이 중되는 경우
	// 하나의 메서드에서 다른 메서드를 호출하여
	// 필요한 데이터를 전달함으로써 중복되는 코드를 제거할 수 있다!
	// 사람의 한 걸음의 이동 거리 출력
	public void walk() {
//		System.out.println("100cm 이동!");
		walk(1, "cm");
	}
	
	// 사람 걸음 수에 따른 이동 거리 출력
	public void walk(int step) {
//		System.out.println(step * 100 + "cm 이동!");
		walk(step, "cm");
		
	}
	
	// 사람 걸음 수에 따른 이동 거리를 지정한 단위에 따라 변환 후 출력
	public void walk(int step, String unit) {
		// ex) 2 걸음, m => 100 * 2 = 200cm / 100 = 2m 결과를 출력
		// switch ~ case문을 사용하여 단위 판별("cm" or "m")
		switch (unit) {
			case "cm" :
				System.out.println(step * 100 + "cm 이동!");
				break;
			case "m" : // step * 100 결과를 m로 변환하기 위해 / 100
				System.out.println(step * 100 / 100 + "m 이동!");
				break;
			default :
				System.out.println("알 수 없는 단위이므로 이동 불가!");
		}
	}
	
}

class WalkBad {
	
	// 사람의 한 걸음의 이동 거리 출력
	public void walk() {
		System.out.println("100cm 이동!");
		
	}
	
	// 사람 걸음 수에 따른 이동 거리 출력
	public void walk(int step) {
		System.out.println(step * 100 + "cm 이동!");
		
	}
	
	// 사람 걸음 수에 따른 이동 거리를 지정한 단위에 따라 변환 후 출력
	public void walk(int step, String unit) {
		// ex) 2 걸음, m => 100 * 2 = 200cm / 100 = 2m 결과를 출력
		// switch ~ case문을 사용하여 단위 판별("cm" or "m")
		switch (unit) {
			case "cm" :
				System.out.println(step * 100 + "cm 이동!");
				break;
			case "m" : // step * 100 결과를 m로 변환하기 위해 / 100
				System.out.println(step * 100 / 100 + "m 이동!");
				break;
			default :
				System.out.println("알 수 없는 단위이므로 이동 불가!");
		}
	}
	
}








연습

package ex_overloading;

public class Test2 {

	public static void main(String[] args) {

		/*
		 * 사각형(Rectangle) 넓이 계산하는 클래스
		 * cal() 메서드 작성
		 * 정사각형을 계산하는 메서드 => 매개변수 1개 (리턴타입 : double)
		 * 직사각형을 계산하는 메서드 => 매개변수 2개 (리턴타입 : double)
		 * 
		 */
		
		Rectangle r = new Rectangle();
		double result = r.cal(10);
		System.out.println("정사각형 넓이 : " + result);
		
		double result2 = r.cal(10, 20);
		System.out.println("직사각형 넓이 : " + result2);
		
	}

}

class Rectangle {
	
	// 사각형 한변의 길이를 전달받아 정사각형 넓이 계산
//	public double cal(double width) {
//		System.out.println("사각형 가로 길이 = " + width);
//		System.out.println("사각형 세로 길이 = " + width);
//		
//		return width * width;
//		
//	}
	
	// 정사각형 계산 코드와 직사각형 계산 코드가 거의 동일하므로
	// 정사각형에 필요한 가로길이를 직사각형 계산 메서드 호출 후
	// 가로길이와 세로길이에 전달하면 코드 중복 제거됨
	public double cal(double width) {
		// cal(width, height) 메서드를 호출하여
		// 가로 길이를 두 매개변수에 전달하면 직사각형 계산과 동일하므로
		// 계산된 결과를 리턴받아 다시 리턴
		return cal(width, width);
	}
	
	
	// 사각형 가로, 세로 길이를 전달받아 직사각형 넓이 계산
	public double cal(double width, double height) {
		System.out.println("사각형 가로 길이 = " + width);
		System.out.println("사각형 세로 길이 = " + height);
		
		return width * height;
		
	}
	
	
}























0개의 댓글