자바의 폴리모피즘(Polymorphism) 이해하기
자바는 객체 지향 프로그래밍(Object-Oriented Programming, OOP)을 지원하는 언어로, 객체 지향의 주요 특징 중 하나인 폴리모피즘(Polymorphism)을 잘 활용할 수 있는 기능을 제공합니다. 폴리모피즘(Polymorphism)은 "다형성"이라고도 불리며, 그 의미는 "하나의 인터페이스가 여러 형태를 가질 수 있다"입니다. 간단히 말해, 같은 메시지(메서드 호출)가 다양한 방식으로 처리될 수 있다는 것입니다.
폴리모피즘(Polymorphism)의 주요 개념
- 오버라이딩(Overriding)
부모 클래스에 정의된 메서드를 자식 클래스에서 재정의(override)하여, 자식 클래스가 부모 클래스의 메서드를 대체할 수 있게 만드는 기능입니다. 오버라이딩을 통해 자식 클래스는 부모 클래스의 메서드를 수정하여, 자신만의 방식으로 동작을 정의할 수 있습니다. - 오버로딩(Overloading)
같은 이름의 메서드를 여러 개 정의하되, 매개변수의 타입이나 개수, 순서가 다르게 만들어 다양한 방식으로 호출할 수 있게 합니다. 오버로딩은 하나의 메서드 이름을 여러 방식으로 활용할 수 있도록 도와줍니다.
폴리모피즘(Polymorphism)의 예시
자, 이제 코드로 폴리모피즘(Polymorphism)을 어떻게 활용하는지 살펴보겠습니다.
1. 오버라이딩(Overriding) 예시
// 부모 클래스
class Animal {
public void sound() {
System.out.println("동물이 소리를 냅니다.");
}
}
// 자식 클래스
class Dog extends Animal {
@Override
public void sound() {
System.out.println("멍멍!");
}
}
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog(); // Animal 타입으로 Dog 객체 생성
myDog.sound(); // Dog 클래스의 sound() 메서드 호출
}
}
위의 예시에서, Dog
클래스는 Animal
클래스를 상속받고, sound()
메서드를 오버라이딩하여 자신만의 방식으로 소리를 냅니다. Animal
타입의 참조 변수로 Dog
객체를 생성했지만, 실행 시 Dog
클래스의 sound()
메서드가 호출되는 것이 폴리모피즘(Polymorphism)의 핵심입니다.
2. 오버로딩(Overloading) 예시
class Calculator {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
public String add(String a, String b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
Calculator calc = new Calculator();
System.out.println(calc.add(5, 10)); // int형 덧셈
System.out.println(calc.add(3.5, 7.2)); // double형 덧셈
System.out.println(calc.add("Hello", " World")); // String형 덧셈
}
}
위의 예시에서 Calculator
클래스는 add
라는 동일한 이름의 메서드를 오버로딩하여, 정수, 실수, 문자열 덧셈을 처리할 수 있습니다. 이처럼 매개변수의 타입에 따라 다르게 동작하는 메서드를 정의할 수 있는 것이 오버로딩의 특징입니다.
폴리모피즘(Polymorphism)의 장점
- 코드의 유연성 증가
하나의 인터페이스(메서드)를 통해 다양한 형태의 동작을 정의할 수 있으므로, 코드의 유연성과 확장성이 증가합니다. 새로 클래스를 추가하거나 기능을 확장할 때 기존 코드를 수정할 필요가 없습니다. - 코드 재사용성 증가
상속을 통해 부모 클래스의 코드를 재사용하면서, 자식 클래스에서 필요한 부분만 수정할 수 있어 중복 코드를 줄일 수 있습니다. - 유지보수 용이
각 클래스의 책임이 명확해지기 때문에 유지보수가 쉬워집니다. 변경 사항이 있을 때, 특정 메서드만 수정하면 되므로 다른 부분에 미치는 영향을 최소화할 수 있습니다.
폴리모피즘(Polymorphism) 활용법
- 인터페이스 활용: 인터페이스를 사용하면 다양한 클래스들이 동일한 메서드를 구현하게 되어, 코드가 일관되게 처리됩니다.
- 상속 활용: 부모 클래스에서 공통적인 기능을 정의하고, 자식 클래스에서 이를 확장하거나 재정의하여 다형성을 실현합니다.
- 컬렉션 프레임워크 활용: 자바의 컬렉션 프레임워크(List, Set, Map 등)에서 객체의 다형성을 활용하여 다양한 자료형을 처리할 수 있습니다.
결론
폴리모피즘(Polymorphism)은 자바에서 객체 지향 프로그래밍의 핵심 원칙 중 하나로, 코드의 재사용성과 유지보수성을 크게 향상시킵니다. 오버라이딩과 오버로딩을 적절히 활용하여 유연하고 확장 가능한 코드를 작성할 수 있습니다. 이를 통해 더 효율적이고 깔끔한 소프트웨어 개발이 가능해집니다.
'Software > Java' 카테고리의 다른 글
[Java] 접근지정자(Access Modifier) 의 종류와 예제 (1) | 2025.01.31 |
---|---|
[Java] Setter 와 Getter 에 대한 이해 (1) | 2025.01.24 |
[Java] 메소드의 타입 4가지 (고정값, 고정일, 가변값, 가변일) (0) | 2025.01.23 |
[Java] Escape Character 개념 정리 ( 줄 바꿈, 탭 등 역슬래시 사용 ) (1) | 2025.01.22 |
[Java] Instance Variable (인스턴스 변수)와 Static Variable (클래스 변수) (2) | 2025.01.22 |