티스토리 뷰

JAVA

[Java] 인터페이스

단미라이프 2022. 4. 6. 17:22
반응형

 

 

1. 인터페이스

  • 인터페이스란 서로 다른 하드웨어 장치들이 상호 데이터를 주고받을 수 있는 규격을 의미한다.
    예를들어 전원과 플러그라고 생각해보면, 다양한 회사들에서 규격(220v 인터페이스)에 맞추어 제품(220v 플러그)을 만들고 이 규격에 맞으면 언제나 연결이 가능하다. 하지만 규격이 맞지 않는 제품은 연결이 불가능하다.
  • 이러한 인터페이스 개념은 sw에서도 적용되며 서로 인터페이스가 맞는 모듈을 조립하듯이 응용프로그램을 작성할 수 있다.

인터페이스 개념

 

 

 

인터페이스는 왜 필요할까?

 

class PoketMon{
	void cry(Pika doll) {  // 피카츄가 오면 피카츄가 나온다
		System.out.println("피카츄!");
    }

	void cry(Rai doll) {  // 라이츄가 오면 라이츄가 나온다
		System.out.println("라이츄!");
	}
}

class Pika{

}

class Rai{
	
}

public class ex {
    public static void main(String[] args) {
    	PoketMon mon = new PoketMon();
    	Pika pika = new Pika();
    	Rai rai = new Rai();
    	mon.cry(pika);  // cry pika 출력
    	mon.cry(rai);  // cry Rai 출력
    }
}
결과
______________

피카츄!
라이츄!
  • 만약 여기서 다양한 포켓몬 인형 종류가 추가된다면 매번 getDoll메소드를 추가해야한다. 매번 이렇게 추가하기 어려우니 이를 위해서 인터페이스의 도움이 필요하다.

 

 

 

 

 

 

 

2. 인터페이스 구성

  • 인터페이스는 interface 키워드를 사용하여 클래스를 선언하듯이 선언한다.
interface poketMon {	// 인터페이스 선언
	void cry();	// 추상메소드

}
  • 인터페이스는 5종류의 멤버로 구성되며 필드(멤버변수)를 만들 수 없다.
    • 상수와 추상메소드
    • default 메소드
    • private 메소드
    • static 메소드
  • 추상메소드는 public abstract로 정해져 있고 생략가능하며, 다른 접근 지정자는 지정할 수 없다.
  • default 메소드의 접근 지정은 public으로 고정되어 있다.
  • private메소드는 인터페이스 내에서만 호출 가능하다.
  • static메소드의 경우 접근지정이 생략되면 public이며, private으로 지정될 수 있다.

 

 

 

인터페이스는 객체를 생성할 수 없다.

 

  • 인터페이스에 구현되지 않은 추상메소드를 가질 수 있기 때문에 객체를 생성할 수 없다.
new poketMon();	//오류

 

 

 

 

 

 

 

3. 인터페이스 구현

  • 인터페이스 구현은 implements 키워드를 사용하여 인터페이스의 추상메소드를 구현한 클래스를 작성하는 것을 말한다.
class Pika implements poketMon{
	
	@Override
	public void cry() {
		System.out.println("피카츄");
	}
	
}
  • Pika클래스에는 poketMon인터페이스의 모든 추상 메소드를 구현한다. 

 

 

 

 

인터페이스 예제

 

interface PoketMon {
	void cry();

}

class Pika implements PoketMon{
	
	@Override
	public void cry() {
		System.out.println("피카츄!");
	}
	
}

class Rai implements PoketMon{

	
	// poketMon의 메소드 구현
	@Override
	public void cry() {
		System.out.println("라이츄!");
	}
	
}


public class InterfaceEx01 {

	public static void main(String[] args) {

		Pika pika = new Pika();
		Rai rai = new Rai();
		pika.cry();		
		rai.cry();
		
	}

}
결과
______________

피카츄!
라이츄!

 

 

 

반응형

 

 

 

 

4. 인터페이스 상속

 

  • 클래스는 인터페이스를 상속받을 수없고, 인터페이스는 인터페이스끼리만 상속이 가능하다.
  • 인터페이스 상속은 extends 키워드를 사용한다.
interface fireMon extends PoketMon{	// 상속
	void fire();
}
  • fireMon인터페이스는 cry(), fire()의 멤버를 가지게 된다
  • 자바는 인터페이스의 다중상속을 허용한다.
interface legendaryMon extends PoketMon, electMon {	//다중상속
	void legendFight();
}

 

 

 

 

 

 

 

5. 다중 인터페이스 구현

  • 클래스는 하나 이상의 인터페이스를 구현할 수 있다.
  • 이 경우 콤마로 각 인터페이스를 구분하여 나열하며 각 인터페이스에 선언된 모든 추상 메소드를 구현해야 한다.
interface PoketMon {
	void cry();

}

interface electMon{
	void elect();
}

interface fireMon extends PoketMon{	//인터페이스 상속
	void fire();
}

interface legendaryMon extends PoketMon, electMon {	//인터페이스 다중상속
	void legendFight();
}

class Pika implements PoketMon{	//인터페이스 구현
	
	@Override
	public void cry() {
		System.out.println("피카츄!");
	}
	
}

class Rai implements PoketMon, electMon{ //다중인터페이스 구현

	
	// poketMon의 메소드 구현
	@Override
	public void cry() {
		System.out.println("라이츄!");
	}
	
	
	// electMon의 메소드 구현
	@Override
	public void elect() {
		System.out.println("백만볼트!!!!!!!!");
	}
	
}


class Firy implements fireMon{

	@Override
	public void cry() {
		System.out.println("파이리!");
	}

	@Override
	public void fire() {
		
		System.out.println("불꽃발사!!!!!!!");
	}
	
}


class Thunder implements legendaryMon{

	@Override
	public void cry() {
		System.out.println("썬더!");
		
	}

	@Override
	public void elect() {
		System.out.println("전기공격!");
		
	}

	@Override
	public void legendFight() {
		System.out.println("전설의 공격");
		
	}
	
}

public class InterfaceEx01 {

	public static void main(String[] args) {

		Pika pika = new Pika();
		Rai rai = new Rai();
		Firy firy = new Firy();
		Thunder thunder = new Thunder();
		
		pika.cry();
		
		rai.cry();
		rai.elect();
		
		firy.cry();
		firy.fire();
		
		
		thunder.cry();
		thunder.elect();
		thunder.legendFight();
		
	}

}
결과
______________

피카츄!
라이츄!
백만볼트!!!!!!!!
파이리!
불꽃발사!!!!!!!
썬더!
전기공격!
전설의 공격

 

 

 

 

 

 

 

6. 인터페이스와 추상클래스 비교

 

비교 목적 구성
추상클래스 - 추상클래스는 자식클래스에서 필요로하는 대부분의 기능을 구현해두고 자식클래스가 상속받아 활용할 수 있도록 함
- 자식 클래스에서 구현할 수밖에 없는 기능만을 추상메소드로 선언하여 자식클래스에서 구현하도록 하는 목적(다형성)
- 추상메소드와 일반메소드 모두 포함
- 상수, 변수 필드 모두 포함
인터페이스 - 인터페이스는 객체의 기능을 모두 공개한 표준화문서와 같은것
- 인터페이스를 상속받는 클래스의 목적에 따라 인터페이스의 모든 추상메소드를 만들도록 하는 목적(다형성)
- 멤버변수는 포함하지 않음
- 상수, 추상메소드, 일반메소드, default 메소드, static 메소드 모두 포함
- protected 접근 지정 선언 불가
- 다중상속 지원

 

 

 

 

반응형
댓글
반응형
공지사항