2025-01-20T02:26:20
This commit is contained in:
76
doc/10_05_method_overriding.md
Normal file
76
doc/10_05_method_overriding.md
Normal file
@@ -0,0 +1,76 @@
|
||||
# 메소드 오버로딩(Method Overloading)과 오버라이딩(Method Overriding)
|
||||
|
||||
* 메소드 오버라이딩: 부모 클래스의 메소드를 자식 클래스에서 재정의하는 것을 의미합니다. 상속 관계에서 사용됩니다.
|
||||
* 메소드 오버로딩: 동일한 클래스 내에서 같은 이름의 메소드를 여러 개 정의하는 것을 의미합니다. 메소드 오버로딩의 핵심은 매개변수의 차이입니다. 매개변수의 개수, 타입, 순서가 달라야 합니다.
|
||||
|
||||
## 메소드 오버로딩
|
||||
메소드 오버로딩은 동일한 이름의 메소드를 여러 개 정의하여, 전달되는 매개변수의 개수나 타입에 따라 다른 동작을 수행하도록 하는 것을 의미합니다. 즉, 같은 이름의 메소드지만 매개변수의 조합이 다르면 다른 기능을 수행할 수 있도록 하는 것입니다.
|
||||
|
||||
* 코드 가독성 향상: 동일한 작업을 수행하는 메소드라도 입력값에 따라 다른 방식으로 처리해야 할 때, 메소드 오버로딩을 사용하면 코드가 더 직관적이고 이해하기 쉽습니다.
|
||||
* 유연성 증가: 다양한 입력값에 대해 동일한 메소드 이름을 사용하여 코드를 간결하게 작성할 수 있습니다.
|
||||
* 코드 재사용: 기존 메소드를 확장하여 새로운 기능을 추가할 수 있습니다.
|
||||
* 같은 이름: 오버로딩되는 메소드는 반드시 같은 이름을 가져야 합니다.
|
||||
* 다른 매개변수: 매개변수의 개수, 타입, 순서가 달라야 합니다.
|
||||
* 반환값: 반환값의 타입은 달라도 상관없습니다.
|
||||
|
||||
아래 예시에서 add 메소드는 매개변수의 개수와 타입에 따라 다른 동작을 수행합니다.
|
||||
```python
|
||||
public class Calculator {
|
||||
public int add(int a, int b) {
|
||||
return a + b;
|
||||
}
|
||||
|
||||
public double add(double a, double b) {
|
||||
return a + b;
|
||||
}
|
||||
|
||||
public int add(int a, int b, int c) {
|
||||
return a + b + c;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## 메소드 오버라이딩
|
||||
메소드 오버라이딩은 부모 클래스에서 상속받은 메서드를 자식 클래스에서 재정의하는 것을 의미합니다. 즉, 부모 클래스의 메서드와 동일한 이름을 가진 메서드를 자식 클래스에서 다시 작성하여, 자식 클래스에 맞는 기능을 수행하도록 하는 것입니다.
|
||||
|
||||
* 다형성 구현: 같은 메시지에 대해 서로 다른 객체가 다르게 반응하도록 만들 수 있습니다.
|
||||
* 상속 관계에서 특정 기능 재정의: 부모 클래스의 기능을 유지하면서 자식 클래스에 맞게 기능을 확장하거나 변경할 수 있습니다.
|
||||
* 코드 재사용: 부모 클래스에서 공통적인 기능을 구현하고, 자식 클래스에서 필요한 부분만 재정의하여 코드 재사용성을 높일 수 있습니다.
|
||||
|
||||
* 상속 관계: 메서드 오버라이딩은 상속 관계에서만 가능합니다.
|
||||
* 같은 메서드 이름: 부모 클래스와 자식 클래스에서 메서드 이름이 같아야 합니다.
|
||||
* 메서드 서명 일치: 오버라이딩하는 메서드의 매개변수 개수와 타입이 부모 클래스의 메서드와 일치해야 합니다.
|
||||
* return 값: 오버라이딩된 메서드의 반환 값의 타입이 부모 클래스의 메서드와 일치하거나 호환되어야 합니다.
|
||||
* 다른 기능: 메서드의 내용이 달라져야 합니다.
|
||||
|
||||
|
||||
```python
|
||||
class Animal:
|
||||
def sound(self):
|
||||
print("동물의 소리")
|
||||
|
||||
class Dog(Animal):
|
||||
def sound(self):
|
||||
print("멍멍")
|
||||
|
||||
class Cat(Animal):
|
||||
def sound(self):
|
||||
print("야옹")
|
||||
|
||||
dog = Dog()
|
||||
cat = Cat()
|
||||
dog.sound() # 멍멍
|
||||
cat.sound() # 야옹
|
||||
```
|
||||
위 예시에서 Animal 클래스는 sound 메서드를 가지고 있고, Dog 클래스와 Cat 클래스는 이 메서드를 오버라이딩하여 각각 다른 소리를 내도록 구현했습니다.
|
||||
|
||||
## super()
|
||||
자식 클래스에서 부모 클래스의 메서드를 호출하고 싶을 때 super() 함수를 사용합니다.
|
||||
|
||||
```python
|
||||
class ChildClass(ParentClass):
|
||||
def some_method(self, arg):
|
||||
super().some_method(arg) # 부모 클래스의 some_method 호출
|
||||
# 추가적인 작업
|
||||
```
|
||||
Reference in New Issue
Block a user