210203_JAVA_인터페이스

정재현·2021년 2월 3일
0

TIL

목록 보기
64/80

오늘은 인터페이스 예제 코드를 진행한다.
github: https://github.com/jeong-jaehyeon/JavaProject/blob/javaExercise/src/PrinterDriver.java

'인터페이스'의 사전적 의미는 '연결점/접점'으로 둘 사이를 연결하는 매개체를 뜻한다.
그리고 실제로 자바에서도 그런 역할을 한다.

위의 소스코드를 기반으로 간단하게 설명을 남겨본다.
"마이크로소프트의 윈도우는 삼성과 LG의 프린터를 대상으로 출력을 진행할 수 있다."
이렇게 모든 업체의 프린터가 윈도우와 연결될 수 있는 이유를 자바로 설명하는 코드다.
(뭐 그렇게 긴 코드도 아니고 특별한 점은 없는데 간략하고 정확하게 인터페이스를 설명해낸 코드같다.)

프린터의 업체가 한 둘이 아니기 때문에 마이크로소프트는 다음과 같은 결정을 내린다.
"인터페이스를 하나 만들어서 모든 프린터 업체에게 제공하게 하겠다."

그래서 코드 첫줄에 있는 interface Printable과 안에 print 메소드를 만든다.
이 코드에는 다음과 같은 의미가 담겨있다.

"이 인터페이스를 회사별로 각자 구현해서 가져오기 바랍니다. 그러면 저희는 print 메소드를 호출하면서 출력할 문서의 정보를 인자로 전달하겠습니다. (doc)"

따라서 마이크로소프트의 윈도우를 사용하려면 삼성과 LG는 이 인터페이스를 구현하면서 print 메소드를 완성하는것이 옳다.
그래서 SamsungPrinterDriver class와 LGPrinterDriver class가 만들어지게 된다.
여기서 중요한 점 하나는,
마이크로소프트는 위의 클래스 이름을 알면 될 뿐 내부적으로 구현이 어떻게 이뤄지는지는
알 필요가 없다는 것! 그리고 이것이 인터페이스를 두는 이유이다. (아직은 정확히 파악안된다.;; 알아도되지않나)

그리고 인터페이스에 존재할 수 있는 메소드에는

  • 추상 메소드
  • 디폴트 메소드
  • static 메소드
    가 있다.
    또한 인터페이스 간 상속도 가능하며(복잡해지겠다;;) 인터페이스의 형 이름을 대상으로 instanceof 연산을 할 수도 있다.
interface Printable {
int PAPER_WIDTH = 70;
    int PAPER_HEIGHT = 120;
    void print(String doc);
}

이렇게 인터페이스 내에 선언되는 변수에는 다음과 같은 특징이 적용된다.

  • 반드시 선언과 동시에 값으로 초기화를 해야한다.
  • 모든 변수는 public, static, final이 선언된 것으로 간주된다

결론적으로 말하면 인터페이스 내에 선언된 변수는 상수이다.
final로 그리고 static으로 자동 선언이 되니, 다음과 같이 접근이 가능한 상수가 된다.

sout(Printable.PAPER_WIDTH); // 인터페이스 내에 위치한 상수의 접근

그리고 마지막으로 인터페이스를 구현하는 클래스는 인터페이스에 존재하는 모든 "추상 메소드"를
구현해야 한다.
하나라도 구현하지 않으면, 해당 클래스를 대상으로는 인스턴스 생성이 불가능하다. (당연함)

내일부터는 인터페이스 간 상속,디폴트 메소드, static 메소드, instanceof 연산을 쭉쭉 알아보겠다.

오늘의 코멘트: 이번주 토요일에 라섹수술을 해서 아마 토요일부터 며칠간은 TIL을 진행하지 못할텐데.. 흠..

profile
"돈받고 일하면 프로다"

0개의 댓글