Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Coding devil/3 : interface #5

Open
wants to merge 14 commits into
base: recently
Choose a base branch
from
Open

Coding devil/3 : interface #5

wants to merge 14 commits into from

Conversation

nyun-nye
Copy link
Collaborator

@nyun-nye nyun-nye commented Sep 26, 2024

✍ Coding devil/3 : interface

📝Description

  • optional, readonly

    • interface에서 프로퍼티를 ?를 사용해서 optional 속성을 부여했다.
    • interface에서 프로퍼티를 readony를 사용해서 읽기 전용 속성을 부여했다.
         interface User{
           name : string;
           age : number;
           gender? : string; // => optional
           readonly birthYear : number; // => readonly
         }
  • 인덱스 시그니처

    • [key: type]: valueType;
    • 객체의 속성을 유연하게 정의할 수 있게 해준다.
    • 여러 개의 값을 받을 수 있는 구조를 만들어준다.
  • 인덱스 시그니처는 optional인가?

    • TypeScript는 인덱스 시그니처에 ?를 추가할 수 있는 기능을 제공하지 않는다.
    • 그 이유는 인덱스 시그니처 자체가 이미 속성이 선택적이라는 의미를 내포하고 있기 때문이다.
  • interface로 함수 선언

        interface Add{
          (num1:number, num2:number): number; // (파라미터) : (return 타입)
        }
        const add : Add = function(x,y){
          return x+y;
        }
  • implements

    • interface로 클래스를 정의할 때 사용된다.
  • extends

    • 클래스나 인터페이스에서 extends 키워드를 사용해서 클래스나 인터페이스의 속성과 메소드를 상속한다.
    • 다중 상속을 받을 수도 있다.

📌Summary

  • optional 속성은 ?를 사용해서 선택적으로 정의할 수 있다.
  • readonly 속성은 값을 수정하지 못하게 한다.
  • 인덱스 시그니처는 [key: type]: valueType; 형식으로 정의할 수 있으며 여러 개의 속성을 가질 수 있다.
  • implements는 클래스가 인터페이스를 구현할 때 사용되어, 인터페이스의 구조를 따르게 한다.
  • extends는 상속받을 때 사용한다. (다중 상속도 가능하다.)
  • interface를 활용하면 코드의 유연성, 타입 안전성, 명확한 설계를 제공할 수 있다.
  • 아직 확 와닿진 않는데 1회독하고 실습하면서 더 연습해보면 interface를 사용하는 의도를 이해할 수 있을 것 같다.

@4BFC
Copy link
Collaborator

4BFC commented Oct 2, 2024

@nyun-nye 참고하시면 좋을 듯 합니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants