본문 바로가기
Language/JAVA

JAVA 5일차 - 오버로딩 / 생성자

by 코젼 2022. 6. 24.
728x90
반응형

 

💡오버로딩

오버로딩(Overloading) - 기존에 없는 새로운 메소드를 정의하는 것
: 하나의 클래스에 같은 이름의 메소드를 여러 개 정의하는 것
  ex) 생성자

💬조건
1. 메소드의 이름이 같아야 한다.
2. 매개변수의 개수 또는 타입이 달라야 한다.
3. 매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않는다.
(리턴타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다.)

- 매개변수의 이름이 다른 것은 오버로딩이 아니다.
int add(int a, int b) {return a+b;}
int add(int x, int y) {return x+y;}​

- 리턴타입은 오버로딩의 성립조건이 아니다.
int add(int a, int b) {return a+b;}
long add(int a, int b) {return (long)(a+b);}​

- 매개변수의 타입이 다르므로 오버로딩이 성립한다.
long add(int a, long b) {return a+b;}
long add(long a, int b) {return a+b;}​

- 오버로딩의 올바른 예 - 매개변수는 다르지만 같은 의미의 기능 수행
int add(int a, int b) {return a+b;}
long add(long a, long b) {return a+b;}

int add(int[] a) {
	int result = 0;
    for(int i=0; i<a.length; i++) {
    	result += a[i];
    }
    return result;
}​

📃오버로딩 예제 1

두 개의 정수를 입력받아 합, 차, 곱, 몫을 반환해라.
- 오버로딩 사용
import java.util.Scanner;

//두 개의 정수를 입력받아 합, 차, 곱, 몫을 반환하는 static 메소드

public class MyMath {
	
	// 오버로딩
	static int getSum(int a, int b) {
		return a+b;
	}
	
	static int getSum(int a, int b, int c) {
		return a+b+c;
	}
	
	static float getSum(float a, float b) {
		return a+b;
	}

	static int add(int a, int b) {
		return a + b;
	}

	static int sub(int a, int b) {
		return a - b;
	}

	static int mul(int a, int b) {
		return a * b;
	}

	static int div(int a, int b) {
		return a / b;
	}
}

📃오버로딩 예제 2

카드 뽑기 생성자 오버로딩
public class CardTest {
	public static void main(String[] args) {
		Card c1 = new Card();
		c1.showInfo();
		
		Card c2 = new Card("diamond", 7);
		c2.showInfo();
		
	}
}

class Card {
	String kind;
	int number;
	
	// 생성자 생성하기 - 기본 생성자
	Card() {
		kind = "heart";
		number = 1;
	}
	
	Card(String str, int n) {
		kind = str;
		number = n;
	}
	
	void showInfo() {
		System.out.println(kind + ", " + number);
	}
}

📃오버로딩 예제 3

public class CarTest {
	public static void main(String[] args) {	
		Car c = new Car();
		
	}
	
}

class Car {
	static String product = "KIA";
	
	String color;
	String gearType;
	int door;
	
	// 기본 생성자
	Car() {
		this("auto", "white", 4);
	}

	// 생성자 오버로딩
	Car(String gearType, String color, int door) {
		this.gearType = gearType;
		this.color = color;
		this.door = door;
	}
	
	void showInfo() {
		System.out.println("차종 : " + product + " | 기어 종류 : " + gearType + " | 문 : " + door + " | 색상 : " + color);
	}
}

📃예제 4

Tv 예제
public class TvTest {
	public static void main(String[] args) {
		Tv t;
		t = new Tv();
		
		t.power();
		t.setChannel(11); // t.channel = -1; (X) 메소드와 변수 사용하기
		
//		t.channelDown();
//		System.out.println(t.channel);
		
		t.showInfo();
		
		Tv t2;
		t2 = new Tv();
		t2.power();
		t2.setChannel(7);
		
		t2.showInfo();
	}
	
}

class Tv {
	String color;
	int channel;
	boolean power;
	
	void power() {
		power = !power;
	}
	
	// 입력받은 정수 값으로 channel(멤버변수)를 설정
	void setChannel(int n) {
		if (n<0 || n>100) {
			System.out.println("잘못된 채널 입력입니다.");
			return;
		}
		channel = n;
		
	}
	
	// 멤버변수 channel을 반환
	int getChannel() {
		return channel;
	}
	
	void channelUp() {
		channel++;
	}
	
	void channelDown() {
		channel--;
	}
	
	// 전원의 on/off 여부와 현재 채널을 출력
	void showInfo() {
		if(power == false) {System.out.println("전원 상태 : OFF");}
		else {System.out.println("전원 상태 : ON");}
		
		System.out.println("현재 채널 : " + channel);
		
	}
}
728x90
반응형

댓글