인프런 커뮤니티 질문&답변

Docker님의 프로필 이미지
Docker

작성한 질문수

타입스크립트의 모든 것

제네릭 + extends

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

작성

·

281

0

안녕하세요 :)

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

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

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

답변 1

1

yongsoocho님의 프로필 이미지
yongsoocho
지식공유자

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

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

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

 

정리를 하자면

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

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

 

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

Docker님의 프로필 이미지
Docker
질문자

넵 감사합니다 !

Docker님의 프로필 이미지
Docker

작성한 질문수

질문하기