JAVA

자바-인터페이스

으노방 2020. 8. 29. 22:02

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