개발지식 먹는 하마 님의 블로그
Java - 오버로딩, 오버라이딩 본문
[ 오버로딩 overloading ]
한 클래스 내에서 같은 이름의 메소드가 여러 개 정의될 때, 오버로딩 또는 메소드 중복이라고 한다.
- 중복되는 메소드들은 매개변수의 개수 또는 타입이 달라야 한다.
- 오버로딩은 자동으로 타입을 변환할 수 있다.
max(double n1, double n2){ }
max(double n1, double n2, double n3){ }
위와 같은 함수가 오버로딩 되었을 때, max(5, 10)을 호출하면
max(int n1, int n2)가 없기 때문에 매개변수의 타입이 자동으로 변환되어
max(double n1, double n2)가 호출된다.
[ 오버라이딩 overriding ]
수퍼클래스의 메소드와 서브클래스의 메소드가 이름, 매개변수의 목록, 반환 타입까지 모두 같을 때,
이를 메소드 오버라이딩, 메소드 재정의라고 한다.
이런 경우, 수퍼클래스 대신 서브클래스에 정의된 메소드가 사용된다.
< super 키워드 >
super 키워드를 통해서, 메소드 오버라이딩으로 인한 문제를 해결할 수 있다.
super.메소드 사용 시, 수퍼클래스와 서브클래스의 메소드가 동일하더라도
수퍼클래스의 메소드를 호출한다.
class A{
int a;
check(){ }
}
class B extends A{
int a;
check(){
super.check(); //A의 check를 호출한다.
}
}
B objB = new B();
objB.check(); //오버라이딩으로 B의 check가 호출된다.
< equals와 toString 메소드 >
모든 객체는 Object라는 수퍼클래스의 서브클래스이다.
Object 클래스에는 여러 메소드들이 있는데 그 중, equals와 toString은 그대로 쓰기에는 부적절하다.
우리가 원하는 equals : 두 객체의 내용이 같은지를 비교
Object의 equals : 두 객체의 주소가 같은지를 비교
우리가 원하는 toString : 객체 내부 정보를 조합하여 정보를 보기 쉽게 반환하는 문자열
Object의 toString : 객체를 String으로 표현 ex) 객체@....
따라서 equals와 toString은 새롭게 오버라이딩 해줄 필요가 있다.
< equals 오버라이딩 >
- equals 메소드의 매개변수를 Object 타입으로 명시하며 업캐스팅한다.
- 매개변수의 실제 타입이 원하는 객체가 맞는지를 확인한다.
- 매개변수로 넘어온 객체를 다시 다운캐스팅한다.
class Book{
public boolean equals(Object obj){ //업캐스팅
if(obj != null && obj instanceof Book){ //원하는 객체인지 확인하기
Book oBook = (Book)obj //다운캐스팅
return title.equals(oBook.title);
}
}
}
< toString 오버라이딩 >
- 출력 시, 굳이 toString을 호출하지 않아도 무방하다.
class A{
public String toString(){
return "원하는 내용"
}
}
A obj = new A();
System.out.println(obj.toString());
System.out.println(obj); //toString을 호출하지 않아도 무방함
'Java' 카테고리의 다른 글
Java - 배열과 리스트 (1) | 2025.02.06 |
---|---|
Java - 인터페이스 (0) | 2025.02.05 |
Java - 상속 (1) | 2025.02.03 |
Java - 예외 처리 (0) | 2025.01.31 |
구글 Java 스타일 가이드 (1) | 2025.01.21 |