다형성이란

다형성은 객체 지향 프로그래밍의 기본 개념이며 Java의 기능입니다. 서로 다른 클래스의 개체를 동일한 유형인 것처럼 처리할 수 있습니다. 이는 각 개체의 정확한 클래스를 알 필요 없이 균일한 방식으로 서로 다른 클래스의 개체에 대해 작업할 수 있는 코드를 작성하려는 경우에 유용할 수 있습니다.
Java에서 다형성은 메서드 재정의(Overloading)와 메서드 오버로딩(Overriding)이라는 두 가지 메커니즘을 통해 달성됩니다.
Overloading (output 다양화)
Java에서 메서드 오버로딩은 클래스가 이름은 같지만 매개 변수가 다른 여러 메서드를 가질 수 있도록 하는 기술입니다. 메서드 오버로드를 사용하면 개발자가 클래스에서 동일한 이름을 가진 둘 이상의 메서드를 만들 수 있으며, 이 메서드는 다른 유형 및/또는 인수 수를 사용할 수 있습니다. Java 컴파일러는 각 메소드에 전달된 인수의 수와 유형을 검사하여 오버로드된 메소드를 구분합니다.
public class Calculator {
public int add(int x, int y) {
return x + y;
}
public double add(double x, double y) {
return x + y;
}
public int add(int x, int y, int z) {
return x + y + z;
}
}
Calculator calc = new Calculator();
int sum1 = calc.add(2, 3); // calls the first add method
double sum2 = calc.add(2.5, 3.5); // calls the second add method
int sum3 = calc.add(2, 3, 4); // calls the third add method
이 예제에서 Calculator 클래스에는 이름은 같지만 매개변수 목록은 다른 3개의 오버로드된 메서드가 있습니다. 첫 번째 메서드는 두 개의 정수 인수를 사용하고, 두 번째 메서드는 두 개의 이중 인수를 사용하며, 세 번째 메서드는 세 개의 정수 인수를 사용합니다. 컴파일러는 전달된 인수의 수와 유형에 따라 호출할 add() 메서드의 버전을 알고 있습니다.
메서드 오버로딩을 통해 개발자는 기능은 비슷하지만 매개변수 유형이나 번호가 다른 메서드를 만들 수 있습니다. 이는 유연성을 제공하고 보다 효율적이고 간결한 코드를 허용합니다. 그러나 컴파일러 오류와 혼동을 피하기 위해 오버로드된 메서드가 서로 다른 매개 변수 목록을 갖고 모호하지 않도록 주의를 기울여야 합니다.
Overriding (class 뒤쪽 성질변환)
Java에서 메소드 오버라이딩은 하위 클래스가 해당 수퍼클래스에서 이미 제공한 메소드의 특정 구현을 제공할 수 있도록 하는 기술입니다. 메서드 재정의는 슈퍼클래스의 메서드와 이름, 반환 유형 및 매개변수 목록이 동일한 새 버전의 메서드를 하위 클래스에 생성하는 데 사용됩니다.
public class Animal {
public void makeSound() {
System.out.println("Animal is making a sound");
}
}
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Dog is barking");
}
}
public class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("Cat is meowing");
}
}
public class Main {
public static void main(String[] args) {
Animal animal1 = new Animal();
Animal animal2 = new Dog();
Animal animal3 = new Cat();
animal1.makeSound(); // prints "Animal is making a sound"
animal2.makeSound(); // prints "Dog is barking"
animal3.makeSound(); // prints "Cat is meowing"
}
}
이 예제에서 Animal 클래스에는 "Animal is making a sound"를 출력하는 makeSound() 메서드가 있습니다. Dog 클래스는 Animal 클래스를 확장하고 "Dog is barking"을 인쇄하는 자체 구현으로 makeSound() 메서드를 재정의합니다. Dog 클래스의 인스턴스가 makeSound() 메서드를 호출하면 Animal 클래스의 메서드 대신 Dog 클래스의 재정의된 메서드가 호출됩니다.
메서드 재정의를 사용하면 하위 클래스가 해당 상위 클래스에서 이미 제공하는 메서드의 특정 구현을 제공할 수 있으므로 하위 클래스의 동작에 더 많은 유연성과 사용자 정의가 가능합니다. 그러나 컴파일러 오류와 혼동을 피하기 위해 재정의된 메서드가 수퍼 클래스의 메서드와 동일한 이름, 반환 유형 및 매개 변수 목록을 갖도록 주의를 기울여야 합니다. 또한 @Override 주석을 사용하여 하위 클래스의 메서드가 상위 클래스의 메서드를 재정의하도록 의도되었음을 나타낼 수 있습니다.
요약하면 Java 다형성은 서로 다른 클래스의 개체를 동일한 유형인 것처럼 처리할 수 있도록 하며 메서드 재정의 및 메서드 오버로
드를 통해 달성할 수 있습니다. 이 기능을 사용하면 더 유연하고 재사용 가능한 코드는 물론 소프트웨어 시스템의 유지 관리 및 확장이 더 쉬워집니다.
'개발 > Java' 카테고리의 다른 글
[Java] 추상화란 (0) | 2023.03.03 |
---|---|
[Java] 상속(Inheritance) 이란, super 란 (0) | 2023.03.03 |
[Java] src 와 bin 의 차이점과 eclipse 는 구체적으로 무슨일을 하는가 (0) | 2022.11.10 |
[Java] 환경변수의 정의, 여러 폴더에 나뉘어있는 class 실행시키기 (0) | 2022.11.10 |
[Java] main 함수에 입력자로 (String[] args) 가 오는 이유 (0) | 2022.11.07 |
다형성이란

다형성은 객체 지향 프로그래밍의 기본 개념이며 Java의 기능입니다. 서로 다른 클래스의 개체를 동일한 유형인 것처럼 처리할 수 있습니다. 이는 각 개체의 정확한 클래스를 알 필요 없이 균일한 방식으로 서로 다른 클래스의 개체에 대해 작업할 수 있는 코드를 작성하려는 경우에 유용할 수 있습니다.
Java에서 다형성은 메서드 재정의(Overloading)와 메서드 오버로딩(Overriding)이라는 두 가지 메커니즘을 통해 달성됩니다.
Overloading (output 다양화)
Java에서 메서드 오버로딩은 클래스가 이름은 같지만 매개 변수가 다른 여러 메서드를 가질 수 있도록 하는 기술입니다. 메서드 오버로드를 사용하면 개발자가 클래스에서 동일한 이름을 가진 둘 이상의 메서드를 만들 수 있으며, 이 메서드는 다른 유형 및/또는 인수 수를 사용할 수 있습니다. Java 컴파일러는 각 메소드에 전달된 인수의 수와 유형을 검사하여 오버로드된 메소드를 구분합니다.
public class Calculator {
public int add(int x, int y) {
return x + y;
}
public double add(double x, double y) {
return x + y;
}
public int add(int x, int y, int z) {
return x + y + z;
}
}
Calculator calc = new Calculator();
int sum1 = calc.add(2, 3); // calls the first add method
double sum2 = calc.add(2.5, 3.5); // calls the second add method
int sum3 = calc.add(2, 3, 4); // calls the third add method
이 예제에서 Calculator 클래스에는 이름은 같지만 매개변수 목록은 다른 3개의 오버로드된 메서드가 있습니다. 첫 번째 메서드는 두 개의 정수 인수를 사용하고, 두 번째 메서드는 두 개의 이중 인수를 사용하며, 세 번째 메서드는 세 개의 정수 인수를 사용합니다. 컴파일러는 전달된 인수의 수와 유형에 따라 호출할 add() 메서드의 버전을 알고 있습니다.
메서드 오버로딩을 통해 개발자는 기능은 비슷하지만 매개변수 유형이나 번호가 다른 메서드를 만들 수 있습니다. 이는 유연성을 제공하고 보다 효율적이고 간결한 코드를 허용합니다. 그러나 컴파일러 오류와 혼동을 피하기 위해 오버로드된 메서드가 서로 다른 매개 변수 목록을 갖고 모호하지 않도록 주의를 기울여야 합니다.
Overriding (class 뒤쪽 성질변환)
Java에서 메소드 오버라이딩은 하위 클래스가 해당 수퍼클래스에서 이미 제공한 메소드의 특정 구현을 제공할 수 있도록 하는 기술입니다. 메서드 재정의는 슈퍼클래스의 메서드와 이름, 반환 유형 및 매개변수 목록이 동일한 새 버전의 메서드를 하위 클래스에 생성하는 데 사용됩니다.
public class Animal {
public void makeSound() {
System.out.println("Animal is making a sound");
}
}
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Dog is barking");
}
}
public class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("Cat is meowing");
}
}
public class Main {
public static void main(String[] args) {
Animal animal1 = new Animal();
Animal animal2 = new Dog();
Animal animal3 = new Cat();
animal1.makeSound(); // prints "Animal is making a sound"
animal2.makeSound(); // prints "Dog is barking"
animal3.makeSound(); // prints "Cat is meowing"
}
}
이 예제에서 Animal 클래스에는 "Animal is making a sound"를 출력하는 makeSound() 메서드가 있습니다. Dog 클래스는 Animal 클래스를 확장하고 "Dog is barking"을 인쇄하는 자체 구현으로 makeSound() 메서드를 재정의합니다. Dog 클래스의 인스턴스가 makeSound() 메서드를 호출하면 Animal 클래스의 메서드 대신 Dog 클래스의 재정의된 메서드가 호출됩니다.
메서드 재정의를 사용하면 하위 클래스가 해당 상위 클래스에서 이미 제공하는 메서드의 특정 구현을 제공할 수 있으므로 하위 클래스의 동작에 더 많은 유연성과 사용자 정의가 가능합니다. 그러나 컴파일러 오류와 혼동을 피하기 위해 재정의된 메서드가 수퍼 클래스의 메서드와 동일한 이름, 반환 유형 및 매개 변수 목록을 갖도록 주의를 기울여야 합니다. 또한 @Override 주석을 사용하여 하위 클래스의 메서드가 상위 클래스의 메서드를 재정의하도록 의도되었음을 나타낼 수 있습니다.
요약하면 Java 다형성은 서로 다른 클래스의 개체를 동일한 유형인 것처럼 처리할 수 있도록 하며 메서드 재정의 및 메서드 오버로
드를 통해 달성할 수 있습니다. 이 기능을 사용하면 더 유연하고 재사용 가능한 코드는 물론 소프트웨어 시스템의 유지 관리 및 확장이 더 쉬워집니다.
'개발 > Java' 카테고리의 다른 글
[Java] 추상화란 (0) | 2023.03.03 |
---|---|
[Java] 상속(Inheritance) 이란, super 란 (0) | 2023.03.03 |
[Java] src 와 bin 의 차이점과 eclipse 는 구체적으로 무슨일을 하는가 (0) | 2022.11.10 |
[Java] 환경변수의 정의, 여러 폴더에 나뉘어있는 class 실행시키기 (0) | 2022.11.10 |
[Java] main 함수에 입력자로 (String[] args) 가 오는 이유 (0) | 2022.11.07 |