본문 바로가기
개발/자바

인터페이스와 추상클래스 - Interface and Abstract Class

by EPdev 2020. 5. 22.
728x90

인터페이스란 뭐지 ?

이전에 알아본 클래스는 "상태, 행위"로 구성되어 있다.

추상 클래스는 클래스 이름 앞에 추상을 뜻하는 abstract 가 붙거나 하나 이상의 추상메소드를 가져야한다.

인터페이스는 모든 메소드가 추상메소드이다.

 

그럼, 추상클래스와 인터페이스가 매우 비슷한데? 맞다. 사용하는 용도도 비슷하다.

하지만, 분명히 다른 점이 있는데

[ 추상 클래스 = 일반변수(가능) + 일반메소드(가능) + 추상메소드 ]

[ 인터페이스 = 상수(static) + 추상메소드 ]

위 처럼, 변수를 가질 수 있느냐 없느냐의 차이가 있다.

상속을 했을 때 인터페이스에 선언된 메소드는 모두 override를 해줘야한다. 추상클래스의 메소드는 상황에 따라 다름.

게다가, 추상클래스는 extends로 상속하면 자식클래스는 더 이상 다른 클래스를 상속 받을 수 없다. 즉 상속의 중복이 불가.

하지만 인터페이스는 implements로 상속? 받더라도 다른 인터페이스들을 , 로 구분해서 더 받을 수 있다.

(여기에 extends로 부모클래스 하나 더 받을 수 있음)

 

이렇게 보면 클래스를 extends 받는 것과 인터페이스를 implements 받는 것은 다르다.

extends는 부모 클래스의 행위를 변화, 발전 이런 느낌이고

implements는 많은 다른 클래스에게 어떤 동일한 행위를 강제하는 듯한 느낌이다.

 

예를 들어 사람클래스가 있을 추상클래스로 있고 그 밑에 유저클래스와 NPC클래스가 자식 클래스로 있다.

사람 클래스에 추상메소드로 '웃다' 라는게 있다면, 밑에 자식 클래스들은 '웃다' 메소드를 재구성하는 것이다.

몬스터클래스가 따로 있는데, 얘네는 '웃다'라는 메소드가 필요도 없고 사람클래스를 상속받기도 이상하다.

그런데 사람이든 NPC든 몬스터든 모든 유닛들은 '이동'이라는 메소드가 있다. 그래서 이걸 인터페이스로 만들어서

클래스에 상관없이 implements 시켜주는 것이다. 뭐 이런 느낌??

 

그렇다면 인터페이스를 어떻게 활용하는지

인터페이스를 람다식으로 표현하는 방법 등은 더 공부해보자.

2020/05/08 - [개발/일지] - 20.05.08.(금) 자바 공부(람다식, Lambda Expression)

 

번외로, 인터페이스끼리 상속하는건 extends를 사용한다.

 

728x90

'개발 > 자바' 카테고리의 다른 글

쓰레드 (Thread)  (0) 2020.05.22
클래스 (Class)  (0) 2020.05.21
JavaFX  (0) 2020.05.17
자바 (람다식, Lambda Expression)  (0) 2020.05.08
자바 (제네릭, Generic)  (0) 2020.05.08

댓글