inflearn logo
강의

Course

Instructor

All About TypeScript

Generic + extends

하나의 인터페이스와 여러 버전의 클래스에 관한 질문

413

Docker

6 asked

0

안녕하세요 :)

예제에서 하나의 인터페이스로 설계하고 해당 인터페이스의 구현체를 여러 버전으로 만드셨는데 궁금한 점이 있습니다.

만일 신규 버전을 생성할 때 인터페이스도 변경되면 기존 버전의 구현체들은 인터페이스와 불일치하여 오류 표시가 나는데, 오류가 나는 구버전 구현체들은 어떻게 처리를 해야할지 잘 모르겠습니다 ㅠㅠ..!

우선 아래 사진과 같이 임시로 인터페이스에 맞게 구현하여 오류를 없애봤지만, 버전이 변경될 때마다 불필요한 리소스를 잡아먹는 작업인 것 같아 옳지는 않은 방향인 것 같아 질문드려요!

typescript

Answer 1

1

yongsoocho

버전이 변경될 때마다 불필요한 리소스를 잡아먹는 작업인 것 같아 옳지는 않은 방향인 것 같아 질문드려요!
-> 저도 예전에 똑같은 생각을 갖고 있었습니다. 왜 클래스를 그냥 구현하면 되지 귀찮게 인터페이스를 두지..? 라는 생각이였습니다.

일단 이 개념은 컴퓨터공학과(혹은 소프트웨어공학과)에서 배우는 "소프트웨어공학", "객체지향 설계" 등의 과목 중 일부입니다.

A 클래스가 B 클래스를 호출한다고 할 때 인터페이스를 통하여 호출하면 B 클래스가 어떻게 생겼는지 안이 어떻게 구현되어있는지 모르지만 정상적으로 호출하고 실행이 됩니다. 여기서 객체지향 설계의 은닉화, 캡슐화 등 여러 개념을 같이 배우게 되는데요. 사실 매우 거대한 개념이고 하나의 강의로 풀어낼 개념은 아닙니다. (파고들면 정말 밑도 끝도 없습니다.)

 

정리를 하자면

  1. 인터페이스는 설계도 같은 것 입니다. 웬만해서 크게 변하지 않습니다. 하지만 인터페이스를 꼭 만들어라!!! 는 아닙니다. 100층 짜리 고층 건물을 설계할 때는 설계도가 필요하지만, 작은 모래성을 쌓는데 설계도가 필요하지는 않습니다.

  2. A클래스가 -> B클래스(타켓 클래스)를 호출하는데 인터페이스를 통해서 호출하면 A 클래스는 B 클래스가 어떤 구현을 갖고있는지 모르지만 파라미터와 리턴타입 정보만 갖고 호출하고 사용할 수 있습니다. B클래스가 은닉성을 갖으면서 A-B 커플링(객체지향설계에서는 클래스간 의존도를 낮춰야합니다..!)이 낮아지게 됩니다.

 

지금은 굉장히 비효율적으로 느끼실 수 있는데, 애초에 대규모 애플리케이션에서 많이 쓰는 형태입니다.

0

Docker

넵 감사합니다 !

제네릭 클래스 핸드북 페이지가 undefined라고 나옵니다.

0

7

1

타입 주석

0

48

1

BuilderInit 사용 이유

0

409

1

ts-node extends시 에러가 발생합니다 ㅠㅠ

0

836

1

데코레이터-2 강의 질문이 있습니다.

0

284

1

enum 질문이 있습니다.

0

330

1

색션 2, 데코레이터 개념이 아예 이해가 안됩니다.

0

539

1

변수의 타입에 클래스를 지정해준 것과 지정 안한 것 과의 차이가 어떻게 되는지 궁금해서 질문을 남깁니다.

0

369

2

섹션4 예제0 질문입니다.

0

719

2

제네릭 extends관련질문 있습니다.

0

367

1

안녕하세요 정말 좋은 강의 감사합니다

0

381

1

!과 타입 단언 (보충) 질문

0

404

1

화살표 함수에서 this

0

434

1

constructor질문

0

262

1

타입 단언과 관련해서 질문드립니다.

0

651

1

extends와 implements질문 드립니다.

0

302

1

질문 드립니다.

0

375

2

as와 변수의 타입 지정 차이

0

353

1

undefined형식 에러

0

398

1

질문드립니다.

0

264

1

리터럴 타입 질문드립니다.

0

333

1

변수들이 var로 변합니다.

0

528

1

코딩 초보

0

462

1

service계층과 데이터베이스 요청 주고받을 때 Builder패턴 질문

0

1760

1