JAVA
day09) 인터페이스
code_learner
2022. 1. 2. 01:03
인터페이스
: 일종의 추상 클래스로, 추상 메서드를 갖지만 추상 클래스보다 추상화 정도가 높아
추상 클래스와 달리 몸통을 갖춘 일반 메서드, 멤버 변수를 구성원으로 가질 수 없다.
-인테페이스의 멤버
- 상수 : final 타입 변수명 = 값;
- 추상 메서드 : abstract 리턴 타입 메서드 명( )
-인터페이스의 구현 방법
interface 인터페이스명{ 필드 };
class 클래스명 implements 인터페이스명{ 추상 메서드 구현 };
-인터페이스의 특징
- 인터페이스 내 일반 메서드 불가
- 인터페이스 내 별수 불가(상수만 가능)
- 인터페이스로 객체생성 불가(일종의 추상 클래스)
- 인터페이스 내 멤버 메서드 public, abstract 키워드 생략 가능
- 인터페이스 내 멤버 변수 public, static, final 키워드 생략 가능 (인터페이스는 객체가 아니므로 '객체가 아니므로' 키워드인 static이 붙음)
interface UsePhone{
//interface의 모든 메서드는 public abstract가 숨겨져있다.
void soundUp();
public abstract void soundDown();
}
interface AddSkill{
void act1();
void act2();
}
class Phone implements UsePhone, AddSkill{
//interface는 다중 상속이 가능함
//=>다중 implements 가능 but 모호성유의!
int sound;
//부모의 공개범위 <=자식의 공개범위
//public <= public
@Override
public void soundUp() {
// TODO Auto-generated method stub
}
@Override
public void soundDown() {
// TODO Auto-generated method stub
}
@Override
public void act1() {
// TODO Auto-generated method stub
}
@Override
public void act2() {
// TODO Auto-generated method stub
}
}
class Watch implements UsePhone{
@Override
public void soundUp() {
// TODO Auto-generated method stub
}
@Override
public void soundDown() {
// TODO Auto-generated method stub
}
}
인터페이스 vs 추상클래스
추상 클래스
- 관련성이 높은 클래스 간에 코드를 공유하고 싶은 경우
- 추상 클래스를 상속 받을 클래스들이 공통으로 가지는 메소드와 필드가 많거나,
public이외의 접근자(protected, private) 선언이 필요한 경우 - non-static, non-final 필드 선언이 필요한 경우 (각 인스턴스에서 상태 변경을 위한 메소드가 필요한 경우)
인터페이스
- 서로 관련성이 없는 클래스들이 인터페이스를 구현하게 되는 경우.
ex) Eatable 인터페이스는 여러 클래스들에서 구현되는데, 구현클래스들 간에 관련성이 없다. - 특정 데이터 타입의 행동을 명시하고 싶은데, 어디서 그 행동이 구현되는지는 신경쓰지 않는 경우.
- 다중상속을 허용하고 싶은 경우