일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- flask
- Kafka
- Elasticsearch
- docker
- licence delete curl
- License
- Mac
- token filter test
- matplotlib
- analyzer test
- aggregation
- plugin
- Python
- Test
- MySQL
- springboot
- 900gle
- Java
- 파이썬
- query
- zip 암호화
- high level client
- 차트
- sort
- aggs
- license delete
- TensorFlow
- ELASTIC
- API
- zip 파일 암호화
Archives
- Today
- Total
개발잡부
[java] 다형성 Polymorphism 본문
반응형
**다형성(Polymorphism)**은 객체 지향 프로그래밍(OOP)의 핵심 원칙 중 하나로, "하나의 인터페이스로 여러 가지 형태를 취할 수 있는 능력"을 의미합니다. 즉, 같은 타입의 객체라도 그 구현이 다르게 동작할 수 있게 해주는 특징입니다. 다형성은 주로 메소드 오버로딩(Method Overloading)과 메소드 오버라이딩(Method Overriding)을 통해 구현됩니다.
다형성의 종류
- 컴파일 시간 다형성 (정적 다형성) - 메소드 오버로딩과 연산자 오버로딩을 통해 구현됩니다.
- 런타임 다형성 (동적 다형성) - 메소드 오버라이딩을 통해 구현됩니다.
1. 메소드 오버로딩 (Method Overloading) - 컴파일 시간 다형성
메소드 오버로딩은 같은 이름의 메소드가 여러 가지 다른 파라미터 타입이나 개수를 받아서 동작할 수 있게 하는 것입니다. 메소드 오버로딩은 컴파일 시간에 어떤 메소드가 호출될지 결정됩니다.
예시:
class Calculator {
// 오버로딩된 add 메소드
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
Calculator calc = new Calculator();
System.out.println(calc.add(5, 3)); // int 타입, 8 출력
System.out.println(calc.add(5.5, 3.2)); // double 타입, 8.7 출력
}
}
- add(int a, int b)와 add(double a, double b)는 같은 이름을 가지지만 파라미터의 타입이 다르므로 오버로딩된 메소드입니다.
2. 메소드 오버라이딩 (Method Overriding) - 런타임 다형성
메소드 오버라이딩은 부모 클래스에서 정의된 메소드를 자식 클래스에서 재정의하여 동적으로 동작을 다르게 만드는 것입니다. 오버라이딩은 런타임에 어떤 메소드가 호출될지 결정됩니다.
예시:
class Animal {
public void makeSound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Dog barks");
}
}
class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("Cat meows");
}
}
public class Main {
public static void main(String[] args) {
Animal animal1 = new Dog();
Animal animal2 = new Cat();
animal1.makeSound(); // "Dog barks"
animal2.makeSound(); // "Cat meows"
}
}
- Dog와 Cat 클래스는 Animal 클래스의 makeSound() 메소드를 오버라이딩하여 각각 다른 동작을 수행합니다.
- Animal 타입의 변수에 Dog 또는 Cat 객체를 할당하고, 실제로 호출되는 메소드는 객체의 실제 타입에 따라 다르게 결정됩니다. 이처럼 메소드 호출 시 어떤 메소드가 호출될지 런타임에 결정되므로 런타임 다형성이라고 합니다.
다형성의 장점
- 유연성 증가: 다형성 덕분에 같은 코드로 다양한 형태의 객체를 처리할 수 있습니다. 예를 들어, Animal 타입의 변수로 Dog나 Cat 객체를 처리할 수 있습니다.
- 코드 재사용성 증가: 같은 메소드 이름을 사용하여 다양한 기능을 구현할 수 있어 코드의 중복을 줄이고, 재사용할 수 있습니다.
- 확장성: 새로운 클래스가 추가되더라도 기존 코드를 변경하지 않고도 새로운 기능을 확장할 수 있습니다. 예를 들어, 새로운 동물 클래스(Bird 등)를 추가하더라도 기존 코드는 변경할 필요 없이 동작합니다.
- 유지보수 용이: 다형성으로 인해 코드가 간결해지고, 추후 유지보수나 확장 시에 기존 코드와의 호환성 문제를 최소화할 수 있습니다.
결론
다형성은 동일한 인터페이스로 여러 가지 구현을 가능하게 하여 코드의 유연성과 확장성을 높여주는 중요한 개념입니다. 컴파일 시간 다형성과 런타임 다형성을 적절히 활용하면 더 효율적이고 유지보수가 용이한 시스템을 만들 수 있습니다.
반응형
'JAVA' 카테고리의 다른 글
[java] 은닉화 Encapsulation (0) | 2025.05.14 |
---|---|
[java] 추상화 Abstraction (0) | 2025.05.14 |
[java] 10진수 를 2진수, 8진수, 16진수로 변환하기 (0) | 2023.05.15 |
[java] Spark java tutorial (0) | 2022.06.05 |
Error querying database (0) | 2022.04.25 |
Comments