interface

codakcodak·2023년 7월 23일
0

Java

목록 보기
14/17
post-thumbnail

인터페이스

다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스

문법

  • 객체 생성이 불가능하다.(하위클래스를 활용해야한다.)
  • 모든 멤버변수는 public static final,모든 메서드는 public abstract가 생략가능하다.
public interface Fightable {
	
	int degree=100;//public static final 생략되어 있음
	int fire();//public abstract 생략되어 있음
}
  • 인터페이스와 인터페이스는 다중상속이 가능하다.(extends)
interface Fightable{
	int fire();
}
interface Transformable{
	void changeShape(boolean isHeroMode);
}

public interface Heroable extends Fightable,Transformable{
	void upgrade();
}
  • 클래스와 인터페이스는 다중 확장이 가능하다.(implements)
interface Fightable{
	int fire();
}
interface Transformable{
	void changeShape(boolean isHeroMode);
}
class IronMan implements Fightable,Transformable{//하나의 클래스에서 Fightable,Transformable 2개의 인터페이스 확장
	int weaponDamage=100;
	
	@Override
	public int fire() {
		System.out.println("발사!");
		return weaponDamage;
	}
	@Override
	public void changeShape(boolean isHeroMode) {
		System.out.println("변신!!");	
	}
}
  • implements를 한 클래스에서 추상메서드를 구현하지 않으면 그 클래스는 추상 클래스로 선언되어야 한다.
interface Fightable{
	int fire();
}
interface Transformable{
	void changeShape(boolean isHeroMode);
}

abstract class IronMan implements Fightable,Transformable{
	int weaponDamage=100;
	
	@Override
	public int fire() {
		System.out.println("발사!");
		return weaponDamage;
	}

//	@Override Transformable라는 인터페이스의 upgrade 추상메서드를 구현하지 않아 IronMan은 추상 클래스가 된다.
//	public void upgrade() {
//		System.out.println("업그레이드!");
//	}
}
  • 조상 클래스,인터페이스로 참조가 가능하다.
interface Fightable{
	int fire();
}

class Fighter implements Fightable{
	int damage;

	Fighter(int damage){
		this.damage=damage;
	}
	@Override
	public int fire() {
		System.out.println("공격!");
		return this.damage;
	}
	
}
public class InterTest {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Fighter f1=new Fighter(50);
		System.out.println(f1.fire());
		Fightable f2=f1;
		System.out.println(f2.fire());//동적바인딩으로 인해 오버라이딩 된 메서드 사용
	}
}

추상클래스와 인터페이스의 상속관계 차이

  • 추상클래스 extends 추상클래스(단일)
  • 추상클래스 implements 인터페이스(다중)
  • 인터페이스 extends 인터페이스 (다중)
  • 인터페이스 implements 인터페이스 X ->존재하지 않는다.

인터페이스의 필요성

  • 구현의 강제로 표준화 처리
  • 인터페이스를 통한 간접적인 클래스 사용으로 손쉬운 모듈 교체 지원
  • 서로 상속관계가 없는 클래스들에게 인터페이스를 통한 관계 부여로 다형성 확장
  • 모듈 간 독립적 프로그래밍 가능
profile
숲을 보는 코더

0개의 댓글