[edx] 추상 및 인터페이스

Hyeon Soo·2022년 5월 11일

1. 개요

  • 앞서 다룬 상속의 경우, 하나의 클래스가 다른 하나의 클래스하고만 상속관계를 가지지는 않는다. 예를 들어, 동물 클래스는 아주 많은 자식 클래스를 가질 것이다.

  • 이런 경우, 부모 클래스를 아주 상세하게 작성하기는 힘들다. 보통 더 넓은 범주일수록 여러 기준이 모호할 수 밖에 없기 때문이다. 동물 클래스의 예시를 계속 든다면, 먹이를 섭취하는 하나의 행동이라 할 지라도, 무엇을 먹는지, 한번에 삼키는지, 씹어 삼키는지 등 제각각의 방법이 있을 것이다. 그렇기 때문에, 더 상위의 위계에 있는 클래스 일수록 그 내용은 빈약하거나, 아예 정의하지 않고 선언만 해둘 필요가 있다.

  • 한편으로는, 상속 위계에 포함되지는 않지만, 여러 클래스에 적용될 필요가 있는 클래스와 메서드가 있을 수 있다. 예를 들어, 동물원의 동물들에게 백신을 접종하는 클래스 혹은 메서드가 필요하다고 할 때, 백신은 동물원의 동물들 뿐 아니라 (존재한다면) 사람 클래스나 그 외에도 필요할 것이다. 이런 경우라면, 백신 클래스는 동물원 클래스의 상속 위계에만 넣을 수는 없다.

2. abstract

  • 첫번째의 경우, abstract modifier를 통해 문제를 해결할 수 있다. 이를 이용한 클래스는 추상클래스가 된다.

  • 추상 클래스는 인스턴스 변수를 가질 수 있다. 또한, 이를 이용한 생성자도 가질 수 있다.

  • 일단 추상 클래스를 선언하면, 내부에는 반드시 하나 이상의 추상 메서드가 존재해야 한다. 추상 메서드란, 선언은 하였으나 정의는 하지 않은 메서드를 의미한다. 즉, 내용이 없는 메서드이다.

  • 또한, 추상 클래스를 상속하는 자식 클래스는 부모 클래스에 선언된 추상 메서드를 전부 override해야한다.

3. 인터페이스

  • 두번째의 경우 필요한 것이 인터페이스이다. 부모 자식 간의 상속관계가 아니더라도, 일반적인 클래스(concrete)와 추상 클래스는 선언한 인터페이스를 사용할 수 있다.

  • 단, 추상 클래스가 아니라면, 인터페이스를 사용하는 클래스는 인터페이스의 모든 메서드를 정의해주어야한다.

  • 가끔 인터페이스를 이용하는 모든 클래스들에 동일한 메서드가 존재할 수 있다. 예를 들어, 동물원의 동물에게 백신을 놓던, 사람이 백신을 맞던, 백신 접종에 대한 금액을 지불해야 하는 것은 똑같다. 이런 경우, 인터페이스에 메서드를 선언하고, 그 내용을 각각 다른 클래스들 모두가 override 할 수도 있지만, 이 경우 같은 내용을 계속 중복해서 작성하게 된다. 이러한 경우 default 메서드를 인터페이스에 한번에 작성하면, 모든 클래스의 객체들이 사용할 수 있다. 만약, 대부분의 클래스들이 default 메서드를 공유하지만, 공유하지 못하는 클래스가 있는 경우, default 메서드를 override 하는 것을 통해 해결 할 수 있다.

  • static 메서드를 인터페이스에 사용하는 경우, 일반 클래스에 사용하는 것과 비슷하다. 인터페이스를 사용하는 클래스를 통해 객체 없이 인터페이스의 메서드를 사용할 수 있다. 또한, 인터페이스에 상수를 선언 할 수 있는데, 이 경우 기본적으로 public, static, final modifier를 붙인 것과 같다.

출처: https://learning.edx.org/course/course-v1:GTx+CS1331xII+2T2021/home

이상의 내용은 edx 플랫폼을 통해 GTx에서 제공하는 Introduction to Object-Oriented Programming with Java 강의의 내용을 개인적으로 정리한 것입니다. 그렇기 때문에, 부정확한 내용 혹은 잘못 이해하고 있는 내용이 있을 수 있으니 양해 부탁드립니다.

0개의 댓글