abstract class와 interface에 대해서 기본적인 내용은 이전 걸음에서 공부를 했습니다. 기본적인 활용이나 개념을 공부를 했습니다. 하지만 여러 상황에서 어떻게 사용을 할지 공부를 더해야 합니다. 이번 걸음을 통해서 추상화를 좀 더 자세히 알 수가 있습니다.
이번 걸음에서는 abstract class와 interface 고유 특성을 확장한 예시와 조심을 해야 하는 부분에 대해서 보고 한번 더 예제 소스를 보고 가능한 경우나 사용에 대해서 설명을 하고 공부를 하도록 하겠습니다. 이번 걸음을 공부를 하시면 좀 더 추상화를 잘 알 수 있습니다.
추상화 심화를 할 예정이기 떄문에 abstract class의 상속에 대한 동작을 보고 유의 사항과 interface와 연동 시 주의 점과 예제를 보겠습니다. 또한 interface에서 아직 배우지 않은 특징과 그 특징으로 인해 상속에 어떻게 사용되며 사용을 하면 좋은 점을 예제와 예시로 보겠습니다. 이번 걸음을 통해 abstract class, interface를 완벽히 이해를 할 수 있습니다.
추상화 심화 - (abstract class, interface)
abstract class(유의 사항)
abstract class는 추상화 메소드를 가진 Method이기 때문에 나머지는 그냥 class와 동일 합니다. 그래서 부모가 되는 것이 일반적입니다. abstract class 위에 부모는 누구여도 상관이 없습니다. 같은 abstract class여도 되고 interface 여도 되고 일반 class여도 무방합니다. 그렇게 상속을 받아도 결국 그 abstract class를 사용을 하려면 필수적으로 abstract method를 자식이 Overriding을 해줘야 합니다.
2. interface(주의 할 점)
interface는 모든 것이 추상화이기 때문에 자식은 모든 추상화 Method를 Overriding을 해줘야 합니다. 또한 interface는 class라고 불리지 않고 interface라고 불리며 상속 받기 위한 명령어도 implements로 사용을 합니다. 그리고 부모가 될 수 있는 것은 interface 밖에 안됩니다. class가 아니기 때문입니다. 마지막으로 interface만 다중 상속이 가능합니다. 그래서 자식이 여러 부모를 가질 수 있습니다. Java에서 유일하게 가능합니다.
추상화 심화 문제
위의 문제를 보고 가능 여부와 왜 가능 한지를 설명을 드르겠습니다.
C클래스에서 모두 재정의 가능한가요?
이 문제는 우선 C는 부모 B를 상속을 받고 B는 A를 상속을 받습니다. A의 추상화 Method 2개, B의 추상화 Method 1개를 C에서 Overriding을 할 수 있는지 묻는 것입니다. 당연히 YES 입니다. 추상화 Method는 마지막 자식까지 올 때 재 정의가 다되면 문제가 없습니다.
2. B추상화 클래스에서 부모 클래스에 있는 추상 메소드를 정의가 가능한가요?
클래스 B는 추상화 클래스 입니다. 추상화 Method만 빼면 일반 class와 똑같기 때문에 당연히 부모의 Overriding을 할 수 있습니다. 그렇다고 객체를 만들 수 있는 것은 아닙니다.
3. B 추상화 클래스에서 부모중에 하나의 메소드만 정의가 가능한가요?
네 당연히 가능합니다. 하나만 Overriding을 하면 나머지 추상 Method는 결국에 마지막에 있는 자식 class에 와서 모두가 재 정의가 되어 있으면 가능하기 때문입니다.
4. B추상화 클래스에서 부모 클래스에 있는 추상메소드를 정의를 한 걸 C클래스에서 재 재정의를 할 수 있나요?
당연히 가능합니다. Overriding이 되어 있어도 본인 다시 바꿔 쓰려고 하면 당연히 바꿔서 사용이 가능 하기 때문에 Overriding은 충분히 가능합니다.
interface 같은 경우에는 같은 interface 끼리 상속을 하면 extends라는 명령을 사용을 합니다. 그러다 보니 헷갈리는 분들이 많으신다. 간단하게 이해가 되도록 설명을 하겠습니다.
※ 같은 형태면 extends이고 형태가 다르면 implements입니다. abstract class도 클래스라는 것을 잊지 마세요.