JAVA

day09) 인터페이스

code_learner 2022. 1. 2. 01:03

인터페이스

 : 일종의 추상 클래스로, 추상 메서드를 갖지만 추상 클래스보다 추상화 정도가 높아
추상 클래스와 달리 몸통을 갖춘 일반 메서드, 멤버 변수를 구성원으로 가질 수 없다.

-인테페이스의 멤버

  1. 상수 : final 타입 변수명 = 값;
  2. 추상 메서드 : abstract 리턴 타입 메서드 명( )

-인터페이스의 구현 방법

   interface 인터페이스명{ 필드 };

   class 클래스명 implements 인터페이스명{ 추상 메서드 구현 };

 

-인터페이스의 특징

  1. 인터페이스 내 일반 메서드 불가
  2. 인터페이스 내 별수 불가(상수만 가능)
  3. 인터페이스로 객체생성 불가(일종의 추상 클래스)
  4. 인터페이스 내 멤버 메서드 public, abstract 키워드 생략 가능
  5. 인터페이스 내 멤버 변수 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 인터페이스는 여러 클래스들에서 구현되는데, 구현클래스들 간에 관련성이 없다.
  • 특정 데이터 타입의 행동을 명시하고 싶은데, 어디서 그 행동이 구현되는지는 신경쓰지 않는 경우.
  • 다중상속을 허용하고 싶은 경우