해결된 질문
작성
·
559
·
수정됨
0
강의를 다 보고 나서 의문점이 들어서 질문 드립니다.
강의에서 value 값을 출력하기 위해서
인터페이스를 만들고 as랑 제네릭을 활용하는 법을 알려주셨는데
제 생각에는 인터페이스를 만들었으니까
example의 타입으로 인터페이스를 주면 되지 않을까 했습니다.
해봤더니 에러가 안 나고 출력도 잘 되더라고요
저한테는 인터페이스를 타입으로 주는 것이 더 간편하게 느껴지는데
object를 타입으로 주는 것이 더 실무에 적합한 방식인 건가요?
어떤 차이점이 있을까요?
그리고 제네릭을 식별자 뒤에 쓰면 인수와 관련된 것 같은데
식별자 앞에 제네릭을 쓰면 어떤 의미인가요?
답변 1
1
example의 타입으로 인터페이스를 주면 되지 않을까 했습니다.
해봤더니 에러가 안 나고 출력도 잘 되더라고요
저한테는 인터페이스를 타입으로 주는 것이 더 간편하게 느껴지는데
object를 타입으로 주는 것이 더 실무에 적합한 방식인 건가요?
답: 당연히도 타입을 알맞게 달아주는 것이 맞습니다. object는 제가 예시를 들기위해서 저렇게 단 것 뿐입니다. 보통 저런 상황들은 규모가 있는 애플리케이션에서 발생합니다.
서버1 <-> 서버2 <-> 서버3
서버1 <-> 서버2 <-> 데이터베이스....
등 다양한 구조에서 서버 몇개와 통신하며 다른 서버에서 어떤 타입의 데이터가 넘어오는지 모르기 때문에 직접입력하는 것 아니면 any로 인식할 가능성이 있기 때문에 타입단언을 쓸 일이 생길 수 있습니다.
그리고 제네릭을 식별자 뒤에 쓰면 인수와 관련된 것 같은데
식별자 앞에 제네릭을 쓰면 어떤 의미인가요?
답: 제네릭은 "타입<타입변수>" 꼴인 타입을 말하는데, example은 타입이 아니라 변수기 때문에 저건 제네릭이 아니라 없는 문법입니다.
"<IExam>example" 은 "example as IExam"과 같은 뜻이며
그냥 타입 캐스팅(type casting)입니다!
단언과 캐스팅이 문법은 같은데
- 타입 단언 : 이건 이거야!!
- 타입 캐스팅 : A 타입을 B 타입으로 바꿔야겠다!
과 같은 느낌입니다.
또한 괄호 .. ( ) <- 요녀석은 문법이 아니라 코드가독성을 위해 추가된 것 입니다 :)
빠른 답변 감사합니다.
1번은 이해가 갔습니다.
2번은 추가적인 궁금증이 있는데요
그럼 강의에서 나온 (<IExam>example)은 "<타입변수> 변수"에 전체괄호를 해준 형태이고
example 변수가 IExam의 형식이라는 뜻일까요?
지금까지 제네릭을 쓸 때 function add<T> 이것처럼 뒤에다만 붙여서 써서 이해가 잘 안 가네요