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

Udemy/Ts/section5/72: interface #47

Open
wants to merge 55 commits into
base: UdemyTs
Choose a base branch
from
Open

Udemy/Ts/section5/72: interface #47

wants to merge 55 commits into from

Conversation

4BFC
Copy link
Member

@4BFC 4BFC commented Sep 24, 2024

✍Udemy/Ts/section5/72: interface

본 PR은 청강 1회독을 마친 후 N회독으로 작성된 PR입니다.

🔗Reference

🔥KeyWord

  • interface
  • abstract

아래부터는 브런치 Extra 파트에서 따로 pr을 작성할 예정입니다.

  • compiler
  • run time
  • jsdoc
  • prop-types-ts(io-ts)

📝Description

  • interface란
    • interface란 객체의 구조를 정의한다. interface는 대문자로 정의를 해야한다. 좀 더 구체적으로 말하자면 interface는 객체의 구조를 정의하는 계약(형식)을 나타낸다. 객체가 어떤 속성이나 메서드를 가져야 하는지를 명세하는 용도로 사용되며 interface 자체는 구현을 포함하지 않는다. 그래서 interface 내부에서 객체를 정의하거나 할당할 수 없다. 함수 또한 구체적인 동작을 정의하지는 않는다. 즉, 구현 세부 사항 없이 특정 타입을 설명하는 데 사용된다.
  • abstract와 interface의 차이
    • abstract란
      • js에서 class의 abstract는 일반 클래스처럼 동작하지만 하나 이상의 추상 메서드(구현이 없는 메서드)를 가질 수 있다. 또한 일부 메서드를 구현할 수 있다. 클래스의 청사진을 제공하며 이를 상속하는 하위 클래스가 추상 메서드를 반드시 구현하도록 강제한다.
    • 이 둘의 차이는?
      • abstract는 class에서 사용된다. type을 정의하는 개념인 interface와는 쓰임이 전혀 다르다. 쉽게 설명하자면 abstract는 클래스에서 사용되고 클래스에서 클래스로 즉, 청사진에서 청사진으로 상속(extends)를 받아 사용한다. 반대로 interface는 필요 객체(필드)들을 정의하는 명세서(요구사항)와 같은 역할이다. 따라 이 둘은 동일하게 필요 조건들을 강행할 수 있지만 사용하기 위한 환경 조건이 클래스이냐 type객체 이냐의 차이이다. interface보다 정의 강행성이 있다. 즉, abstract는 청사진이기 때문에 모든 abstract의 전역변수, 함수들은 상속받은 자식들에게 필히 모든 요소들을 사용해야만 한다. 하지만 interface는 이와 달리 각 클래스가 어떻게 구현할지 상관하지 않을 때 사용된다. 그래서 강행성은 abstract처럼 있지는 않다. 정리하자면 abstract 클래스는 구현된 메서드와 구현되지 않은 메서드를 모두 가질 수 있지만, 인터페이스는 구현을 가질 수 없다. abstract 클래스는 상속을 통해 동작을 공유하며 다중 상속이 불가능하지만 interface는 다중 구현이 가능하다. 추상 클래스는 **상태(필드, 전역 변수, 함수)**를 가질 수 있지만 interface는 상태를 가질 수 없다. abstract 클래스는 클래스 간 상속 관계를 강제할 때 사용되며, interface는 구현의 구조를 강제하는 데 사용된다.

아래부터는 브런치 Extra 파트에서 따로 pr을 작성할 예정입니다. #55

  • jsdoc와 prop-types-ts(io-ts)와의 결합
    • 리액트와 prop-types-ts(io-ts) 그리고 ts와의 결합
  • compiler와 run time의 차이

📌Summary

  • interface와 abstract는 사용 "방식"이 유사할 뿐 구조와 내부 동작 방식은 전혀 다르며 쓰임의 취지 또한 다르다. 따라서 Ts 기준으로 함수형 프로그래밍(FP)으로 프로젝트를 진행하기 때문에 현재는 abstract를 크게 신경쓰지 않아도 된다. 물론 추후에 특정 상황과 이슈에 따라서 클래스형을 사용할 수 있기 때문에 어느정도 눈에 익혀두는걸 추천한다.
  • section5-Extra/N #55

4BFC and others added 30 commits August 27, 2024 01:50
Github에서 수정한 커밋입니다.
Github에서 수정한 커밋입니다.
Github에서 수정한 커밋입니다.
Github에서 수정한 커밋입니다.
Github에서 수정한 커밋입니다.
Github에서 수정한 커밋입니다.
Github에서 수정한 커밋입니다.
Github에서 수정한 커밋입니다.
Github에서 수정한 커밋입니다.
Github에서 수정한 커밋입니다.
Github에서 수정한 커밋입니다.
Github에서 수정한 커밋입니다.
Github에서 수정한 커밋입니다.
Github에서 수정한 커밋입니다.
Github에서 수정한 커밋입니다.
Github에서 작성한 커밋입니다.
Github에서 작성한 커밋입니다.
Github에서 수정한 커밋입니다.
Github에서 수정한 커밋입니다.
@4BFC 4BFC added the 2회독 회독 label Sep 24, 2024
@4BFC 4BFC added this to the Udemy:TypeScript milestone Sep 24, 2024
@4BFC 4BFC self-assigned this Sep 24, 2024
@4BFC 4BFC changed the title Udemy/ㅆs/section5/72: interface Udemy/Ts/section5/72: interface Sep 24, 2024
@4BFC 4BFC requested a review from nyun-nye September 24, 2024 08:37
@4BFC 4BFC changed the base branch from main to UdemyTs September 24, 2024 08:38
@4BFC
Copy link
Member Author

4BFC commented Sep 25, 2024

👀한줄 요약

interface

  • 인터페이스는 클래스가 구현해야 할 구조를 명확히 강제한다. 즉, 인터페이스에 정의된 모든 속성과 메서드는 반드시 클래스에서 구현해야 한다. 인터페이스의 목적은 클래스가 특정 구조와 타입을 따르도록 강제하는 것이며, 구현을 포함하지 않기 때문에 클래스가 해당 메서드들을 반드시 구현해야 한다.
    • 강제성 요약 (인터페이스):
      • 인터페이스에 정의된 모든 필드와 메서드는 구현해야 한다.
      • 구현은 없으며, 구조만 명시하고 그 구현은 클래스가 담당한다.
      • 다중 구현이 가능하기 때문에 여러 인터페이스를 동시에 구현할 수 있다.

abstract

  • 추상 클래스는 일부 구현을 포함할 수 있지만, 추상 메서드는 반드시 하위 클래스에서 구현해야 한다. 추상 클래스는 구체적인 메서드(구현된 메서드)와 추상 메서드(구현되지 않은 메서드)를 함께 가질 수 있다. 하위 클래스는 추상 클래스에서 구현되지 않은 추상 메서드를 반드시 구현해야 하며 그렇지 않으면 컴파일 에러가 발생한다.
    • 강제성 요약 (추상 클래스):
      • 추상 메서드는 반드시 하위 클래스에서 구현해야 한다.
      • 구현된 메서드는 그대로 사용하거나, 필요한 경우 오버라이드할 수 있다.
      • 추상 클래스는 단일 상속만 가능하며, 객체 지향적인 설계에서 공통된 동작을 상속받아 재사용하는 데 적합하다.

@4BFC 4BFC mentioned this pull request Sep 25, 2024
2 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
2회독 회독
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant