본문 바로가기

컴퓨터공학 공부/알고리즘

객체 지향 프로그래밍 입문 - 다형성, 추상화, 상속과 조립

배운 내용 정리

오늘은 객체 지향 프로그래밍을 할 수 있는 또다른 방법인 추상화, 조립에 대해 중점적으로 공부하였다.

 

다형성은 여러 모습을 갖는다는 뜻으로, 객체 지향에서는 한 객체가 여러 타입을 갖는 것을 뜻한다. 하나의 객체가 다양한 방식으로 동작이 가능하고 타입 상속으로 구현된다.

 

추상화는 데이터나 프로세스 등을 의미가 비슷한 개념이나 의미있는 표현으로 정의하는 과정이다. 사용자 정보 테이블에서 아이디, 이름, 이메일 등 세부사항을 뽑아내는 등 특정한 성질을 뽑아내는 방식이 있고, HP MXXX, 삼성 SL-M2XXX 이 둘을 서로의 공통점인 프린터로 추상화하는 등 공통 성질으로 일반화하는 방식이 있다. 

 

여러 구현 클래스를 대표하는 상위타입을 도출하여 추상 데이터 타입을 만드는데, 콘크리트 클래스인 EmailNotifier, SMSNotifier, KakaoNotifier 를 Notifier이라는 인터페이스로 추상화하는 등 이들의 가장 대표적인 공통점을 도출한다.

추상 데이터 타입을 사용하면 특정 부분을 수정해도 나머지 부분은 수정할 필요 없이 그대로이기 때문에 사용 대상을 유연하게 변경할 수 있다. 이런 특징 때문에 추상화는 기능 변경과 확장에는 열려있으면서 수정엔 닫혀있어야 한다는 OCP(open-closed principle) 법칙의 핵심요소이기도 하다. 하지만 너무 남용할 경우 추상 데이터 타입이 쓸데없이 증가하여 오히려 복잡해질 수 있기 때문에 존재하지 않는 기능까지 추상화하기보다는 실제 변경, 확장이 발생할 때 추상화를 시도하는 것이 좋다.

 

상속과 조립에 대해서도 공부하였는데, 이 강의에서는 상속보다는 조립의 중요성을 강조하였다.

상속을 통해 기능을 재사용할 경우 상위 클래스를 잘못 변경하면 코드 전체에 에러가 날 수도 있기 때문에 상위 클래스의 변경이 어렵다. 또한 클래스가 증가할 경우 사용이 어렵고 오용될 수 있다는 단점이 있다.

이런 상속의 단점을 최소화 할 수 있는 것이 조립인데, 조립은 여러 객체를 묶어서 더욱 복잡한 기능을 제공한다. 필드를 통해 다른 객체를 참조하는 방식으로 조립하는데, 객체를 필요한 시점에 생성하거나 구하기 때문에 클래스를 적게 쓸 수 있다. 

 

의문점 해결

1. 강의에서 강조할 정도로 조립이 상속에 비해 중요한 지 궁금하다.

구글링 결과 거의 모든 글의 제목이 '상속보단 조립'이었다. 어떤 블로그에서는 '상속을 사용하는 것은 아주 위험하고 해로우니, 사용하는 것을 당장 멈춰라.' 라며 극단적인 반응을 보이기도 하였다. 상속을 이용할 시 불필요한 클래스가 증가하고, 규모가 커질 수록 상위 클래스를 변경하는 것에 대한 리스크가 크기 때문이라고 다들 말했다. 조립이 중요하긴 하지만, 그만큼 상속이 위험하기도 한 것 같다.

'컴퓨터공학 공부 > 알고리즘' 카테고리의 다른 글