interface I{
public void z() // 메소드를 클래스 A가 반드시 포함하고 있어야 한다
// 인터페이스는 하위 클래스에 특정한 메소드가 반드시 존재하도록 강제한다.
}
class A implements I{ // A는 I를 구현한다.
public void z(){}
}
계산기 기능이 필요한 프로젝트를 진행하는데 시간이 촉박하다.
class CalculatorDummy{
public void setOprands(int first, int second, int third){}
public int sum(){
return 60;
}
public int avg(){
return 20;
}
}
public class CalculatorConsumer {
public static void main(String[] args){
CalculatorDummy c = new CalculatorDummy();
c.setOprands(10,20,30);
System.out.println(c.sum()+c.avg());
}
}
class Calculator {
int left, right;
public void setOprands(int left, int right) {
this.left = left;
this.right = right;
}
public void sum() {
System.out.println(this.left + this.right);
}
public void avg() {
System.out.println((this.left + this.right) / 2);
}
}
해결 방법은 협업자 상호간에 구체적인 약속을 코드 안에서 하면 된다 = 인터페이스
public interface Calculatable {
public void setOprands(int first, int second, int third) ;
public int sum();
public int avg();
}
class CalculatorDummy implements Calculatable{
public void setOprands(int first, int second, int third){
}
public int sum(){
return 60;
}
public int avg(){
return 20;
}
}
public class CalculatorConsumer {
public static void main(String[] args) {
CalculatorDummy c = new CalculatorDummy();
c.setOprands(10, 20, 30);
System.out.println(c.sum()+c.avg());
}
}
class Calculator implements Calculatable {
int first, second, third;
public void setOprands(int first, int second, int third) {
this.first = first;
this.second = second;
this.third = third;
}
public int sum() {
return this.first + this.second + this.third;
}
public int avg() {
return (this.first + this.second + this.third) / 3;
}
}
public class CalculatorConsumer {
public static void main(String[] args) {
Calculator c = new Calculator();
c.setOprands(10, 20, 30);
System.out.println(c.sum()+c.avg());
}
}
인터페이스를 이용해서 서로가 동일한 메소드를 만들도록 규약을 만들어서 공유한 결과
interface I5{
private void x();
}
필드로는 상수만 가능하다. 변수는 no. 상수만 가능하기 때문에 public static final 키워드 생략가능
하나의 클래스가 여러개의 인터페이스를 구현 할 수 있다.
interface I1{
public void x();
}
interface I2{
public void z();
}
class A implements I1, I2{
public void x(){}
public void z(){}
}
interface I3{
public void x();
}
interface I4 extends I3{
public void z();
}
class B implements I4{
public void x(){}
public void z(){}
}
인터페이스와 추상 클래스는 서로 비슷한 듯 다른 기능이다. 인터페이스는 클래스가 아닌 인터페이스라는 고유한 형태를 가지고 있는 반면 추상 클래스는 일반적인 클래스다. 또 인터페이스는 구체적인 로직이나 상태를 가지고 있을 수 없고, 추상 클래스는 구체적인 로직이나 상태를 가지고 있을 수 있다.
( 출처 생활코딩 https://www.opentutorials.org/course/1194/6063 )