728x90
반응형
이번 글에서는 다형성의 개념을 설명하고, 이를 이해하기 위한 예시 코드를 함께 살펴보겠습니다.
다형성(Polymorphism)은 객체 지향 프로그래밍(OOP)의 중요한 개념 중 하나로,
같은 프로토콜을 채택하여 서로 다른 타입의 객체를 다룰 수 있게 해줍니다.
1. 다형성의 정의
다형성(Polymorphism)을 직역하면 '여러 형태를 가질 수 있다는 성질을 뜻합니다.
진정한 의미는
같은 메서드나 프로퍼티가 다양한 객체에서 다르게 동작할 수 있는 능력을 말합니다.
주로 두 가지의 경우를 의미하는데요,
- 오버로딩(Overloading) : 같은 이름의 메서드를 매개변수의 타입이나 개수에 따라 다르게 정의하는 것.
- 오버라이딩(Overriding) : 자식(서브)클래스에서 부모(슈퍼)클래스의 메서드를 재정의하는 것.
2. 오버로딩 다형성 예제
아래는 Swift에서 오버로딩 다형성을 적용한 간단한 예제입니다.
class MathOperations {
// 두 개의 정수를 더하는 메서드
func add(a: Int, b: Int) -> Int {
return a + b
}
// 세 개의 정수를 더하는 메서드
func add(a: Int, b: Int, c: Int) -> Int {
return a + b + c
}
// 두 개의 실수를 더하는 메서드
func add(a: Double, b: Double) -> Double {
return a + b
}
}
// 사용 예시
let math = MathOperations()
math.add(a: 2, b: 3) // 출력: 5
math.add(a: 2, b: 3, c: 4) // 출력: 9
math.add(a: 2.5, b: 3.5) // 출력: 6.0
2-1. 예제 설명
- MathOperations라는 클래스를 만듭니다.
- 메서드 오버로딩:
- add(a: Int, b: Int) : 두 개의 정수를 더합니다.
- add(a: Int, b: Int, c: Int) : 세 개의 정수를 더합니다.
- add(a: Double, b: Double) : 두 개의 실수를 더합니다.
- 사용 예시:
- math.add(a: 2, b: 3) : 두 정수 2와 3을 더해 5를 출력합니다.
- math.add(a: 2, b: 3, c: 4) : 세 정수 2, 3, 4를 더해 9를 출력합니다.
- math.add(a: 2.5, b: 3.5) : 두 실수 2.5와 3.5를 더해 6.0을 출력합니다.
3. 오버라이딩 다형성 예제
아래는 Swift에서 오버라이딩 다형성을 적용한 간단한 예제입니다.
class Animal {
func sound() {
print("Animal makes a sound")
}
}
class Dog: Animal {
override func sound() {
print("Woof!")
}
}
class Cat: Animal {
override func sound() {
print("Meow!")
}
}
func makeSound(animal: Animal) {
animal.sound()
}
// 사용 예
let dog = Dog()
let cat = Cat()
makeSound(animal: dog) // 출력: Woof!
makeSound(animal: cat) // 출력: Meow!
3-1. 오버라이딩 예제 설명
- Animal 클래스: 기본 클래스로,
sound()
메서드를 정의합니다. - Dog 클래스:
Animal
클래스를 상속받아sound()
메서드를 오버라이드하여 개의 소리를 출력합니다. - Cat 클래스:
Animal
클래스를 상속받아sound()
메서드를 오버라이드하여 고양이의 소리를 출력합니다. - makeSound 함수:
Animal
타입의 매개변수를 받아 해당 객체의sound()
메서드를 호출합니다. 이때 반환되는 결과는 전달된 객체의 타입에 따라 달라집니다.
4. 다형성의 장점
- 코드 재사용성: 동일한 메서드를 여러 객체에서 사용할 수 있어 코드가 간결해집니다.
- 유연성: 새로운 클래스를 추가할 때 기존 코드를 수정할 필요가 없어 유지 보수가 용이합니다.
- 확장성: 프로그램이 커져도 관리하기 쉽고, 새로운 기능을 추가하기 용이합니다.
사실 다형성을 지금 이렇게 보시면 이해가 안되실 수 있습니다. 저도 처음엔 그랬으니까요.
중요한건 꺾이지 않는 마음(요즘엔 꺾여도 계속하는 마음이라던데ㅎㅎ;;)
암튼 우리 모두 화이팅 합시다!
728x90
반응형
'공부 > CS' 카테고리의 다른 글
[CS] Swift로 의존성 주입 이해하기 (0) | 2025.02.26 |
---|---|
[CS] 비즈니스 로직과 서비스 로직 (0) | 2025.01.30 |
[CS] OOP(객체 지향 프로그래밍)(feat. Swift) (0) | 2024.11.25 |
[CS] final, static, class(feat.Swift) (1) | 2024.10.19 |
[CS] 인스턴스화란 무엇일까?(클래스, 객체, 인스턴스) (1) | 2024.01.02 |