본문 바로가기
공부/CS

[CS]Swift로 다형성 이해하기

by 초코팅촉 2025. 2. 21.
728x90
반응형

이번 글에서는 다형성의 개념을 설명하고, 이를 이해하기 위한 예시 코드를 함께 살펴보겠습니다.

다형성(Polymorphism)은 객체 지향 프로그래밍(OOP)의 중요한 개념 중 하나로,
같은 프로토콜을 채택하여 서로 다른 타입의 객체를 다룰 수 있게 해줍니다.

 

1. 다형성의 정의

다형성(Polymorphism)을 직역하면 '여러 형태를 가질 수 있다는 성질을 뜻합니다.

진정한 의미는
같은 메서드나 프로퍼티가 다양한 객체에서 다르게 동작할 수 있는 능력을 말합니다.

주로 두 가지의 경우를 의미하는데요,

  1. 오버로딩(Overloading) : 같은 이름의 메서드를 매개변수의 타입이나 개수에 따라 다르게 정의하는 것.
  2. 오버라이딩(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. 예제 설명

  1. MathOperations라는 클래스를 만듭니다.
  2. 메서드 오버로딩:
    • add(a: Int, b: Int) : 두 개의 정수를 더합니다.
    • add(a: Int, b: Int, c: Int) : 세 개의 정수를 더합니다.
    • add(a: Double, b: Double) : 두 개의 실수를 더합니다.
  3. 사용 예시:
    • 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. 오버라이딩 예제 설명

  1. Animal 클래스: 기본 클래스로, sound() 메서드를 정의합니다.
  2. Dog 클래스: Animal 클래스를 상속받아 sound() 메서드를 오버라이드하여 개의 소리를 출력합니다.
  3. Cat 클래스: Animal 클래스를 상속받아 sound() 메서드를 오버라이드하여 고양이의 소리를 출력합니다.
  4. makeSound 함수: Animal 타입의 매개변수를 받아 해당 객체의 sound() 메서드를 호출합니다. 이때 반환되는 결과는 전달된 객체의 타입에 따라 달라집니다.

 

4. 다형성의 장점

  • 코드 재사용성: 동일한 메서드를 여러 객체에서 사용할 수 있어 코드가 간결해집니다.
  • 유연성: 새로운 클래스를 추가할 때 기존 코드를 수정할 필요가 없어 유지 보수가 용이합니다.
  • 확장성: 프로그램이 커져도 관리하기 쉽고, 새로운 기능을 추가하기 용이합니다.

사실 다형성을 지금 이렇게 보시면 이해가 안되실 수 있습니다. 저도 처음엔 그랬으니까요.
중요한건 꺾이지 않는 마음(요즘엔 꺾여도 계속하는 마음이라던데ㅎㅎ;;)
암튼 우리 모두 화이팅 합시다!

728x90
반응형