상속이 필요한 까닭
거의 같은 타입을 하나 더 만들 때, 처음부터 다시 써야 할까?
추상 자료형
값과 연산을 묶어 타입 하나로
10강에서 본 추상 자료형(abstract data type)은 값과 그 값을 다루는 연산을 묶고, 속은 밖에서 못 보게 감춘 타입입니다. 타입은 값의 종류입니다.
Shape(도형)는 이 강의가 따르는 교재의 예에 나오는 이름입니다. move(옮기기), draw(그리기)는 예시입니다.
클래스와 객체
클래스는 틀, 객체는 찍어 낸 것
객체지향 언어에서는 추상 자료형을 클래스(class)라고 부릅니다. 클래스로 만들어 낸 것 하나하나가 객체(object)이고, 클래스의 인스턴스(instance)라고도 합니다.
5강에서 '값과 기능을 묶은 덩어리'라고 한 것이 객체입니다. 값은 예시입니다.
재사용의 문제 ①
가져다 쓰려면 조금씩 고쳐야 합니다
이미 만든 것을 다시 쓰는 재사용은 개발을 빠르게 합니다. 그런데 추상 자료형은 그대로 쓸 수 있는 일이 드뭅니다. 복사해서 고치면 같은 코드가 두 벌이 됩니다.
Circle(원)과 radius(반지름)는 예시입니다.
재사용의 문제 ②
타입들이 모두 따로 놓입니다
추상 자료형은 저마다 독립이고 같은 수준에 있습니다. 원이 도형의 한 종류라는 것은 사람만 알 뿐, 프로그램 어디에도 적히지 않습니다. 타입 사이에 위아래 관계를 둘 방법이 없습니다.
상속
물려받고, 다른 것만 적습니다
상속(inheritance)은 이미 있는 클래스를 바탕으로 새 클래스를 정의하는 것입니다. Circle은 Shape의 것을 물려받고 새로 필요한 것만 적습니다. 문제 ①이 풀립니다.
area(넓이 구하기)는 예시입니다. 가장 단순한 경우에는 물려주는 클래스의 것을 모두 물려받습니다.
클래스 계층
위는 일반, 아래는 구체
상속으로 이으면 클래스들이 위아래로 이어진 계층 구조(hierarchy)를 이룹니다. '원은 도형의 한 종류'라는 관계가 이제 프로그램에 적힙니다. 문제 ②가 풀립니다.
Rectangle(사각형)의 width(너비), height(높이)는 예시입니다.
객체지향의 세 특성
객체지향은 셋으로 섭니다
객체지향 언어의 특성은 셋입니다. 추상 자료형, 상속, 그리고 같은 이름의 연산이 대상에 따라 다르게 동작하는 다형성(polymorphism)입니다.
1강에서 '데이터 추상화에 상속과 다형성을 더한 것'이라고 한 그 셋입니다.
다음 편