본문 바로가기
[ Developer ]/Core Java

[Java] Interface 자바 인터페이스 실습

by 김현섭. 2016. 6. 1.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
# 인터페이스 실습

우선 인터페이스를 생성해서 Abstract Method(추상 메소드)를 정의한다 
추상 메소드드는 정의만 되고 구조는 정의되지 않은 것이다


그리고 Class를 생성해서 인터페이스를 추가해준다


작성하면 에러가 나는데 인터페이스 요소들을 정의해주면 된다
Add unimplemented methods를 클릭하면 자동을 생성된다


작성하면 아래와 같이 자동으로 @Override가 생성된다


인터페이스에 정의된 메소드의 리턴 타입은 항상 같아야 한다


클래스에 메소드를 정의하고 메인메소드에서 테스트를 해본다
우선 메인 클래스에서 기존의 방법처럼 객체를 생성해서 진행을 해본다

 


결과가 잘 나오는 것을 볼 수 있다
2번째로 IS A 관계를 이용해서 사용하기 위해서 LGCDPlayer.java를 확인한다
LGCDPlayer에서 Super Class는 CDPlayer가 된다 그리고 LGCDPlayer가 Sub Class이다


위와 같은 관계로 객체륾 만들때는 뒤집어서 선언한다

위와 같인 선언된 인터페이스는 LGCDPlayer IS A CDPlayer가 된다

lgPlayer는 CDPlayer가 가진 기능 4가지만 사용이 가능하다



결과가 같은 것을 볼 수 있다

# Interface를 위와 같이 선언하는 이유
다른 CDPlayer를 하나 정의한다


그리고 Main에서 테스트를 진행해본다


삼성을 우선 정의한 후 결과를 보면 다른것을 알 수 있다


같은 타입의 변수를 사용하는 객체지만 뒤에 정의한 구현체 (SamsungCDPlayer)에 따라서 동작하는 방식이 달라진다
이러한 방식을 다형성이라고 부른다

# 인터페이스에 정의된 메소드 이외의 메소드

LGCDPlayer에서 인터페이스에 없는 메소드를 정의해준다



그러면 셔플이 없는것을 볼 수 있다
셔플을 사용하기 위해서 CDPlayer (인터페이스)에 정의를 해준다


그러나 위와 같이 사용하게 되면 LGCDplayer는 사용할 수 있지만
SamsungCDPlayer까지 사용을 해야한다


리팩토링 관련 내용이므로 나중에 설명함
우선은 SamsungCDPlayer에도 supple을 정의해준다


사용하지 않는 기능 시 메소드를 정의하지 않아도 된다
하지만 인터페이스에 있다면 implements한 클래스는 반드시 그 메소드가 override 선언 해야 한다