본문 바로가기

Programming/자바

생활코딩 자바 - 인터페이스

문법, 개념

 

abstract, final과 함께 대표적인 규제

객체가 특정 인터페이스 사용하는 경우 반드시 인터페이스의 메소드들 구현해야 함 (인터페이스가 강제하는 메소드 구현하지 않으면 컴파일도 안됨)

 

  •  

interface I {
public void z();
}

class A implements I {
public void z() {}    => 인터페이스 구현함
}

 

 

실질적 쓰임

 

 

인터페이스 필요한 사례


  • 개발자 B : 더미클래스 생성 (A가 Calculator 클래스 작업 중, B가 해당 클래스 사용하는 로직 만듦)
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());
}
}

 

  • 개발자 A : Calculator 클래스 (위 더미클래스와 setOprands 입력값 수 불일치)
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();
}

 

  • 개발자 B : 인터페이스 적용된 더미클래스
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());
}
}

 

  • 개발자 A : 인터페이스 적용된 Calculator 클래스
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;
}
}

 

  • 개발자 A, B : 더미 제거 후 Calculator 실행
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());
}
}

 

 

규칙들

 

인터페이스 : 시스템 제어하기 위한 장치

반드시 public 접근제어자 사용 (생략해도 default가 아닌 public이 됨)

 

 

  • 한 클래스에서 여러 인터페이스 구현 가능
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(){}

 

 

abstract vs interface 차이

 

abstract 는 일반적 클래스 / 구체적 로직, 상태 갖기 가능

interface 는 본체가 없는 메소드만 가짐

 

 

 

 

'Programming > 자바' 카테고리의 다른 글

생활코딩 자바 - 예외  (0) 2022.04.12
생활코딩 자바 - 다형성  (0) 2022.04.08
생활코딩 자바 - final  (0) 2022.04.08
생활코딩 자바 - abstract  (0) 2022.04.08
생활코딩 자바 - 접근제어자  (0) 2022.04.07