본문 바로가기
  • 콩's 코딩노트
JAVA

JAVA - 인터페이스(Interface)를 사용하는 이유와 사용방법

by Cong_S 2022. 7. 6.

인터페이스란? 극단적으로 동일한 목적 하에 동일한 기능을 보장하게 하기 위함이다.

자바의 다형성을 이용하여  개발코드 수정을 줄이고 유지보수성을 높일 수 있다.

 

현실에서 대량생산과 유지보수성, 호환성이 높아질 것을 위해

부품 하나하나 규격에 맞춰 규격을 통일시키듯이

인터페이스 또한 작업 효율을 높이기 위해 사용한다.

 

 

인터페이스는 interface 키워드를 통해 선언할 수 있으며 

implements 키워드를 통해 일반 클래스에서 인터페이스를 구현할 수 있다.

 

public interface 인터페이스명 {

//상수

타입 상수명 = 값;

//추상 메소드

타입 메소드명(매개변수, ... );

//디폴트 메소드

default 타입 메소드명(매개변수, ... ){

  //구현부

}

//정적 메소드

static 타입 메소드명(매개변수) {

  //구현부

}

 

}

맨 위에 class 부분도 빠지게 된다.

멤버 변수도 작성되지 않으며 변수는 상수만, 함수는 이름만 작성할 수 있다.

 

각 부분의 의미는 다음과 같다.

상수 : 인터페이스에서 값을 정해줄테니 함부로 바꾸지 말고 제공해주는 값만 참조해라 (절대적)

추상메소드 : 가이드만 줄테니 추상메소드를 오버라이팅해서 재구현해라. (강제적)

디폴트메소드 : 인터페이스에서 기본적으로 제공해주지만, 맘에 안들면 각자 구현해서 써라. (선택적)

정적메소드 : 인터페이스에서 제공해주는 것으로 무조건 사용 (절대적)

 

실제 코드는 다음과 같다.

public interface PlayngCard {
	// 위에 class도 뺀다.
	// 인터페이스는, 추상클래스보다 더 뼈대만 있는 것!
	// 추상클래스는 멤버 변수와 함수명은 적어주었다.
	// 인터페이스는, 멤버 변수가 없고, 함수의 이름만 있는 것.
	
	
	// String name;
	// 인터페이스는 멤버변수 만들면 안된다. 빨간줄
	
	// 단, 상수는 가능하다.
	// 상수란? 변수이지만 변수에 저장한 값을 바꿀 수 없는 변수를 말한다.
	
	// 카드의 클로버는 1, 하트는 2, 다이아몬드는 3, 스페이드는 4라고 지정하자.
	public static int Clover = 1;
	public static int HEART = 2;
	public static int DIAMOND = 3;
	public static int SPADE = 4;
	
	public String getCardNumber();
	public void print();

상수와 함수명 정도만 작성가능하다. - 인터페이스를 만들 때의 코드

 

public class MyCard implements PlayngCard {

	
	String cardNumber;
	
	public MyCard(String cardNumber){
		this.cardNumber = cardNumber;
	}
	
	public MyCard(){	
	}
	
	public String getCardNumber() {
		return cardNumber;
	};
	
	
	public void print() {
		System.out.println("cardNumber = "+cardNumber);
	};
}

인터페이스를 implements로 불러와 클래스 코드를 작성할 수 있다. - 인터페이스를 구현할 때의 코드

 

public class InterfaceMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		MyCard card1 = new MyCard();
		
		card1.cardNumber = "7";
		String number1 = card1.getCardNumber();
		System.out.println(number1);
		
		card1.print();
		
		MyCard card2 = new MyCard();
		
		card2.cardNumber = "K";
		String number2 = card2.getCardNumber();
		System.out.println(number2);
		
		card2.print();
		
		// 상수를 사용할 때, 보통은 객체.상수로 사용하지않고
		// 상수를 정의한 인터페이스나 클래스명.상수로 사용한다.
		System.out.println("클로버 카드는 "+ card2.Clover);
	}

}

 

마지막 main 함수가 있는 코드로 실행시켜보자.

 

 

 

 

참조:https://limkydev.tistory.com/197

댓글