꾸물꾸물 졔의 개발공부
01/24(2) - 인터페이스 본문
인터페이스 : 두개의 어떤 사이드 측면을 연결해주는것 !
ex ) GUI ( 사용자 인터페이스 ) = 사용자와 프로그램을 연결해주는 접점
사용자 ------------------------------------------------------ 이클립스 [ 저장 ]- 저장이 어떻게 되는지 ? - 사용자가 눌러주겠지?- 어떤 순서대로 되는지 ? - 그럼 난 저장만 해야지 관심없음 -> 구현부에 관심 -> 저장을 누르면 , 저장되겠지 ? 만 관심선언부만 관심 !!
public abstract boolean save() ; @Override
public boolean save() {
// 구현 }
< 인터페이스 작성 >
클래스와 비슷하게 작성함 !
public Interface 인터페이스_이름 { }
- 인터페이스는 모든 멤버 메서드가 추상메서드 abstract 인 상태
- 멤버 변수는 public static final 의 형태
- 멤버 메서드는 public abstract 의 형태
( + public 이기 때문에, 이를 재정의 하는 메서드는 같거나 더 넓은 접근제한자만 가능하므로 , 무조건 public )
< 인터페이스의 다중 상속 > vs 클래스의 단일상속
-클래스는 단일 상속만 가능하다 ,
: 두개 이상의 클래스로부터 상속받았을 때, 각각의 클래스의 같은 메서드가 중복되면 문제가 되기 때문이다
but,
-인터페이스는, 메서드의 선언만 되어있을 뿐, 구체적인 정의는 되어있지 않다 .
--> 즉, 선언부는 같아도 겹쳤을 때, 문제되지 않기 때문에 다중상속이 가능하다 .!!
< 인터페이스의 구현 >
클래스 implements 인터페이스 'implements' 키워드를 사용하여, 클래스 내에서 구현
- 인터페이스의 모든 메서드는 abstract, 즉 추상메서드이기 때문에, 이를 구현하는 클래스 내에서는 모든 메서드를 재정의 해주어야 한다 / 또는 abstract 클래스가 되던가 ~
+ 하나의 클래스에서 여러개의 인터페이스 구현이 가능하다
ex) public class Car implements myCar, yourCar ( , 쉼표를 활용하여 여러개 구현 가능 )
그렇다면, 왜 인터페이스를 사용할까 ?
1) abstract 를 통해 --> 구현의 강제화를 높여줌 : 실수를 막아준다 !!
abstract 즉, 추상화를 사용하게 되면, 어디에선가는 그것을 재정의 하여야 컴파일이 성공적으로 된다.
그렇기 때문에, 재정의를 하지 않아서 발생하는 오류나 실수를 방지할 수 있음
2) 인터페이스가 개입함으로써 모듈간의 이동 편리 ( 구구절절 프린트 예시 읽어보면서 이해하기 )
class PrintClient() 에서, Printer 라는 '인터페이스'를 참조하여 객체를 생성한다고 가정해보자,
Printer 인터페이스는, LaserPrinter 클래스와 / DotPrinter 클래스에서 구현한다고 가정해보자.
어떤 사용자가 LaserPrinter를 사용하다가, DotPrinter로 변경한다고 생각했을 때,
인터페이스 내에는 함수의 선언부만 구현이 되어있기 때문에, Printer 인터페이스와, PrintClient 클래스에서는 아무런 변화를 줄 필요가 없다 .!!
즉, 두개의 클래스 다시말해 두개의 모듈을 , 다른 인터페이스와 클라이언트 클래스를 건들지 않은채로 쉽게 이동할 수 있는 것이다.
3) 서로 상속관계가 없는 클래스들에게, 인터페이스를 구현함으로써 관계를 부여하고 다형성을 확장 가능
최상위 Object 클래스 를 상속받고 있는 클래스들이 , 공통으로 연관된 부분이 있는데 , 공통 클래스를 상속하고 있지 않다면, 그들은 Object 클래스를 통해 접근한 후, instaceOf 를 사용하며, 각각이 어디에 포함되어 있는지 일일이 확인해가며 메서드를 실행시켜야한다.
하지만 공통으로 연관된 부분을 가지고 하나의 공통 인터페이스를 구현한다면, 인터페이스에 접근함으로써, 더욱더 간단하게 상속받을 수 있고 다형성 또한 확장시킬 수 있는 것이다.
ex) phone <-- handphone / camera <-- digitalcamera 간의 공통점이 chargeable 하다는 것을 인터페이스로
4) 각각의 기능에 대해서, 필요한 부분만 독립적으로 실행이 가능하여, 시간 단축이 가능함
인터페이스의 public abstract 이외의 ( +default method / static method
< default method > : 인터페이스 내에 있긴 한데, 다른 것과 달리 ' 구현부를 가지고 있는 ' 메서드
기존의 인터페이스 메서드들은 묵시적으로 public abstract 였지만, 앞에 default 로 선언이 되어있다면, default method!
--> 이로써 , 인터페이스 내의 그 많은 함수들을 모두 다 재정의 할 필요는 없음
하지만, 인터페이스의 특징 중 클래스와 구분되는 다중 상속은, 메서드가 구현되어 있지 않기에 가능한 것이였는데 ....
--> 충돌이 생기면 우선순위는 , 인터페이스의 default method 보다는, super class 가 더 우선시 되야함
--> 클래스와 인터페이스가 아닌, 인터페이스 끼리 충돌하게되면, 디폴트 인터페이스 내의 메서드는 사용하면 안되고 !!!!! ** 무조건 새로 재정의 해서 사용해야함
< static method > : 객체가 필요하지 않고, 바로 인터페이스 이름으로 접근이 가능하다 .
ex_ 인터페이스명 . static_method
'SSAFY' 카테고리의 다른 글
01/25(1) - 예외처리 (0) | 2022.01.29 |
---|---|
01/24(2) - Generics < 타입 명시 > (0) | 2022.01.25 |
01/24(1) - 추상클래스 (0) | 2022.01.24 |
01/20(4) - 다형성 (0) | 2022.01.21 |
01/20(1) - 상속 (0) | 2022.01.21 |