• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

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

23.05.19 19:54 작성 23.05.19 20:12 수정 조회수 426

0

스크린샷 2023-05-19 오후 7.48.32.png

강의를 다 보고 나서 의문점이 들어서 질문 드립니다.

강의에서 value 값을 출력하기 위해서

인터페이스를 만들고 as랑 제네릭을 활용하는 법을 알려주셨는데

제 생각에는 인터페이스를 만들었으니까

example의 타입으로 인터페이스를 주면 되지 않을까 했습니다.

해봤더니 에러가 안 나고 출력도 잘 되더라고요

저한테는 인터페이스를 타입으로 주는 것이 더 간편하게 느껴지는데

object를 타입으로 주는 것이 더 실무에 적합한 방식인 건가요?

어떤 차이점이 있을까요?

 

스크린샷 2023-05-19 오후 8.11.57.png

그리고 제네릭을 식별자 뒤에 쓰면 인수와 관련된 것 같은데

식별자 앞에 제네릭을 쓰면 어떤 의미인가요?

답변 1

답변을 작성해보세요.

1

  1. example의 타입으로 인터페이스를 주면 되지 않을까 했습니다.

    해봤더니 에러가 안 나고 출력도 잘 되더라고요

    저한테는 인터페이스를 타입으로 주는 것이 더 간편하게 느껴지는데

    object를 타입으로 주는 것이 더 실무에 적합한 방식인 건가요?

    답: 당연히도 타입을 알맞게 달아주는 것이 맞습니다. object는 제가 예시를 들기위해서 저렇게 단 것 뿐입니다. 보통 저런 상황들은 규모가 있는 애플리케이션에서 발생합니다.

    서버1 <-> 서버2 <-> 서버3
    서버1 <-> 서버2 <-> 데이터베이스....

    등 다양한 구조에서 서버 몇개와 통신하며 다른 서버에서 어떤 타입의 데이터가 넘어오는지 모르기 때문에 직접입력하는 것 아니면 any로 인식할 가능성이 있기 때문에 타입단언을 쓸 일이 생길 수 있습니다.

  2. 그리고 제네릭을 식별자 뒤에 쓰면 인수와 관련된 것 같은데

    식별자 앞에 제네릭을 쓰면 어떤 의미인가요?

    답: 제네릭은 "타입<타입변수>" 꼴인 타입을 말하는데, example은 타입이 아니라 변수기 때문에 저건 제네릭이 아니라 없는 문법입니다.

aa aa님의 프로필

aa aa

질문자

2023.05.19

빠른 답변 감사합니다.

1번은 이해가 갔습니다.

2번은 추가적인 궁금증이 있는데요

그럼 강의에서 나온 (<IExam>example)은 "<타입변수> 변수"에 전체괄호를 해준 형태이고

example 변수가 IExam의 형식이라는 뜻일까요?

지금까지 제네릭을 쓸 때 function add<T> 이것처럼 뒤에다만 붙여서 써서 이해가 잘 안 가네요

"<IExam>example" 은 "example as IExam"과 같은 뜻이며

그냥 타입 캐스팅(type casting)입니다!
단언과 캐스팅이 문법은 같은데
- 타입 단언 : 이건 이거야!!
- 타입 캐스팅 : A 타입을 B 타입으로 바꿔야겠다!
과 같은 느낌입니다.

또한 괄호 .. ( ) <- 요녀석은 문법이 아니라 코드가독성을 위해 추가된 것 입니다 :)

aa aa님의 프로필

aa aa

질문자

2023.05.22

감사합니다! 주말이라 귀찮으셨을텐데 친절히 답변주셔서 감사합니다ㅠㅠ