자바 학습 & 복습 12일차 - 매서드간의 호출 & 참조, 오버로딩(overloading)

728x90

메서드간의 호출 & 참조

static 메서드간의 호출은 가능하지만 static 메서드는 인스턴스 변수 호출 불가능

따라서 static 메서드는 인스턴스 메서드도 호출이 불가능하다.

이유: static 메서드는 그냥 사용이 가능한 메서드지만 인스턴스 변수는 객체를 생성해야 사용이 가능하고 인스턴스 메서드를 호출 시 객체가 존재하지 않을 수 있어 사용이 불가능

 

static 메서드의 사용은 인스턴스 변수&메서드가 없거나 공유해야할 메모리 정보가 있을 때 사용


오버로딩 (overloading)

정의: 매개변수는 다르지만 같은 기능을 수행; 

오버로딩 성립 기준

  • 반환 기준은 상관없음
  • 메서드 이름이 같을 것
  • 매개변수 개수나 타입이 다를 것

반환타입은 int, long이지만 상관이 없다. 매개변수의 타입이 각각 다르고 add라는 메서드이름이 같기 때문에 오버로딩 성립

아래의 메서드를 사용해서 (3, 3L)을 대입하면 자동으로 A로 오버로딩이 되고 (3L, 3)을 대입 시 B로 오버로딩이 된다

A: int add(int a, long b) {return a+b;} 
B: long add(long a, int b) {return a+b;}
//1.반환타입 상관없고, 2.매개변수 개수 or 타입이 다름 3. 메서드 이름이 같다

오버로딩의 예시:

println("str")은 자동으로 String x 으로 오버로딩된다

println(String x)
println(char x)
println(int x)
println(float x)
println(long x)

오버로딩 예시

package CodingTestLv1;

public class OverLoad{
	public static void main(String[] args) {
		Test2 tt = new Test2();
		System.out.println(tt.add(3, 4)); // 7
		
		long[] a = {10L,30L};
		System.out.println(tt.add(a)); // 40
	}
}
class Test2{
	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;
	}
	long add(long[] a) {
		int result = 0;
		for(int i = 0; i<a.length; i++) {
			result += a[i];
			}
		return result;
	}
}

 

 

728x90