인터페이스란? 극단적으로 동일한 목적 하에 동일한 기능을 보장하게 하기 위함이다.
자바의 다형성을 이용하여 개발코드 수정을 줄이고 유지보수성을 높일 수 있다.
현실에서 대량생산과 유지보수성, 호환성이 높아질 것을 위해
부품 하나하나 규격에 맞춰 규격을 통일시키듯이
인터페이스 또한 작업 효율을 높이기 위해 사용한다.
인터페이스는 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 함수가 있는 코드로 실행시켜보자.
'JAVA' 카테고리의 다른 글
JAVA - HashMap 사용법 (0) | 2022.07.06 |
---|---|
JAVA - ArrayList 사용법 (0) | 2022.07.06 |
JAVA - 추상클래스를 사용하는 이유와 사용방법 (0) | 2022.07.06 |
JAVA - 상속관계의 클래스에 대한 캐스팅 - 업캐스팅(UpCasting) (0) | 2022.07.05 |
JAVA - 부모 생성자 호출을 위한 super 키워드 사용법 (0) | 2022.07.05 |
댓글