본문 바로가기

컴퓨터 언어

[C++] 다형성, 추상성

3) 다형성

 

다형성이란 객체의 속성이나 기능이 상황에 따라 여러가지 형태를 가질 수 있는 성질로 C++에서는 부모 클래스의 함수를 자식 클래스에서 재정의하여 자식클래스의 서로 다른 반응을 구현할 수 있다.

 

이를 위해 부모 클래스에서 자식 클래스에 재정의될 수 있는 가상 함수와 부모 클래스의 함수를 같은 함수 이름과 같은 매개 변수로 재정의하는 오버라이딩을 사용할 수 있다.

 

부모 클래스의 가상 함수를 오버라이드로 재정의

 

virtual이 붙지 않은 함수를 오버라이드하지 않고 같은 이름의 같은 매개 변수로 부모 클래스와 자식 클래스에서 작성할 수 있지만 자식 클래스에서 부모 클래스로부터 상속 받았을 때 부모 클래스의 함수는 호출되지 않고 숨어버리게 된다. 이렇게 오버라이딩 하는 경우를 하이딩이라고 하며 이름이 같더라도 서로 다른 메모리 주소를 갖는다.

 

다형성의 사용 의의는 새로운 클래스를 추가하거나 확장할 때 기존의 소스를 수정하지 않고 기 존 코드에 영향을 최소화하는 점, 클래스 간의 의존성을 줄여 확장성을 높이고 결합도는 낮춘다는 점에 있다. 

 

 

 

4) 추상성 

 

추상화는 클래스를 정의할 당시 구체화 시킬 수 없는 기능을 추상적 표현으로 정의하는 것으로 클래스를 추상적으로 설계하여 관련된 데이터와 기능을 그룹화하는 것을 의미한다. c++ 에서는 추상 클래스를 통해 추상화를 구현할 수 있다.

 

 

(위) 일반 가상 함수와 (아래) 순수 가상 함수

순수 가상 함수는 기본 구현이 없는 가상 함수를 의미한다. 이 순순 가상 함수를 최소 하나를 포함하는 클래스는 추상 클래스로 간주되고 이러한 추상 클래스는 직접적으로 객체를 생성할 수 없다. 대신 추상 클래스를 상속받은 자식 클래스에서 순수 가상 함수를 반드시 구현해야 하며 이를 통해 상속받은 클래스는 추상 클래스로부터 파생된 일반 클래스가 된다.

 

즉 추상 클래스는 클래스가 추상적인 표현을 정의하는 경우 자식 클래스에서 구체화시켜 구현할 것을 염두하고 추상화를 시키며 추상 클래스에서 내용을 구체화 할 수 없는 순수 가상 함수는 내용을 정의하지 않는다.

추상클래스를 상속하는 자식 클래스가 순수 가상 함수를 재정의하여 구체화한 경우 사용이 가능하다.

 

(단 추상 클래스를 상속받은 클래스를 다시 상속하는 경우, 처음 상속받은 클래스도 추상 클래스로 존재할 수 있다. 즉 추상 클래스를 상속받은 추상 클래스가 존재할 수 있으며 객체를 생성하는 클래스에서 해당 순수 가상 함수가 구현되어 있으면 된다.)

 

 

 

이러한 추상화는 객체들의 공통적인 특징을 도출하고 구현을 구체화 하기 어려운 상위 클래스를 설계할 때 사용되는 개념이다. 이렇게 제시된 순수 가상 함수들은 내용이 구현되어 있지 않기 때문에 기능을 구체화 시키지 않은 경우 객체 생성이 불가하다. 이를 통해 자식 클래스에게 구현을 강제시킴으로써 실수를 줄이는 효과를 가질 수 있다.

'컴퓨터 언어' 카테고리의 다른 글

[C#] 델리게이트와 이벤트  (0) 2023.11.10
[C#] 인터페이스  (0) 2023.11.07
[C#] 구조체와 클래스  (0) 2023.11.06
[C++] OOP - 캡슐화, 상속  (0) 2023.11.01
[C++] 반복문과 연습  (0) 2023.10.31