본문 바로가기
국비지원/JAVA

[JAVA] 13-2. method 중복 (Overloading)

by cosmog 2022. 10. 7.
반응형
method 중복 (Overloading)
  • 동일한 이름의 method를 여러개 만드는 것.
  • 매개변수 parameter 유형/개수/순서가 다르다.

💡 return값은 영향을 미치지 않는다.

 

Overloading 예시

java에서 기본으로 제공하는 method도 (parameter값)을 다르게 갖는 overloading으로 이루어져있다.

 

🔆main 클래스

package day13.overload;

public class MainClass {
	
	public static void main(String[] args) {
		
		Basic b = new Basic();
		
		b.input(1);
		b.input("홍길동");
		b.input("a", 1);
		b.input(3, "b");
		b.input(100, 100, 1);
		
		//int배열, double배열, string배열
		//Arrays.toString();
	}

}

🔆 Basic 클래스 (overloadint method 많이 생성..)

package day13.overload;

public class Basic {
	
	/*
	 * 오버로딩 - 같은 이름의 method를 여러개 만드는 것
	 * 
	 * <규칙>
	 * 1. 반환유형 or 접근제어자는 영향을 미치지 않는다.
	 * 2. parameter type or 종류 or 순서 중 한개만 다르다면 ok~
	 */
	
	void input(int a) {
		System.out.println("정수 1개 입력");
	}
	
	//반환은 상관이 없기때문에 아래는 완전 똑같은 method로 인식된다.
	//int input(int a) {
	
	void input(String s) {
		System.out.println("문자열 1개 입력");
	}
	
	void input(String s, int a) {
		System.out.println("문자열 1개 입력, 정수 1개 입력");
	}
	
	//parameter 자리 바꾸기 허용.
	void input(int a, String s) {
		System.out.println("정수 1개 입력, 문자열 1개 입력");
	}
	
	void input(double a, double b, int c) {
		System.out.println("실수 2개, 정수 1개 입력");
	}
	

}

 

Quiz - Overloading을 사용하여 도형의 넓이 구하기.

 

아래 조건을 만족시키도록 코드를 짜보아라..

/* 요구사항
	 * 부모 Calculator 선언하세요.
	 * 자식 Computer클래스 생성 합니다.
	 *
	 * Calculator 클래스
	 * Calculator의 멤버변수 int result, double pi를 선언하세요
	 * 
	 * Calculator의 메서드
	 * add(int) - result에 값을 누적시키는 기능
	 * circle(int) - pi를 이용해서 원의 넓이를 리턴하는 기능  (원의넓이: PI * r * r)
	 * ------------------------------------------------------------------
	 * Computer 클래스의 메서드
	 * circle() - 메서드를 오버라이딩 하고, pi대신 하는 Math.PI를 사용해서 원의 넓이를 구하세요.
	 * rect(double) - 정사각형의 넓이 를 리턴
	 * rect(double, double) - 직사각형의 넓이 를 리턴
	 * rect(double, double, double) - 직육면체의 넓이 를 리턴
	 * 
	 * 
	 * 메인클래스에서 Calculator, Computer를 생성하고 메서드를 확인하세요.
	 */

 

🔆 main 클래스

package day13.quiz;

public class Main {
	
	public static void main(String[] args) {
		
		Computer com = new Computer();
		
		System.out.printf("원의 넓이는 %.2f \n", com.circle(5));
		System.out.println("정사각형의 넓이는 "+ com.rect(14));
		System.out.println("직사각형의 넓이는 "+ com.rect(14, 23));
		System.out.println("직육면체의 넓이는 "+ com.rect(12,14,28));
		
		com.add(12);
		com.add(12);
		com.add(12);
	}

}

 

🔆 Calculator (부모 클래스)

package day13.quiz;

public class Calculator {
	
	int result;
	double pi;
	
	Calculator(){
	}
	
	Calculator(int pResult, double pPi){
		result = pResult;
		pi = pPi;
	}
	
	//result에 받은 값을 누적
	void add(int num) {
		result += num;
		System.out.println("누적값: " + result);
	}
	
	//pi를 이용해서 원의 넓이를 리턴
	double circle(int r) {
		double circle_area = pi * r * r ;
		return circle_area;
	}

}

 

🔆 Computer (자식 클래스)

package day13.quiz;

public class Computer extends Calculator{
	
	Computer(){
		
	}
	
	Computer(int pResult, double pPi){
		result = pResult;
		pi = pPi;
	}
	
	//pi대신 하는 Math.PI를 사용해서 원의 넓이를 구하세요 (⭐Overriding된 부분)
	double circle(int r){
		return Math.PI * r * r;
	}
	
    /* rect는 ⭐overloading */
    
	//정사각형 넓이
	double rect(double length) {
		double square = length * length;
		return square;
	}
	
	//직사각형 넓이
	double rect(double depth, double width) {
		double rectangle = depth * width;
		return rectangle;
	}
	
	//직육면체의 넓이 
	double rect(double depth, double width, double height) {
		double cuboid = depth * width * height;
		return cuboid;
	}


}

Quiz - Arrays.toString()기능을 printArray 클래스로 만들기.

 

🔆 main 클래스

package day13.quiz2;

import java.util.Arrays;

public class Main {
	/*
	Arrays.toString() 의 기능을 따라하기


	PrintArray클래스
	1. toArray() - int[]을 매개변수로 입력받아 배열의 모형을 문자열로 리턴하는 메서드
	2. toArray() - 1번과 내용은 같고, char[]을 받도록 overloading
	2. toArray() - 1번과 내용은 같고, String[]을 받도록 overloading
	*/
	public static void main(String[] args) {
		
		PrintArray print = new PrintArray();
		
		int[] i_arr = {1, 2, 3, 4, 5, 6};
		System.out.println("==== int 배열 toString() ====");
		System.out.println(print.toArray(i_arr));
		//System.out.println(Arrays.toString(i_arr));
		
		char[] c_arr = {'h','e','l','l','o'};
		System.out.println("==== char 배열 toString() ====");
		System.out.println(print.toArray(c_arr));
		//System.out.println(Arrays.toString(c_arr));
		
		String[] s_arr = {"hello", "봉쥬르", "니하오", "안녕"};
		System.out.println("==== String 배열 toString() ====");
		System.out.println(print.toArray(s_arr));
		System.out.println(Arrays.toString(s_arr));
	}

}

🔆 printArray

package day13.quiz2;

public class PrintArray {
	
	/*overloading : Arrays.toString() 만들어보기.*/
	
	String toArray(int[] arr) {
		String s = "[";
		for(int i = 0; i < arr.length; i++) {
			if( 1 <= i ) {
				s += ", ";
			}
			s += arr[i];
		}
		s += "]";
		return s;
	}
	
	String toArray(char[] arr) {
		String s = "[";
		for(int i = 0; i < arr.length; i++) {
			if( 1 <= i ) {
				s += ", ";
			}
			s += arr[i];
		}
		s += "]";
		return s;
	}

	String toArray(String[] arr) {
		String s = "[";
		for(int i = 0; i < arr.length; i++) {
			if( 1 <= i ) {
				s += ", ";
			}
			s += arr[i];
		}
		s += "]";
		return s;
	}

}
반응형

'국비지원 > JAVA' 카테고리의 다른 글

[JAVA] 14-1. super keyword  (0) 2022.10.11
[JAVA] 13-3. this keyword  (0) 2022.10.07
[JAVA] 13-1. method 재정의 (Overriding)  (0) 2022.10.07
[JAVA] 12-3. Quiz 은행 입/출금 서비스  (0) 2022.10.06
[JAVA] 12-2. 상속 (Inheritance)  (0) 2022.10.06