Joslynn의 하루

추상클래스와 인터페이스의 차이점 본문

개발 고민

추상클래스와 인터페이스의 차이점

Joslynn 2022. 8. 2. 23:17

추상 class

: 개체들의 공통 분모를 일반화 // 속성, 메소드(기능), 객체들의 이름 자체 등;

: 공통으로 가지고 있는 속성, 또는 공통으로 가져야 하는 기능 등을 집중화

: 공통 분모의 수준으로만 사용 시 추상 class의 객체에 다양한 타입의 객체를 대입해 사용 가능

: client와 상관없이 도구들이 먼저 존재할 수 있음

: client가 어떤 것을 사용할 것인가를 결정 지음

 

예시 1)

- abstract class 동물 // 타입으로서의 의미는 있으나 동물이라는 실제 객체는 없음;  → 추상 class, 타입으로 존재, 실제 객체 생성 불가

- abstract void 먹기(); // 추상 메소드 → 먹기라는 기능은 있는데, 어떻게 동작할지는 아직 정하지 않음;

 

** 참조사항

상속 == is a 관계: 동물 - 개, 동물 - 고양이, 조류 - 닭 등;

↔ has a 관계: TV와 리모콘처럼 리모콘이 TV의 참조변수를 포함하는 경우; (TV 참조)

 

 

인터페이스

: client가 기능이 필요하면 인터페이스에 기능 추가;

: 각 구현 객체들에서는 해당 기능을 구현 및 사용자에게 제공;

: 추상 class와 비교했을 때, client의 요구가 더 중요;

: 사용하고자 하는 객체에서 재정의해서 사용 // 구현된 구체적인 기능은 해당 객체에서만 사용 --- 모호함 제거;

: 전혀 다른 타입 간 관계를 만들어줄 수 있음; // 배열로 하나로 묶을 수 있음; (기능으로 묶어줄 수 있다);

예시1)

포유류 - 고래, 어류 - 상어, 어류 - 물고기, 포유류 - 펭귄

interface 물생활 [ ]  = new 물생활 [ ] { 고래, 상어, 펭귄, 물고기}  /*interface 물생활: 타입으로서는 유효*/

 

예시2)

리모콘 (인터페이스)

TV, 오디오 (구현 class)

 

리모콘.turn on();

: 리모콘에 어떤 구현 객체를 대입하느냐에 따라 TV를 켤 수도 있고, 오디오를 켤 수도 있음; 

 

Comments