들어가며
오버라이딩과 오버로딩은 자바 프로그래밍에서 주로 사용되는 개념이다. 난 오버라이드를 주로 사용했는데 상속이 되서 뭐... 이렇게 저렇게 쓰는거라고 기계적으로 써서 개념과 차이에 대해서 명확하게 설명을 하지 못해서 정리를 하게 되었다.
오버라이딩 (Overriding) : 상속 관계에 있는 부모 클래스의 메소드를 자식 클래스에서 재정의하는 것을 오버라이딩이라고 부른다고 한다. 오버라이딩은 메소드의 이름, 매개변수 타입, 반환 타입이 반드시 모두 같아야만 한다고 한다. 이를 통해서 자식 클래스는 부모 클래스의 메소드를 자신의 필요에 맞게 변경이 가능하다고 한다.
오버로딩 (Overloading) : 같은 클래스 내에서 같은 이름의 메소드를 여러 개 정의하는 것을 의미한다. 그러나 이들 메소드는 매개변수의 수, 타입, 순서가 다르게 정의되어야 한다. 이를 통해서 같은 기능을 하는 메소드를 다양한 매개변수로 사용할 수 있게 해준다.
오버라이드를 왜 사용할까?
'오버라이드(Override)'라는 용어는 '오버라이딩(Overriding)'을 수행하는 과정을 의미합니다. 즉, 부모 클래스에서 상속받은 메서드를 자식 클래스에서 재정의하는 것을 '오버라이드'라고 합니다.
- 행동의 재정의 : 부모 클래스의 메소드가 자식 클래스의 요구 사항을 충족시키지 못하는 경우, 자식 클래스는 해당 메소드를 재정의(오버라이드)하여 필요한 로직으로 변경이 가능하게 해준다.
- 다형성 구현 : 오버라이딩은 자바의 다형성 개념을 구현하는 데 필요한 핵심 기능이다. 부모 클래스 타입의 참조 변수로 자식 클래스의 객체를 참조할 때, 오버라이딩 된 메소드를 호출하면 자식 클래스의 메소드가 실행되게 된다.
- 코드의 재사용성 : 상속과 오버라이딩을 통해 중복 코드를 최소화하고 코드의 재사용성을 높일 수 있다. 이는 코드의 유지 관리를 쉽게 하고 가독성을 향상시켜준다.
예제
public class Vehicle {
public void run() {
System.out.println("차량이 달립니다.");
}
}
public class Car extends Vehicle {
@Override
public void run() {
System.out.println("자동차가 달립니다.");
}
}
자바의 경우 위와 같이 'Override' 애너테이션을 사용하여 어떤 메서드가 오버라이드되었는지 명시적으로 표현할 수 있다. 이는 가독성을 높이고, 실수로 메서드 이름이나 매개변수를 잘못 입력하여 의도치 않게 새 메서드를 생성하는 것을 방지하는데 많은 도움이 된다고 한다.
오버로딩은 왜 사용이 될까?
- 코드의 유연성 증가 : 같은 이름의 메소드를 사용하여 다양한 타입의 매개변수를 받을 수 있다. 이를 통해 메소드의 사용범위가 넓어지고, 코드의 유연성이 증가한다.
- 가독성 향상 : 메소드 이름을 일관되게 유지할 수 있으므로 코드의 가독성이 향상된다. 같은 기능을 하는 메소드를 다양한 매개변수로 사용할 수 있으므로, 메소드 이름을 따로 설정하지 않아도 된다.
- 타입 체크 : 컴파일러는 메소드를 호출할 때 매개변수의 타입을 체크한다. 따라서, 오버로딩을 사용하게 되면 매개변수의 타입에 따라 다른 동작을 수행하는 메소드를 생성할 수 있다.
public class Printer {
public void print(String text) {
System.out.println("Printing String: " + text);
}
public void print(int number) {
System.out.println("Printing Number: " + number);
}
}
위와 같이 print 메소드는 문자열과 정수 두 가지 타입의 매개변수를 받을 수 있다. 이처럼 오버로딩을 사용하면 하나의 메소드 이름으로 다양한 타입의 매개변수를 처리할 수 있게된다. 이를 통해 코드의 유연성도 높일 수 있고, 가독성도 향상시킬 수 있다.
마치며
인터페이스와 클래스에 대해서 정리할 때 깊게 정리하지 않아서 Override를 상속할 때마다 사용했었는데 왜 사용하는지에 대해서 크게 생각을 안하긴 안했었나보다 싶다. 강의를 듣다보면 현업에 계신분들이나 강사님들은 슥슥슥 그림 그리듯이 사용을 하시는데 난 그게 잘안된다. 에노테이션 하나를 써도 왜 들어갔을까 왜 이걸 넣을까 이걸 넣어도 될까? 이런 생각이 너무 많기도 하고 내가 뭘 쓰는지 명확하게 알지 못하는 점에서 스프링을 공부하는데 벽을 좀 느낀다. 부지런히 하다보면 어떻게든 되겠지...
'Language > Java' 카테고리의 다른 글
자바 애플리케이션을 실행 했을 때 일어나는 일들 (0) | 2024.01.06 |
---|---|
계산기 만들기 (0) | 2023.12.30 |
배열 (1) | 2023.12.20 |
가위, 바위 ,보 만들기 (1) | 2023.12.15 |
구구단 만들기 (0) | 2023.12.14 |
쓰임 있는 사람이 되기 위해 노력 중입니다.