티스토리 뷰
💥 다향성
- 함수의 이름이 같더라도 전달인자의 타입이나 개수에 따라 구분된다.
- 객체지향에서는 대표적으로 오버로딩과 오버라이딩 기법이 있다.
💥 오버로딩(Overloading)
- 사전적 의미는 '과적하다', '적재하다'라는 의미를 가지고 있다.
- 겉모습은 똑같지만 내용이 다른 경우를 뜻한다.
- 이름이 같은 함수일지라도 전달인자 타입이나 갯수가 다르면 다른 함수로 취급한다.
💥 오버로딩 실습 해보기
using System;
public class Fruit{
public void Overload(int apple){
Console.WriteLine("사과 {0}개", apple);
}
public void Overload(int apple, int lemon){
Console.WriteLine("사과 {0}개 + 레몬 {1}개", apple, lemon);
}
public void Overload(int apple, int lemon, int grape){
Console.WriteLine("사과 {0}개 + 레몬 {1}개 + 포도 {2}개", apple, lemon, grape);
}
public void Overload(char apple){
Console.WriteLine("사과 {0}등급", apple);
}
}
class HelloWorld {
static void Main() {
Fruit fruit = new Fruit();
fruit.Overload(10);
}
}
지금의 코드는 fruit.Overload(10); 에 전달인자가 정수형 1개만 있기 때문에 첫 번째 Overload를 호출할 것이다.
전달인자가 정수형1개일 때
전달인자가 정수형 2개일 때
전달인자가 정수형 3개일 때
전달인자가 문자형 1개일 때
이렇게 이름이 같은 Overload 함수라도 전달인자 타입이나 갯수가 다르면 다른 함수로 취급한다.
💥 오버라이딩(Overriding)
- '위로 올라탄다', '엎어친다'는 의미를 갖는다.
- 무언가에 올라타서 기존의 것을 덮어 버린다는 개념이다.
- 상속의 개념이 기반이 되어야 한다.
💥 오버라이딩 실습 해보기
using System;
class Dog {
protected int eyes, nose, mouse, ears;
virtual public void bark(){Console.WriteLine("멍멍");}
public Dog(){
eyes = 0;
nose = 0;
mouse = 0;
ears = 0;
}
}
class Pudle : Dog{
public Pudle(){
base.eyes = 2;
Console.WriteLine("푸들의 눈은 {0}개", eyes);
}
public override void bark(){
Console.WriteLine("왕왕");
}
}
class HelloWorld {
static void Main() {
Dog dog = new Dog();
dog.bark();
Pudle pd = new Pudle();
pd.bark();
}
}
class Pudle엔 없던 bark() 를 추가해보았다.
부모의 class와는 다르게 '멍멍' 이 아닌 '왕왕'으로 적었다.
그럼 결과값이 '멍멍' 으로 나올까 '왕왕'으로 나올까?
결과값은 부모 class의 bark()에 있는 '멍멍'이 아닌 '왕왕'이 나왔다.
이렇게 상속받은 메소드를 자식 클래스에서 재정의할 수가 있다.
이런 걸 오버라이딩이라고 한다.
'웹 개발 공부하기' 카테고리의 다른 글
[01.09] 람다 + 오늘의 포스팅💖 (0) | 2025.01.12 |
---|---|
[01.09] 인터페이스 (1) | 2025.01.12 |
[01.09] 생성자와 상속성 (0) | 2025.01.12 |
[01.09] 클래스(Class) (0) | 2025.01.12 |
[01.09] 객체 지향 프로그래밍 방식 (0) | 2025.01.12 |