Yeji's Tech Notes
반응형

* 이 글은 자바의정석에서 읽은 내용을 제가 정리한 글입니다.

 

오버로딩(Overloading)

오버로딩?

: 한 클래스 내에 같은 이름의 메서드를 여러개 정의하는 것

 

- 오버로딩(Overloading)의 사전적의미

: '과적하다' 즉 많이 싣는 것, 하나의 메서드 이름으로 여러기능을 구현

조건
1. 메소드 이름이 같아야한다.
2. 매개변수의 개수 또는 타입이 달라야 한다.
* 오버로딩 된 메서드 들은 매개변수에 의해서만 구별될 수 있으므로 반환타입은 오버로딩을 구현하는데 아무런 영향을 주지 못함.

 

- 오버로딩의 예

  •  println메서드

println 메서드를 호출할때 매개변수로 지정하는 값의 타입에 따라서 호출되는 println메서드가 달라진다.

PrintStream클래스에는 어떤종류의 매개변수를 지정해도 출력할 수 있도록 아래와 같은 10개의 오버로딩 된 println메서드를 정의

  • void println()
  • void println(boolean x)
  • void println(char x)
  • void println(char[] x)
  • void println(double x)
  • void println(float x)
  • void println(int x)
  • void println(long x)
  • void println(Object x)
  • void println(string x)

- 오버로딩이 성립되지 않는 경우

  • 매개변수의 이름은 다르지만 매개변수의 타입이 같은 경우
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형과 long형 매개변수가 하나씩 선언되어 있지만, 서로 순서가 다른 경우에는 호출 시 매개변수의 값에 의해 호출될 메서드가 구분될 수 있으므로 중복메서드 정의가 아닌, 오버로딩으로 간주한다.

 

 

오버라이딩(Overriding)

- 오버라이딩?

: 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것

 

- 오버라이딩의 사전적의미

: ~위에 덮어쓰다(overwrite)

 

더보기

조건

자손클래스에서 오버라이딩하는 메서드는 조상 클래스의 메서드와

1. 이름이 같아야한다.

2. 매개변수가 같아야한다.

요약하자면 선언부가 서로 일치해야한다는 것이다.

1. 접근제어자는 조상클래스의 메서드보다 좁은 범위로 변경할 수 없다.

2. 조상클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.

 

- 오버라이딩의 예

class Point{
	int x;
    int y;
    
    String getLocation() {
    	return "x: " + x + ", y: " + y;
    }
}

class Point3D extends Point {
	int z;
    
    String getLocation() {
    	return "x: " + x + ", y: " + y + ",z: "+ z;
    }
}

Point클래스의 getLocation()은 한 점의 x,y좌표를 문자열로 반환하도록 작성되었다.

이 두 클래스는 서로 상속관계에 있으므로 Point3D클래스는 Point클래스로부터 getLocation()을 상속받지만,

Point3D클래스는 3차원 좌표계의 한 점을 표현하기 위한 것이므로 조상인 Point클래스로부터 상속받은

getLocation()은 Point3D클래스에 맞지 않는다. 그래서 이 메서드를 Point3D클래스 자신에 맞게 z축 좌표값도 포함하여 반환하도록 오버라이딩 했다.

 

오버라이딩 vs 오버로딩

오버라이딩과 오버로딩은 서로 혼동하기 쉽지만 사실 그 차이는 명백하다. 오버로딩은 기존에 없는 새로운 메서드를 추가하는 것이고, 오버라이딩은 조상으로 부터 상속받은 메서드의 내용을 변경하는 것이다.

 

오버로딩(Overloading) - 기존에 없는 새로운 메서드를 정의하는 것(new)

오버라이딩(Overriding) - 상속받은 메서드의 내용을 변경하는 것(change,modify)

 

반응형
profile

Yeji's Tech Notes

@Jop

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!