- 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....? 이거 지금 하는 거 맞나?!?! ㅋㅋㅋ