반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

Yeonee's Story

[JAVA] Interface (+ 인터페이스와 추상클래스 차이점) 본문

。*:・゚☆・゚schedule・゚*:・゚★・:*:・☆ *:・゚★/활용해본 코드 적용 예시 (◍•ᴗ•◍)❤

[JAVA] Interface (+ 인터페이스와 추상클래스 차이점)

yeonee 여니 2023. 10. 8. 18:44
728x90
반응형
SMALL

안녕하세요.
#yeoneeblog 여니입니다 :)

인터페이스(Interface)

인터페이스는 얼핏 보기에는 추상클래스와 매우 흡사한 개념입니다.  인터페이스는 숙련된 자바 개발자들에게 아주 선호되는 설계 기능이면서, 자바에서 다중 상속을 구현하게 해주는 고급 기술이기도 합니다. 추상클래스는 추상 메소드 외에 멤버 변수나 일반 메소드를 가질 수 있지만, 인터페이스에서는 반드시 사전에 정의된 추상 메소드와 상수만을 가질 수 있다는 특징이 있습니다. 인터페이스는 팀 프로젝트의 동시 작업에 유리하고 일반적으로 추상보다 요구되는 설계의 기준이 높아서 더 체계적이라는 평을 받습니다. 

 

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

추상클래스는 추상 메소드 외에 멤버 변수나 일반 메소드를 가질 수 있지만, 인터페이스에서는 반드시 사전에 정의된 추상 메소드와 상수만을 가질 수 있다는 것입니다.

 

인터페이스 선언하고 메소드 다뤄보기

이와 같이 인터페이스에서 이와 같이 입력하면 에러가 납니다.
인터페이스는 미리 어떤 일반 메소드를 가지는 것을 막아놨기 때문입니다.
즉, 인터페이스에서는 설계만 해야합니다. 이런식으로 어떤 실질적인 코드를 작성하게 되면 문제가 발생하게 됩니다.

하지만 abstract로 변경해주면 에러가 사라집니다.
추상클래스는 일반 메소드 안에 어떠한 코드를 넣을 수 있습니다.
즉, 추상클래스는 설계의 측면, 즉 추상화의 측면이 인터페이스보다 좀 더 낮기 때문입니다.

 

Main클래스 생성합니다. 인터페이스는 extends를 사용하기 않고 implements를 사용합니다. (사실 이는 그저 단어가 다를 뿐입니다.) 

마우스를 가져다 대면 뜨는 알림창을 이용하여, 자동으로 필요한 implemets 메소드를 추가할 수 있습니다.

 

두 메소드 안에 추가적으로 출력할 내용을 입력해줍니다. 이러면 오류가 발생하지 않습니다.
main 인터페이스를 생성하여 참조변수를 이용하여 메소드를 실행해보면 다음과 같이 콘솔창에 해당 내용들이 출력되는 것을 볼 수 있습니다.
즉, Dog는 추상클래스가 아닌 인터페이스로서 사용이 되고 있는 것입니다. 이렇게 Dog인터페이스를 상속 받아서 다음과 같이 작업을 할 수 있습니다.

 

그렇다면 추상클래스와 인터페이스의 차이점을 직접 실습을 통해 비교해볼까요?

인터페이스와 추상클래스 비교해보기 (인터페이스의 다중상속)

추상클래스와 인터페이스는 비슷한 역할을 하지만 명확한 차이점이 있습니다.
인터페이스는 다중상속이 가능하지만 추상클래스는 다중상속이 불가능한 단일상속만 지원합니다.

Cat이라는 새로운 추상클래스를 만들어줍니다.  

그리고 Main클래스에서 Dog와 새로 만든 Cat 클래스 둘다 상속받으려고하자 오류가 납니다.
즉, 추상클래스에서는 이와 같이 단일상속만 가능한 것을 확인할 수 있습니다.

 

이번엔 인터페이스 Cat을 새로 만들어봅니다.

 인터페이스Cat Main클래스에서 인터페이스Dog와 함께 다중 상속 받으려고 하자 오류가 발생하지 않습니다.
즉, 인터페이스는 다중상속이 가능한 장점을 확인할 수 있습니다.

 

인터페이스의 다중상속 사용해보기
public interface Cat {

	abstract void crying();
		public void two();
}
public interface Dog {

	abstract void crying();
		public void one();
}

Cat클래스에는 two, Dog클래스에는 one메소드를 각각 추가해봅니다.


Main클래스에서 추가했던 implements가 없다는 오류가 발생합니다. 위와 같은 방법으로 마우스를 가져다대어 뜨는 알림창을 클릭하여 두 메소드를 추가해줍니다. 그러면 오류가 사라집니다.

 Dog와 Cat에서 설계되었던 메소드를 Main클래스에서 각각 implements 해주어야 오류없이 정상적으로 사용할 수 있니다.
단 하나의 메소드라도 추가해주지 않는다면 오류가 발생하게 됩니다.

즉, 인터페이스는 추상클래스보다 추상화 정도가 좀 더 높아 다중상속을 사용할 수 있어 좀 더 체계적인 설계가 가능합니다.

 

+ 참조 사이트

더보기

https://www.youtube.com/watch?v=XkSWgIQ2zkk&list=PLRx0vPvlEmdBjfCADjCc41aD4G0bmdl4R&index=20

728x90
반응형
LIST