yeonee3219 2021. 4. 12. 13:14

 

다형성 (다양한 형식을 갖는)

 - 절차의 일부분을 분리할 수 있다 -> 인터페이스가 필요하다

 - 일부 절차의 분리와 도킹

 

 

 

 

 

 

저번시간 (8일)에

implements Banner했었는데

이렇게 하면 제대로 출력되지 않는다

 

 

왜??

 

 

ExamConsole 클래스에 print함수가 있는데 그것을 재정의 해버린 것 

-> 배너 아래에 있는 것들이 재정의되어 없어져버린 것이다

 

 

 

 

 

클래스 안에 클래스를 새로 만들 수 있다

 

 

클래스를 새로 만들고 Banner클래스를 implements 하였다

 

 

이상태는 정상

 

 

 

 

 

클래스를 새로 만들었으니  XXX클래스 객체 새로 생성해야하는데 

아래의 두가지 방법이 있다

 

 

 

 

내부 클래스 객체 생성은 모양이 조금 다르다

 

 

 

 

 

 

 

 

메인함수에서 배너를 출력해줄 필요 없이 console 객체 생성하면 배너출력될 수 있도록

YBMExamConsole생성자에 옮겨주었다

 

 

 

 

 

 

내부 클래스에는 두개의 this가 있다

 

오른쪽 처럼 this를 사용하게 되면 XXX안의 a 가 아닌 바깥 YBMExamConsole의 a를 찾게 된다

 

 

 

 

단순하게 인터페이스 구현하는 클래스를

아무 이름으로 쓰는 것도 문제 / 이름을 명명해주는 것도 문제.../ 멤버늘어나는 것도 문제

 

 

-> 클래스 명을 정하지 말자 

 

-> 배너를 셋팅하기 위한 클래스를 굳이 생성하지 말고 -> 클래스 명을 거론하지 말자 -> setBanner해버려

-> 메서드 속 클래스 구현

 

 

메서드속의 클래스 ->이게 가능하네

저 함수를 호출할 때 한번만 생성되었다가 없어지는 친구이다

 

 

 

클래스를 이렇게도 정의할 수 있다

무명의 클래스 정의하는 법..

 

 

 

이름 없이 이렇게 정의해줄 수 있다

 

 

인터페이스는 약속된 함수를 정의하는 것이 중요하지 새로운 클래스를 만드는 것이 중요하지 않기 때문에

아무곳에서나 구현만 되면 된다  -> 중첩 클래스도 되고.. 함수속 클래스도 가능하고...

 

 

 

 

 

 

 

 

자 다시 정리

 

*

인터페이스 : 사물 또는 공간을 이어주는 접점

자바 인터페이스 : 객체와 객체를 이어주는 접점

 

인터페이스를 통해서 정의하고 구현하고 사용하는 절차가 접합이 되면? -> 다형성이 발생

 

 

 

일부 절차가 인터페이스로 정의된다?

 

A 클래스가 인터페이스를 정의하였다 (이게 무슨 이름인지는 알필요도 /관심도 없다)

 

인터페이스를 구현하는 방법 4가지를 배웠다

1. 외부클래스로 구현(implements)

2. 내부클래스로 구현

3. 메소드 내의 중첩 클래스로 구현

4. 익명 클래스로 구현

 

5. 람다식을 이용한 구현 -> 나중에 설명