- Class (객체 지향 프로그래밍)
2. Interface <--------
- Generic
Interface
는 타입 체크를 위해 사용되는 문법임. 구현되지 않고, 상속되지도 않음.
Interface를 사용하는 경우
1. 객체의 구조를 정의할 때
2. 함수의 타입을 정의할 때
3. 클래스의 타입을 정의할 때
4. 다른 인터페이스나 타입을 확장(extend)할 때
실행 스크린샷으로 간단히 알아보자.
이와 같이 객체/함수의 구조를 정의해주는 데 사용할 수 있다.
또한, interface도
extends
명령어를 사용하여 상속/확장이 가능하다.
사용 해도 되고 안 해도 되는 property 이다.
예제를 하나 보고 가도록 하자.이와 같이 interface에 정의된 값을 상속하지 않으면 즉시 error가 발생한다.
하지만 다음과 같이 age를 optional properties로 선언해 준다면 error가 발생하지 않는다.
옵션을 선택적으로 적용할 수 있고,
인터페이스에 정의되지 않은 속성에 대해 인지시켜줄 수 있다는 장점이 있다.
처음 생성될때만 선언 가능하고, 이후 수정이 불가능한 property이다.
이번에도 예제를 보자.
interface
에서x, y
를readonly
로 선언하였기 때문에,
최초 선언 시에는0, 0
으로 선언 가능하다.하지만 이후에 값을 수정하려고 하면 불가능하다!
마치 JavaScript의const
로 선언된 변수와 비슷하다고 생각하면 될 것 같다.처음 생성될 때만 선언 가능하고 이후 수정이 불가능하다.
인터페이스에서 정의하지 않은 속성들을 추가로 사용하고 싶을 때 사용 가능한 방법이다.
간단히 사용법만 체크하고 넘어가겠다.interface에서 엄밀하게 정의한 property는 name 뿐이지만,
gomao 객체에서 age, favorite property에 error가 발생하지 않는다.그런데 솔직히 지금 드는 생각.
이럴거면
interface
를 왜 쓰는거지?ㅋㅋ가급적이면 안 쓰는게 좋지 않을까 생각이 된다.
서두에 정리 하였지만,
Object/function/calss
의 형태를 정의할 때 사용하고 그 외에도
Index Interface
,Hybrid Interface
를 정의할 때 사용한다.
Object Interface
지금까지 다룬 내용이 모두 객체 인터페이스에 대한 내용이다. 넘어간다.
Function Interface
함수 인자의 타입과 반환값의 타입을 정의할 때 사용한다.
Class Interface
클래스 타입의 인터페이스를 구현할 때 사용한다. 이 때implements
키워드를 사용한다.
implements
키워드를 사용해서 interface에 종속시킨다는 개념으로 이해하면 될것 같다.
Index Interface
객체 타입의key
,value
값의 타입을 구현할 때 사용한다.선언 방법이 살짝 다름에 주의해야 한다.
class interface
는class Cutehane
implements Gomao
를 사용하고
index interface
는let cutehane
: Gomao
를 사용한다.
Hybrid Interface
객체 인터페이스와 함수 인터페이스의 특징을 모두 갖는다.
객체의property/method
, 함수의parameter/return
값의 타입을 모두 강제한다.
Generic....? 이거 지금 하는 거 맞나?!?! ㅋㅋㅋ