Java의 다형성: 개념, 유형, 특성 및 예
게시 됨: 2022-04-18Javascript는 C#, PHP, Python, C++ 등과 함께 가장 널리 사용되고 널리 사용되는 객체 지향 프로그래밍 언어 중 하나입니다. 모든 것이 객체로 표현되기 때문에 프로그래밍을 통해 사용자가 실생활 개념을 전시하고 다룰 수 있도록 합니다. 프로그래밍 언어로서의 Java의 기능은 코드를 보다 동적으로 만들고 유지 관리를 용이하게 하여 소프트웨어 개발을 단순화하는 여러 가지 방법을 제공합니다.
이 기사에서는 객체 지향 프로그래밍 언어로서의 Java를 살펴보고 상속, 추상화, 다형성 및 데이터 캡슐화의 개념을 이해합니다. 우리는 또한 Java의 다형성 유형, 장점과 단점을 살펴볼 것입니다.
객체 지향 프로그래밍 개요
객체 지향 프로그래밍(OOP) 언어는 코딩에서 실시간 '객체' 개념을 사용하는 컴퓨터 언어를 말합니다. 프로그래밍을 통해 상속, 다형성, 루프, 데이터 추상화 등과 같은 세상적인 개체를 구현하는 것을 목표로 합니다.
프로그래머가 익숙해져야 하는 객체 지향 프로그래밍의 몇 가지 기본 개념이 있습니다. 이러한 개념 용어는 캡슐화, 다형성 등과 같은 OOP의 특수하고 고유한 기능을 학습하는 데 필요합니다.
1. 수업
'클래스'는 클래스 내에서 지정된 모든 '객체'에 적용되는 속성 및 메서드 집합을 나타냅니다. 객체는 정수, 배열, 문자열 등과 같은 다양한 유형이 될 수 있습니다. 클래스는 사용자가 정의한 프로토타입과 같으며 이를 사용하여 다양한 '객체'를 생성할 수 있습니다.
2. 개체
객체는 실생활에서 실제 데이터를 나타내는 OOP 언어의 가장 기본적인 단위입니다. 객체는 호출된 클래스의 속성을 가지고 있습니다.
3. 방법
메소드는 특정 작업을 수행하기 위해 함께 결합된 다양한 기능을 포함하는 일련의 명령문입니다. 사용자가 정의한 지침을 완료한 후 출력을 반환합니다. 또한 출력을 제공하지 않는 작업을 수행할 수도 있습니다. 메서드를 사용하면 프로그래머가 코드를 다시 입력하지 않고도 코드를 재사용할 수 있습니다. Java는 C++, C 또는 Python과 같은 언어와 달리 모든 메서드가 클래스에 속해야 합니다.
OOP 개념
객체 지향 프로그래밍에는 네 가지 기본 원칙이 있습니다. Java는 다음 속성을 모두 보여줍니다.
1. 추상화
데이터 추상화는 구현 코드와 같이 개체의 다른 관련 없는 세부 정보를 사용자가 볼 수 없도록 유지하면서 필요한 세부 정보를 보여주는 OOP 언어의 속성입니다. 이 기능은 필수적이고 관련된 세부 정보만 표시하므로 개발자가 클래스 기능을 신속하게 적절하게 변경할 수 있습니다.
2. 캡슐화
데이터 캡슐화는 단위 내의 데이터 래핑을 나타냅니다. OOP 언어의 이 속성은 캡슐화된 데이터를 다른 함수 및 메서드로부터 보호합니다. 코드와 지정된 메서드를 함께 묶어 단일 단위로 작업을 수행하여 외부 메서드에서 조작하거나 액세스하는 것을 방지합니다. 이를 데이터 은닉이라고도 합니다.
3. 상속
상속은 클래스가 다른 클래스의 속성을 상속할 수 있도록 하는 OOP 언어의 또 다른 중요한 기능입니다. 코드 재사용성 개념에 따라 작동하므로 클래스 기능을 반복적으로 다시 입력할 필요가 줄어듭니다. 다른 클래스로부터 상속받은 클래스를 서브클래스라고 하고 상속받는 클래스를 슈퍼클래스라고 합니다.
4. 다형성
다형성을 사용하면 객체가 다양한 형태를 취하고 유사한 작업을 수행하거나 다른 방법으로 유사한 동작을 나타낼 수 있습니다.
자바의 다형성
다형성을 사용하면 단일 작업을 다양한 방식으로 수행할 수 있습니다. 유사한 코드 개체를 식별하고 구별하는 데 도움이 되는 속성이므로 OOP 언어의 효율성이 향상됩니다.
Java에서 다형성은 객체를 별도의 엔티티로 선언함으로써 나타납니다. 이러한 방식으로 동일한 작업을 여러 방식으로 수행할 수 있습니다. 다형성은 상속과 함께 활성화되어 객체가 다른 클래스의 상속된 속성을 사용하여 다른 작업을 수행할 수 있도록 합니다. 메서드 또는 개체 지정의 차이는 두 개체를 구분합니다.
세계 최고의 대학에서 온라인으로 소프트웨어 개발 과정 을 배우십시오 . 이그 제 큐 티브 PG 프로그램, 고급 인증 프로그램 또는 석사 프로그램을 획득하여 경력을 빠르게 추적하십시오.
다형성의 특성
1. 강제
컴파일 시간 동안 형식 오류를 방지하기 위한 데이터 형식의 암시적 변환은 강제 변환입니다. 여기에는 명시적 데이터 유형 변환이 포함되지 않고 Java에서 허용하는 변환 계층만 따릅니다. 예를 들어, 피연산자가 부동이고 연산자가 정수이면 결과는 부동입니다.
2. 다형성 매개변수/변수
실행 시간 동안 다양한 유형의 값을 보유할 수 있는 개체 또는 변수를 다형성 변수 또는 매개변수라고 합니다. 클래스를 선언하는 동안 동일한 변수 이름이 다른 데이터 유형을 보유할 수 있고 동일한 메소드 이름이 다른 매개변수 및 리턴 유형을 보유할 수 있음을 나타냅니다.
3. 내부 연산자 오버로딩
연산자 오버로딩은 사용자가 요구하는 대로 연산자 기호를 사용합니다. Java는 내부 연산자 오버로딩을 지원합니다. 또한 정적 다형성의 예입니다.
Java의 다형성 유형
Java에서 다형성은 다음을 사용하여 호출할 수 있습니다.
1. 메소드 오버로딩
메소드 오버로딩은 동일한 이름을 갖고 동일한 클래스에 속하는 여러 객체 또는 메소드를 생성하는 프로세스입니다. 클래스 내에서 작동합니다.
2. 메소드 오버라이드
메서드 재정의는 하위 클래스가 슈퍼 클래스에서 선언된 것과 동일한 메서드를 구성하는 방법입니다. 클래스 전체에서 작동합니다. 하위 클래스에 이미 상위 클래스에 있는 동일한 메서드가 포함되어 있으면 하위 클래스의 함수가 재정의됩니다.
Java의 하위 유형 다형성
하위 유형 다형성은 Upcasting 및 Late Binding에 따라 다릅니다.
- 업캐스팅은 객체 또는 메소드가 데이터 유형(float, integer 등)을 상속 계층 구조 위로 이동하여 하위 유형에서 상위 유형으로 승격할 수 있는 프로세스입니다.
- 후기 바인딩은 최종 인스턴스가 아닌 메서드를 호출하는 데 사용됩니다.
하위 유형 자체가 상위 유형의 구성원이기 때문에 여기에는 연산자가 포함되지 않습니다. 예를 들어, 클래스의 이름이 색상인 경우 하위 유형은 빨강, 파랑, 주황색, 녹색 등이 될 수 있습니다. 하위 유형 다형성에는 상위 유형의 속성을 나타내는 하위 유형이 포함됩니다. 그러나 각 하위 유형의 개별 속성에 대한 액세스 권한은 손실됩니다.
자바의 런타임 다형성
Java에서 런타임 다형성은 Dynamic Method Dispatch 또는 Dynamic Binding이라고도 합니다. 메서드 재정의를 통해 달성됩니다. 재정의된 메서드를 호출하여 런타임에 동적으로 해결됩니다. 객체가 아닌 기능을 통해 달성할 수 있습니다.
다음은 Java의 런타임 다형성의 예입니다.
클래스 자동차{
무효 run(){System.out.println("운전");}
}
폭스바겐 클래스 확장 자동차{
void run(){System.out.println("90km 안전운전");}
공개 정적 무효 메인(문자열 인수[]){
자동차 c = new Volkswagen();//업캐스팅
b.run();
}
}
출력 :
90km 안전운전
자바에서 컴파일 시간 다형성
컴파일 타임 다형성은 메서드 오버로딩에 의해 달성됩니다. 오버로드된 메서드에 대한 호출이 컴파일 시간 동안 수행되고 해결되는 프로세스입니다. 정적 다형성이라고도 합니다. Java는 선언과 서명 속성이 다른 상태로 유지되는 한 사용자가 동일한 이름을 가진 메서드나 개체를 사용할 수 있을 만큼 충분히 유연합니다.
다음은 Java의 컴파일 시간 다형성의 예입니다.
클래스 SimpleCalc
{
int add(int x, int y)
{
x+y를 반환합니다.
}
int add(int x, int y, int z)
{
x+y+z를 반환합니다.
}
}
공개 클래스 데모
{
공개 정적 무효 메인(문자열 인수[])
{
SimpleCalc obj = 새로운 SimpleCalc();
System.out.println(obj.add(20, 30));
System.out.println(obj.add(40, 30, 20));
}
}
출력 :
50
90
다형성의 중요성
다형성을 사용하면 같은 이름을 가진 다른 유형의 엔터티를 구성할 수 있는 메서드를 작성할 수 있습니다. 다형성은 다양한 사용 이점과 코드를 동적으로 만들기 위해 제공하는 범위 때문에 Java에서 필수적입니다.
- 코드를 재사용할 수 있습니다. 동일한 코드를 여러 번 작성할 필요가 없습니다.
- 하나의 변수가 여러 동작을 나타낼 수 있습니다. 이름은 같지만 속성이 다르면 코드의 일관성을 유지할 수 있는 범위가 열릴 수 있습니다.
- 대량 코드 감소 – 디버깅에 도움이 되는 동시에 컴파일 시간을 단축하여 사용자의 메모리, 에너지 및 시간을 절약합니다.
다형성 구현 시 발생할 수 있는 문제
다형성은 사용 및 구현에 혼란을 줄 수 있습니다. 코드의 가독성을 떨어뜨리므로 여러 버그 및 오류의 위협이 됩니다. 또한 필요에 따라 기능을 수행하는 데 문제가 발생합니다.
주의해야 할 한 가지 고전적인 문제가 있습니다. 취약한 기본 클래스 문제입니다. 예측할 수 없는 결과를 보여주는 메서드를 초래하는 상속된 클래스의 부적절한 조합 및 코딩을 나타냅니다.
결론
상속의 취약한 특성으로 인해 다른 모든 기준이 충족됨에도 불구하고 기능이 제대로 작동하지 않고 코드가 손상될 수 있습니다. 이 기본적인 아키텍처 문제는 취약한 기본 클래스 문제로 간주됩니다. upGrad의 소프트웨어 개발 PG 프로그램 – 전체 스택 개발 전문화에 참여하여 Java가 OOP 개념을 어떻게 보여주는지 자세히 알아보십시오 . 업계 전문가의 멘토링을 받고 동료와 실습 및 협업 프로젝트에 참여하여 실용적인 지식을 구축하십시오.
오늘 좌석을 예약하세요!
정적 및 동적 바인딩이란 무엇입니까?
컴파일 시 결정되는 객체를 정적 바인딩이라고 합니다. 반면에 개체의 동적 바인딩 유형은 런타임에 결정됩니다. 전자는 메소드 오버로딩 중에 사용되고 후자는 메소드 오버라이드 중에 사용됩니다.
메서드 재정의와 메서드 오버로딩의 두 가지 근본적인 차이점은 무엇입니까?
Java에서 메서드 재정의는 정적, 비공개 및 최종 메서드를 재정의하지 않는 반면 메서드 오버로드는 Java에서 정적, 비공개 및 최종 메서드를 오버로드합니다. 또한 주체 메서드를 동적 바인딩으로 재정의하고 오버로드된 메서드는 정적 바인딩을 거칩니다.
Java에서 다형성과 상속의 차이점은 무엇입니까?
Java에서는 다형성과 상속 사이에 몇 가지 차이점이 있습니다.
1. 상속은 코딩에서 실제 부모-자식 관계를 나타냅니다. 그러나 다형성은 이 관계를 사용하여 프로그램을 보다 동적으로 만드는 촉매입니다.
2. 상속은 부모 클래스로부터 동일한 것을 상속함으로써 자식 클래스로부터 코드의 재사용을 허용한다. 대조적으로 다형성을 사용하면 자식 클래스가 부모 클래스 내에서 기존 동작을 다시 정의할 수 있습니다.