01. 이미 존재하는 클래스를 확장하여
새로운 속성이나 함수를 추가한 클래스를 만들어야 할 때 사용한다.
02. 여러 개의 클래스를 만들었는데 클래스들의 공통점을 뽑아 코드 관리를 편하게 할 때 사용한다.
* 수퍼 클래스 - 속성과 함수를 물려준다
* 서브 클래스 - 물려받는다.
* 수퍼클래스에서 구현한 함수의 기능은 서브 클래스에서 사용할 수 없다.
하지만 open 키워드를 사용한다면 서브 클래스에서 함수 재구현이 가능하다.(오버라이딩)
추상화 - 수퍼클래스 내에서는 함수의 구체적인 내용은 없고 각 서브클래스가
비어있는 함수의 내용을 필요에 따라 구현하려면 추상화 해야한다.
추상함수 - 선언부만 있고 기능이 구현되지 않는다.
추상클래스 - 추상 함수를 포함하는 클래스.
abstract를 붙인 추상 클래스는 '미완성 클래스' 이기 때문에 단독으로 인스턴스를 만들 수 없다.
서브클래스에서 상속을 받아 abstrac가 표시된 함수들을 구현해줘야한다.
먼저 추상화 시키기 위해 AbstractOperation 이라는 수퍼 클래스를 선언해줬다.
Add, Subs, Multi, Div 각자 연산 기능이 담긴 서브 클래스에서 override 키워드를 사용해서
수퍼 클래스에 상속해준 모습.
(사진에 뜨는 빨간 줄은 캡처 한 번에 보이기 위해 각 파일에 있는 클래스들을
복붙해놔서 빨간줄 뜨는거에용)
추상화를 하는 또 다른 방법 - 인터페이스 (추상 함수로만 이루어져 있는 순수 추상화 기능)
추상함수는 생성자를 가질 수 있지만 인터페이스는 생성자를 가질 수 없다.
인터페이스에서 구현부가 있는 함수 -> open 함수로 간주
구현부가 없는 함수 -> abstract 함수로 간주
별도의 키워드(open, abstract)가 없어도 포함된 모든 함수를 서브클래스에서 구현 및 재정의 가능,
그리고 유연한 설계 가능하다.
여러개 의 인터페이스나 클래스에서 같은 이름과 형태를 가진 함수를 구현하고 있다면,
서브클래스에서는 혼선이 일어나지 않도록 반드시 오버라이딩 하여 재구현해줘야한다.
이해도가 부족하다보니 너무 어려운 거 같으면서도 하나씩 알게 될 때마다 재밌다. 시간 후딱 지나가는 느낌. lv4 과제까지 끝나고 새로운 과제도 생기긴 했지만,, 지금의 실력으론 주말이 다 지나도 구현하기 어려울 거 같아 시도해볼 엄두가 나지 않는다. 기초부터 확실히 이해시키고 나서 해봐도 늦지 않을거라 생각중..!
좋은 글 감사합니다!