Day17 - interface 01

2021. 3. 10. 17:59JAVA 공부

이번에는 interface 에 대해 알아 봅시다

 

interface

게임을 좀 해본 분들은 많이 들어본 말이죠?

UI - User Interface

 

interface 는 매개체 라고 생각을 하시면 되는데.... 추상클래스(abstract) 와 90% 유사합니다

interface는 class 대신에 사용 할 수 있습니다.

 

interface 내부는 상수 or 추상메서드 를 사용할 수 있습니다.

추상메서드를 사용한다는 얘기는 즉. 오버라이딩을 무조건 해줘야 합니다.

 

형태를 먼저 한번 봅시다

접근제어자 뒤에 class 가 오는 자리에 interface가 왔어요 ~

그리고 변수를 사용하면 저절로 상수화 ( public static final double PI = 3.14 ) 가 됩니다

메서드를 사용하면 저절로 추상화 ( public abstract void method1() ) 이 됩니다.

 

static 메서드도 사용할 수 있는데, static은 클래스나 인터페이스 와는 상관없이 따로 static 메모리에 생성이 된다고 했죠? 그래서, 굳이 interface 내에 만들지는 않고 static 메서드는 class 에서 만들어 준다고 합니다.

 

interface 도 결국 추상메서드를 만든 것 이기 때문에,  오버라이딩 ( 메서드 재정의 ) 해줄 클래스가 필요 합니다.

즉. 상속을 받는 것처럼....

class 이름 뒤 extends 뒤에 implemnets 를 써주면 됩니다.

그리고, interface 는 1개 뿐 아니라, 여러 개 만들어서 사용할 수 있습니다.

interface 에서 만든 메서드는 무조건 오버라이딩을 해줘야 합니다. 안해줄 경우 오류 나요 ~

그리고 class Basic 은 오버라이딩만 무조건 해주고, 그 외에 멤버변수나 다른 메서드를 가지고 있을 수 있습니다.

 

이렇게 만든 Inter1, Inter2 를 사용하는 Basic 을 main에서 써 봅시다

그러면, Inter1, Inter2 에서 만든 상수들을 기억 하시나요?

상수들도 사용해 보겠습니다

interface에서 만든 메서드, 상수 전부 사용가능 하다는 걸 알았죠?

 

그러면 이제 다형성을 적용해 봅시다.

Interface 도 하나의 타입이 될 수 있습니다. 부모클래스와 자식클래스가 그랬던 것 처럼..

그러면 i1은 뭐죠? Inter1 타입이죠. 그래서 Inter1에 있는 PI와 method1 만 사용할 수 있습니다

Inter1에서는 method2 와 method3 가 없으니까, 쓰려고 하면 이렇게 오류가 납니다

 

그러면, Inter2 i2 = b; 를 하면 어떻게 되겠어요?

method2 와 ABC 만 사용할 수 있겠죠?

그리고 역시나.. 다시 Basic 형태로 돌릴 수 있습니다

어때요? 정말 abstract 추상화 클래스랑 굉장히 비슷하죠?

 

그러면, 상속이랑 같이 사용할 수 있을까요?

네 가능합니다.

상속은 단 1개만 가능하고, 인터페이스는 여러개 사용할 수 있습니다 !

문법은 , 먼저 상속을 받고 그 뒤에 implements 써서 인터페이스를 사용해주시면 되겠습니다.

그리고 당연히, 부모가 추상클래스(abstract) 라면, 메서드를 오버라이딩 해야겠죠?

즉. 상속받은 메서드를 오버라이딩, 인터페이스에 있는 메서드를 오버라이딩.

interface는 왜 쓸까요?

클래스라고 생각을 해볼게요

클래스는 단 1개의 클래스만 상속을 받을 수 있죠?

즉. 부모 클래스는 단 1개죠?

※ 다중 상속은 불가능하다.

 

그런데, interface는 여러개 사용할 수도 있고, 서로 관련 없는 객체 끼리도 사용할 수 있어서 사용한다고 합니다

클래스와 클래스의 매개체 역할을 하기 위해서 라고 생각하시면 됩니다.

그림으로 보면 이해가 좀 더 잘 될 꺼에요 ~

 

이렇게 interface 에 대해 알아 보았습니다

 

고생하셨습니다

'JAVA 공부' 카테고리의 다른 글

Day18 - 그동안 뭘 배웠는지 정리해봅시다  (0) 2021.03.11
Day18 - interface 02  (0) 2021.03.11
Day16 - abstract  (0) 2021.03.09
Day16 - final  (0) 2021.03.09
Day16 - static 변수의 초기화 / 싱글톤  (0) 2021.03.09