순간을 기록으로

[Java] 오버라이딩이란 무엇이고 왜 사용할까? 본문

Development/JAVA

[Java] 오버라이딩이란 무엇이고 왜 사용할까?

luminous13 2022. 4. 21. 10:39

오버 라이딩(Overriding) 정의와 필요성

오버 라이딩은 조상클래스로부터 상속받은 메소드의 내용을 변경하는 것을 말합니다. 상속받은 메소드를 그대로 사용하는 경우도 있지만, 때에 따라서는 자손 클래스에 맞게 내용을 재정의할 필요가 있습니다.

 

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

class Point3D extends Point {
	int z;

	@Override
	String getLocation() {
		return "x: " + x + ", y: " + y + ", z: " + z;
	}
}

 

위의 예시는 Point 클래스의 getLocation() 함수를 Point3D에서 오버라이딩한 예시입니다.

Point3D는 3차원 좌표를 표시하기 위해서 getLocation()을 오버라이딩 했습니다. 

 

오버라이딩 3가지 조건

  1. 메소드명이 같아야 한다.
  2. 매개변수가 같아야 한다.
  3. 리턴타입이 같아야 한다.

메소드가 조상 클래스 메소드를 오버라이딩하려면 위의 3가지 조건을 만족해야 합니다. 즉, 메소드의 선언부가 조상 클래스의 메소드와 같아야 합니다. 왜냐하면 오버라이딩은 메소드의 내용만 바꾸기 때문입니다. 함수의 기능(의도, 목적)은 같습니다. 

 

다만, 변경할 수 있는 것도 있습니다. 접근 제어자(access modifier)와 예외(Exception)입니다.

 

  1. 오버라이딩한 메소드의 접근 제어자는 조상 클래스의 메소드보다 더 좁은 범위로 할 수 없다.
    • 만약 부모클래스의 메소드가 protected라면 자식 클래스의 오버라이딩한 메소드는 public이나 protected가 되어야 한다.
    • 접근 제어자의 접근 범위: public > protected > default > private 
      • public : 어디든 접근가능
      • protected: 같은 패키지와 하위 클래스에서만 접근가능
      • dafault: 같은 패키지안에서만 접근 가능
      • private: 같은 클래스 안에서만 접근 가능
  2. 조상 클래스의 메소드보다 더 많은 수(=범위)의 예외를 선언할 수 없다.
    • 단순히 선언된 갯수가 중요한 게 아니라 범위가 중요하다.
    •  
class Parent {
	void pMethod() throws IOException, SQLException {
		...
	}
}

class Child extends Parent {
	
	// 선언된 갯수가 중요하지 않다, 오버라이딩한 메소드의 예외 범위가 더 넓으면 안된다.
	@Override
	void pMethod() throws Exception {
		...
	}
}

 

오버로딩 vs 오버라이딩

  • 오버로딩(Overloading): 기존에 없던 새로운 메소드를 정의하는 것(new)
  • 오버라이딩(Overriding): 상속받은 메소드의 내용을 재정의하는 것(modify, cahnge)

'Development > JAVA' 카테고리의 다른 글

[Java] 객체 지향 프로그래밍 질문들  (0) 2022.05.11
[Java] 배열을 복사하는 방법  (0) 2022.05.08
[Java] JDK, JRE, JVM는 차이점은 무엇일까?  (0) 2022.04.18
[JAVA] 제네릭2  (0) 2021.11.29
[JAVA] 제네릭1  (0) 2021.11.25
Comments