티스토리 뷰

객체 지향으로 코딩을 하다 보면 상당히 자주 사용하게 되는 기능이 '상속'이다.

인터페이스로 구현되는 의사 다중 상속 관계가 아니라, 부모 클래스에게서 필드와 메서드를 상속받는 그것이 맞다.

상속의 강점은 '같은 기능을 굳이 여러 번 작성할 필요가 없다'라는 점으로, 의외로 2~3단계로 상속받게 되는 경우는 흔하다.

 

그렇게 되면 슬슬 활발하게 활용하게 되는 것이 'abstract'이다.

abstract에 대해서는 톺아보기로 정리를 하긴 했으나, 사실 너무나도 간단하게 정리하고 넘어간 것이 아닌가 싶다.

그러니까, 한번 더 정리해 보자. 'abstract의 활용도'에 대해서.


abstract?

abstract는 클래스와 그 내부의 함수를 추상적으로 선언할 때 사용하는 형식 지정자다.

실질적으로는 '자식 클래스들 간에 서로 다르게 선언될 부분을 묶어서 선언하여, 다른 클래스에서 범용적으로 호출 할 수 있도록 해 주는' 요소라고 보면 된다.

 

그렇다 보니, 비슷한 용도인 interface와 혼동되는 경우도 많고, 실제로 용도가 겹치긴 한다.

다만, 자세하게 살펴보면 사용 방식이 완전히 다르다는 것을 알 수 있다.

일단 가장 두드러지는 interface와의 차이점은 '변수를 변수로서 선언 가능하다'와 '세부 내용 작성이 가능하다'로, interface에 비해서 abstract가 상호간의 상관관계가 훨씬 더 두드러지게 형성되는 편이다.

반대로 interface는 '그저 함수 선언 만 가능'하다 보니, 상관관계 보다는 용례가 같은 경우에 더 적합한 편이다.

 

그렇다면, 이제 이 abstract에 대해서 조금 더 정리 해 보자.


abstract 클래스와 abstract 메서드

abstract 메서드는 abstract 클래스에서만 선언 가능한 '속이 빈' 메서드다.

이 메서드는 해당 abstract 클래스를 상속받은 클래스들은 '반드시' 구현을 해야하는 함수로, 이를 통해서 '통일성'을 구축, 그것을 기반으로 한 통일된 호출 규격을 형성하게 된다. 즉, abstract 클래스를 사용하는 가장 큰 요인인 셈.

반대로 abstract 클래스에서는 abstract 메서드는 속이 빈 메서드라서 abstract는 이 통일성에서 배제되게 되되는데, 그렇다 보니 abstract 클래스는 인스턴스와가 불가능하다. 이런 점을 이용해서 혹시나 실수로라도 이쪽으로 선언하게 되는 것을 막는 용도로도 쓸 수 있는 편.

 

자, 그러면 여기서 하나, 의문점이 든 것이 있다.

abstract 클래스를 abstract가 상속받으면 어떻게 되는 걸까.

결론 부터 말하자면, abstract 클래스라면 부모의 abstract 메서드를 구현할 필요는 없다.

혹시나 상속 관계가 어그러지나 싶을 수 있는데, 자식쪽 abstract 클래스를 상속받아도 부모쪽 abstract 메서드도 구현해야 한다.

이 점을 이용하면 상속 관계를 좀 더 정리해서 구현할 수도 있다.

[물론, 반대로 더 복잡해질 수도 있으니, 작성할 때에는 코드 정리에 신경을 쓰도록 하자.]


번외: 생성자 상속

사실, 얼마 전 까지만 해도 '생성자 상속'을 모르던 상황이라서, 상속 관계에서는 생성자를 쓰지 않고 구현하고 있었었다.

이게 MonoBehaviour이었다면 Awake와 Start에서 초기화가 가능하고, MonoBehaviour에서도 생성 직후 내부 속성들을 초기화하는 것으로 진행이 가능했기도 했다.

일단 상속받는 방법 부터 한번 보자.

public [자식 클래스 명](parameter) : base(parameter)
{

}

이런 함수를 하나 만들어 놓으면 자식 클래스의 생성자는 부모 클래스의 생성자를 상속받아서 실행한다.

실행 순서는 부모 클래스의 생성자 -> 자식 클래스의 생성자다.

[자식 클래스의 생성자라고 언급할 걸 보면 알겠지만, 중괄호 안쪽에 코드를 작성하면 생성자로서 같이 작동한다.]


사실 abstract도 그렇고 상속도 그렇고 객체 지향에서 가장 기본적인 요소라고도 볼 수 있는 요소다.

그렇다 보니 너무 초반에 배워서 어렵다고 생각하고 지레 겁먹을 수 있는 요소이기도 한데, 사실 제대로 활용하기 시작하면 전체적으로 매우 유용한 기능이다.

그러니까, 시간 날 때 한번 더 둘러보는 것은 어떨까. 그럼 새로이 보이는 것도 있을 것이다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
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
글 보관함