-
다형성(Polymorphism)이란?Design Pattern/객체지향 2024. 4. 12. 21:51반응형
다형성은 객체지향 프로그래밍의 중요한 특징 중 하나로, 다양한 클래스의 객체를 동일한 방식으로 처리할 수 있게 해줍니다. 이 글에서는 Java와 Go의 다형성을 비교하면서, 어떻게 이 개념이 각 언어에서 구현되고 사용되는지 탐구해보겠습니다.
1. 다형성이란 무엇인가?
다형성(Polymorphism)은 그리스어로 '많은 형태'를 의미합니다. 프로그래밍에서는 하나의 인터페이스를 가지고 다양한 형태의 객체들이 해당 인터페이스를 구현할 수 있도록 하는 기능을 말합니다. 이를 통해 코드의 유연성과 재사용성을 증가시킬 수 있습니다.
2. Java에서의 다형성
Java에서 다형성은 주로 인터페이스와 추상 클래스를 통해 구현됩니다. 이들을 사용하여 다양한 클래스가 같은 인터페이스를 공유할 수 있고, 이 인터페이스 타입으로 객체를 참조하여 메서드를 호출할 수 있습니다.
예시 코드:
interface Movable { void move(); } class Car implements Movable { public void move() { System.out.println("Car is moving"); } } class Animal implements Movable { public void move() { System.out.println("Animal is moving"); } } public class TestPolymorphism { public static void main(String[] args) { Movable m1 = new Car(); Movable m2 = new Animal(); m1.move(); m2.move(); } }
이 코드에서 Movable 인터페이스는 Car와 Animal 클래스에 의해 다르게 구현되며, 메인 함수에서는 이를 통일된 인터페이스로 다룹니다.
3. Go에서의 다형성
Go는 인터페이스를 통한 묵시적인 다형성을 지원합니다. 클래스나 상속이 없는 Go에서, 인터페이스는 메서드 시그니처의 모음으로 정의되며, 어떤 구조체든 해당 인터페이스의 모든 메서드를 구현하면 그 인터페이스를 구현하는 것으로 간주됩니다.
예시 코드:
type Mover interface { Move() } type Car struct{} func (c Car) Move() { fmt.Println("Car is moving") } type Animal struct{} func (a Animal) Move() { fmt.Println("Animal is moving") } func performMove(m Mover) { m.Move() } func main() { car := Car{} animal := Animal{} performMove(car) performMove(animal) }
이 예제에서 Car와 Animal 구조체는 Mover 인터페이스의 Move 메서드를 구현합니다. performMove 함수는 Mover 인터페이스를 파라미터로 받아, 다형성을 구현합니다.
4. Java와 Go의 다형성 비교
- Java: 명시적으로 인터페이스를 구현해야 하며, 이를 통해 다형성을 구현합니다.
- Go: 묵시적 인터페이스 구현으로, 구조체가 인터페이스의 모든 메서드를 구현하는 순간 해당 인터페이스를 구현하는 것으로 간주합니다. 이는 더 유연한 설계를 가능하게 합니다.
5. 결론
다형성은 프로그래밍 언어에서 코드의 유연성과 확장성을 크게 향상시킵니다. Java와 Go 모두 이 개념을 강력하게 지원하며, 각기 다른 방식으로 이를 효과적으로 활용합니다. 이해와 올바른 사용은 더 나은 소프트웨어 설계와 구현을 가능하게 합니다.
반응형'Design Pattern > 객체지향' 카테고리의 다른 글
서브클래싱(Subclassing)과 서브타이핑(Subtyping)이란? (0) 2024.04.14 상속(Inheritance)이란? (0) 2024.04.12 추상화(Abstraction)란? (0) 2024.04.12 캡슐화(encapsulation)란? (0) 2024.04.10 인스턴스(Instance)란? (0) 2024.04.10