작성
·
168
0
안녕하세요
혹시 Person과 Product의 관계를 제가 이렇게 이해했는데
맞을까요 ?
interface 선언된 Person에 속성값이 많으면 많을 수록
1.구체적(?)으로 변하기 때문에 속성값이 없는 쪽이 더 많은 값을 할당 받을 수 있다고 생각해도 될까요 ?
2.다른 생각으로는 const test1 : Test={}이렇게 생긴 녀석은
모든걸 포괄할 수 있는 최상위 녀석이라고 생각해도 되는걸가요?
3.f1 = f2 와 f2= f1 의 관계에서 f2는 b: string | ( OR연산 ) number 와 같다고 생각하면 되는건가요 ?
4. f2 = f1의 관계도 이해가 조금 안 됩니다 ㅠㅠ
제가 생각하기론 f1은 b타입이 string인데 f2역시 b타입을 string으로 취할 수 있어 가능하다고 생각하는데 혹시 어느 부분에서 안되는건가요 ? number때문인가요 ?
5.f1=f2역시 f2의 b는 string | number 인데
f1(1,1);이 오류가 나는 이유를 모르겠습니다.
f1(1,1);이 실행되면 f2가 가 호출되어
b의 type이 string | number이기 때문에 1이 number로 인식 되어 정상적으로 결과를 출력해야 맞는것이 아닌가요 ?!
답변 1
1
안녕하세요
1. 맞습니다
2. 맞습니다. 다만 작성하신건 타입이라기 보다는 값이구요. 좀 더 정확한 표현은 `interface Test {}` 가 되겠네요
3. 제가 이해를 못했습니다. f2 의 타입은 F2 이고, F2 에서 매개변수 b 의 타입은 `string | number` 입니다
4. F1 이라는 함수 타입은 매개변수 b 가 문자열인 것만 처리할 수 있습니다. F2 는 문자열과 숫자 모두를 처리할 수 있습니다. 따라서 F2 함수 타입으로 만든 f2 를 사용(호출)하는 사람은 매개변수 b 에 숫자도 입력 가능합니다.
그런데 F1 의 매개변수 b 는 숫자를 처리할 수 없으므로 f1 을 f2 처럼 사용(호출)할 수 없습니다. 따라서 `f2 = f1;` 코드는 문제(에러)가 되는 것입니다. F2 가 F1 보다 유연하다고 할 수 있습니다.
반대로 `f1 = f2;` 할당은 괜찮습니다. 문자열과 숫자를 처리할 수 있는 똑똑한 f2 를 f1 처럼 문자열만 입력하면서 사용할테니 전혀 문제(에러)가 되지 않습니다.
5. 타입과 값을 헷갈리시는 것 같아요. (많은 분들이 헷갈려 하십니다^^)
값을 할당한다고 타입이 변하지 않습니다. f1 은 문자열만 입력 가능한 타입이라고 선언을 했고, 그 사실은 변하지 않습니다. f2 라는 값은 문자열과 숫자를 모두 처리할 수 있도록 구현됐습니다. 하지만 f1 의 타입에 명시된 대로 문자열만 입력해서 사용할 겁니다. 그렇게 사용해도 전혀 문제가 되지 않습니다. 왜냐면 f2 는 문자열을 처리할 수 있으니까요.
감사합니다
" ~ 처럼 사용하겠다 " 라는 말이 확 와닿았습니다!