210202_JAVA_인터페이스

정재현·2021년 2월 2일
0

TIL

목록 보기
63/80

하.. 오늘은 어제 못끝낸 업무의 연장선이랄까..
여러번 얘기하긴 했지만 내가 지금 프로젝트를 하나 맡아서 진행하고 있는데.
아직 실력이 미숙하다보니 간단한 문제라도 싹- 진행을 못하는 것 같다.
여태껏 그래왔지만 어느 한 포인트에서 진척이 없으면 그 날 남은 하루는 좀 ... ;ㅅ; <- (눈물흘리는 거 좀 귀엽다.)

이렇게 한 포인트에 빠지는게 한 두번 있는 일은 아니지만 그래도
그 날 하루에 진척이 없다거나 했던 작업을 롤백한다거나 그런 일이 있으면... ;ㅅ;
web쪽인데 javascript로만 구현해야 하는 부분이 있어서 html, css로 구현했으면 진작했을 부분인데
좀 아쉽긴하다. 내일은 그렇게 빼서 구현해보는걸로 진행해봐야겠다.
뭔가 업무에 아쉬움이 남아 주저리주저리 해봤다.


오늘은 새로운 17 챕터에 들어가며 인터페이스와 추상클래스의 챕터이다.

추상 메소드만 담고 있는 인터페이스의 예시는,

interface Printable {
	public void print(String doc); // 추상 메소드
}

위에서 보이듯이 메소드의 몸체가 비어 있는 메소드를 가리켜 '추상 메소드'라고 한다.
이 인터페이스를 대상으로는 인스턴스 생성이 불가능하다.
다른 클래스에 의해 다음과 같이 '상속'될 뿐이다.

class Printer implements Printable {
	public void print(String doc) { // Printable 인터페이스의 print 메소드 구현
    	sout(doc);
    }
}

클래스가 인터페이스를 상속하는 행위는 '상속' 이 아니라 '구현'(Implementation)이라고 한다.
문법 관계는 상속과 동일하지만 본질은 '구현'이기 때문이라고 한다.
위의 경우에도 Printer 클래스가 Printable 인터페이스가 갖고 있는 메소드 print의 몸체를 구현하였다.
인터페이스의 특징은

  • 구현할 인터페이스를 명시할 때 키워드 implements를 사용한다.
  • 한 클래스는 둘 이상의 인터페이스를 동시에 구현할 수 있다.
  • 상속과 구현은 동시에 가능하다.
    (내일은 상속과 구현의 차이점에 대해서 더 알아볼 예정이다. 예전부터 헷갈렸다;;)

그러니깐

class Robot extends Machin implements Movable, Runnable {...}

이런식으로 사용이 가능한것!
그리고 또 추가로 2가지 특징을 기억해야하는데~

  • 인터페이스의 형을 대상으로 참조변수의 선언이 가능하다.
  • 인터페이스의 추상 메소드와 이를 구현하는 메소드 사이에 오버라이딩 관계가 성립한다.
    -> 따라서 어노테이션 @Override의 선언이 가능하다.

말만 들어서는 좀 복잡하다고 느껴질 수 있지만,
여태까지 해왔던 내용들이다.
예시를 들어준다면~

Printable prn = new Printer(); // Printable형 참조변수 선언 가능.

첫번째는 이렇게 될 것이고,
두번째는 당연한거지! 인터페이스의 추상 메소드와 이를 구현하는 메소드 사이에는 오버라이딩 관계가
성립하겠지 당연히, 그러면 어제 알아본 @Override 선언이 가능해지는거지.

이쯤되면 슬슬 헷갈릴 때가 되었는데 ㅋㅋㅋ 난 왜 항상 헷갈리는지 모르겠지만,
단어가 비슷해서 둘이 헷갈린다.

오버로딩(Overloading) : 같은 이름의 메소드를 여러 개 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술.

오버라이딩(Overriding) : 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의 해서 상요한다.

다시 한번 상기시키고 넘어가자!
그리고 위에도 적어놨지만 상속과 구현의 차이점에 대해서도 하루 잡고 해봐야겠다.
할게 많구나..
=> 리뷰도 해야하고, 상속/구현 차이점.

바로 내일하면 좋겠지만 내일은 오늘 설명한 내용을 하나의 예제에 담아서 살펴보는 시간을 가질 것이다.
미리봤지만 참 쉽고 좋게 설명해놓은 코드라고 생각했다.

오늘의 코멘트: 할 게 많으면 좋지 뭐~

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

0개의 댓글