1. 인터페이스
-역할: 클래스(혹은 프로그램이 제공하는 기능)를 명시적으로 선언하는 역할
public interface TV{
//<상수>볼륨 0~100
public int MIN_VOLUM = 0;
public int MAX_VOLUM = 100;
//TV에 필요한 추상메소드
public void turnOn();
public void turnOff();
public void changeVolum();
public void changeChennel();
}
-쉽게 정리: "내가 만들 객체(ex. TV, 자동차, 프린터기)가 어떤 기능들을 가지고 있으면 좋을까"하는 것들을 모아 놓은 것
즉, 정의만 하고 구현하지 않았기 때문에 인터페이스만으로 사용할 수 없다.
그러니까 무조건 구현해서 사용해야겠지?
-방법: 인터페이스 생성 후 해당 인터페이스를 구현(implements)하는 클래스를 만들어 인터페이스에서
선언한 메소드를 구체적으로 구현한다.
//인터페이스
public interface Calculator {
public int plus(int i, int j);
public int multiple(int i, int j);
}
//인터페이스를 구현하는 클래스
public class MyCal implements Calculator{
public int plus(int i, int j) {
return i+j;
}
public int multiple(int i, int j) {
return i*j;
}
-인터페이스를 쓰는 이유
1.
예를들어 내가 TV라는 인터페이스를 만들었어 여기에 전원, 볼륨, 채널 등 이러한 메소드가 있겠지?(이게 TV가 하는 기능이니까) 근데 회사 상사가 LED, LCD 등등 여러대의 TV를 만들래;;; 우리가 인터페이스를 알기 전에는 일일이 각 클래스 만들고 메스드 만들고 이래야 겠지? 완전 귀찮잖아.... 그래서 TV의 기존 기능을 인터페이스로 정의해서 이 귀찮음을 덜자 이거야
2.
계산기 기능이 필요한 프로젝트를 진행하는데 시간이 촉박하다. 그래서 계산기 클래스는 개발자 A가 만들고, 개발자 B는 그 클래스를 사용하는 로직을 만들다고 해보자. 이런 경우 개발자 B는 개발자 A가 계산기를 잘 만들어서 나중에 제출할 것이라고 기대하고 개발을 진행할 것이다.
-인터페이스에서 선언이 가능한 것
1.추상메서드
2.상수
3.static메소드
//인터페이스를 구현하는 클래스
public class MyCal implements Calculator{
/**public int plus(int i, int j) {
return i+j;
}
public int multiple(int i, int j) {
return i*j;
}**/
//static키워드로 클래스 수정 가능
static int 나머지(int i, int j){
return i%j;
}
}
4.default메소드
-자바 8이 ^defaulf 메소드^를 추가한 이유
:인터페이스가 변경이 되면 그 인터페이스를 구현하고 있는 모든 클래스들이 해당 메서드를 구현해야 되는 문제가 발생
이런 문제를 해결하기 위해서 인터페이스에 메서드를 구현해 놓을 수 있도록 추가 해놓은 것이다.
이런 인터페이스에 스타틱 메소드 가질 수 있는데 구현하고 있는 메서드이다
//인터페이스를 구현하는 클래스
public class MyCal implements Calculator{
/**public int plus(int i, int j) {
return i+j;
}
public int multiple(int i, int j) {
return i*j;
}**/
//default키워드로 클래스 수정 가능
default int division(int i, int j){
return i/j;
}
}
//인터페이스와 구현한 클래스를 메인에서 실행하기
public class MyCalTest {
public static void main(String[] args) {
Calculator cal = new MyCal();
cal.plus(3,4);
cal.multiple(5, 6);
//static한 메소드는 인터페이스로 불러와야 됨
Calculator.나머지(2,3);
}
}
'JAVA' 카테고리의 다른 글
클래스-객체 지향 프로그래밍 (0) | 2020.07.31 |
---|