개발지식 먹는 하마 님의 블로그

Java - 오버로딩, 오버라이딩 본문

Java

Java - 오버로딩, 오버라이딩

devhippo 2025. 2. 4. 17:43

[ 오버로딩 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