돌아오신 것을 환영합니다
이번 영상에서는 Convert units(단위 변환)이라는 function(함수)를 적용해볼 것인데, 이는
한 단위에서 다른 단위로 변환을 해주는, 즉 Unit Converter(단위 변환기)의 역할을 하는 함수입니다
그리고 저희 애플리케이션의 logic(로직)을 기본적으로 유지할, 즉 따를 것인데
두 값을 서로 곱하는 정도이기 때문에 꽤 간단합니다
자 이제 이 function(함수)를 저희의 unit converter(단위변환기) composable(컴포저블) 안에 넣어보겠습니다
그리고 저희 변수들이 모두 있는 이 밑에 넣겠습니다
inputValue(입력값) 밑에 말입니다. 왜냐하면 override(오버라이딩)을 해야 하기 때문에 여기에 input value(입력값) 그리고 마찬가지로 output value(출력값)도 있어야
합니다
그럼 이제 이 function(함수)를 만들어봅시다
그리고 여기 보시면 composables(컴포저블) 안에 functions(함수)를 만들 수 있는 것을 보실 수 있습니다
흥미롭지 않습니까?
다른 프로그래밍 언어의 경우 functions(함수) 안에 functions(함수)를 넣는 경우가 잘 없겠으나
여기서는 그렇게 하실 수 있습니다
자 여기에 convertUnits(단위 변환)이 있고
이제 무엇을 해야 하겠습니까
저희는 inputValue(입력값)을 double(더블)로 얻고 싶습니다
따라서 이 inputValue(입력값)을 가져와야 합니다
즉 여기에 무엇을 적든 그것을 double(더블)로 전환해야 한다는 말입니다
어떻게 그것을 하느냐
여기에 toDoubleOrNull(더블 혹은 널로)라는 function(함수)가 있습니다
그리고 이 함수가 할 것은 'string(열)을 double(두 배)의 숫자로 분석하고 결과 값을 반환하거나
string(열)이 유효한 숫자의 표현이 아닐 경우 null로 분석한다'입니다
꽤 멋진 함수입니다
즉 여기 저희의 텍스트 창에 double(더블)이 아닌 숫자를
입력한다고 해도
그냥 null을 반환할 것이기 때문에 저희의 애플리케이션이 다운되지 않을 것이라는 말입니다
반환값이
애플리케이션을 다운시키지 않을 것입니다
그것이 제 말입니다
그럼 여기서는 무엇을 해야 하겠습니까
굉장히 강력하고 멋진 것을 사용해볼 것인데
물음표(?), 쌍점(:), 0.0이라고 적어보겠습니다
자
이 줄에 어떤 일이 일어나고 있는지 봐봅시다
이 ?:을 사용하고 있습니다
그리고 나서는 0.0입니다
이게 무엇을 하고 어떻게 불리느냐
물음표, 쌍점, 'elvis'
'operator'
좋습니다
이 elvis operator는 굉장히 똑똑하고 짧은 if문입니다
저희가 toDoubleOrNull(더블 혹은 널로)에서 돌려받는 것은 저희가 입력한 값의
double(더블)인 string(열), 혹은 null일 것입니다
즉 받은 값이 double(더블) 값이라면, 그 double(더블) 값을
inputValue(입력값)double(더블) 안에 저장하는 값으로 사용하라는 것입니다
반면에 그렇지 않으면, 0.0을 사용하라는 것입니다
이것이 이 elvis operator가 해주는 것입니다. 이것이 null이 된다면,
초기 설정인 0.0을 사용하라고 하는 것입니다
숫자가 아닌 것을 입력하면, 한 번 해봅시다. 여기에 이렇게
q w e r을 포함하면 숫자가 아니게 됩니다
그러면 입력된 값이 초기 설정인 0.0으로 돌아가도록 하는 것이 이것이 해주는 것입니다
좋습니다
이제 이어서 해봅시다
다음으로는
result(결과)를 얻어야 합니다
result(결과)는 어떻게 얻느냐
input value(입력값)을 가져와서 conversion factor(전환 요소)로 곱하면 됩니다
정확히 conversion factor(전환 요소)의 값이어야 합니다. 왜냐하면 conversion factor(전환 요소)가 사용하는 것이
=
remember(리멤버)이기 때문입니다.
상자 안의 금화 예시로 다시 돌아가봅시다
여기 이것이 상자가 될 것이고
그리고 금화를 가지고 싶으면 .value를 사용해야 합니다
네
즉 이것이 곱셈을 해주고
100을 곱한 다음에 round(올림)을
합니다
다음에 round(올림)
to int를 적고 다시 100으로 나눕니다
즉 여기서는
input value(입력값)을 가지고
conversion factor(전환 요소) 값을 가지고, 서로 곱해준 다음
result(결과)를 100으로 곱하고
integer(정수)로 round(올림)한 후에 다시 100으로 나누는 것입니다
이렇게 하면 쉽게 활용할 수 있는 result(결과)를 받고 너무 긴 result(결과)를 받지 않을 수
있습니다
제가 오류가 하나 생긴 것을 볼 수 있는데 그 이유는 제가 inputValue(입력값)double(더블)을 사용지 않고 있기
때문입니다
이제 괜찮아졌을 것입니다
제가 실수로 inputValue(입력값)을 사용했는데 우선 double(더블)로 변환을 했어야 했던 것입니다
그리고 방금 그렇게 해줬습니다
여기서는 double(더블)을 사용해야 합니다
여기 이 round(올림)to가 import되어야 하는데 그 이유는 자동으로 적용되지 않는 extension function(확장 함수)이기
때문입니다
이 위 여기의 import들에 추가를 해주었습니다
네
그럼 이제 저희의 import들에 있을 것입니다
보시면
'kotlin.math.round(올림)to
Int'가 추가되었습니다
좋습니다
이제 저희가 result(결과)가 있으니 output value(출력값)이 result(결과)가 되어야 한다고 할 수
있습니다
그러나 result(결과)는 안타깝게도 숫자입니다
따라서 그것을 string(열)로 변환해주어야 하는데 toString function(함수)로 그렇게 할 수 있습니다
이제 저희의 output value(출력값)은 result(결과)가 무엇이든 그것이 될 것이고 string(열)인 double(더블)의 형식일 것입니다
그리고 그것을 여기에 저장할 것입니다
state(상태) 변수의 remember(리멤버) 변수 말입니다
그러면 이제 저희의 사용자 인터페이스(UI) 안에서 사용할 수 있습니다
이제 모든 input value(입력값)을 하나하나 바꿔야 합니다
여기 dropdown menu(드롭다운 메뉴) 안에 모든 onclick을 바꾸어야 합니다
iExpanded(입력 확장됨)이
False로 설정되어있고
센티미터의 conversion(전환) 값이 0.01로 되어있습니다
input unit(입력 단위)는 센티미터여야 하고
convertUnits(단위 변환) function(함수)를 사용해야 합니다
그리고 이제 dropdown menu(드롭다운 메뉴)의 모든 아이템들에게 같은 과정을 하나하나 반복하면 됩니다
여기에 이렇게 넣고
그러나 미터로 바꾸고 값도 바꿔야 합니다
미터는 값이 1이여야 합니다. 미터가 말하자면 기본이 되기 때문입니다
미터가 기본
단위입니다
피트에도 같은 과정을 반복해줍니다
이것은 검색을 해봐야 했습니다, 피트는 제가 자주 사용하는 단위가 아니기
때문입니다
피트는 0.3048,
한 피트가 0.30848
센티미터, 아니 미터입니다
즉 30센티미터와 48밀리미터인 것입니다
네
아 480밀리미터입니다
이렇게가 피트가 가질 내용이고
마지막으로 밀리미터가 있으니
여기에도 똑같이 넣어줍시다
여기에 이렇게 붙여넣습니다
밀리미터
그리고 사용할 값은 0.001
입니다
좋습니다
실수로 닫는 괄호도 복사했네요
자 이게 input(입력)을 위한 것입니다
여기서 잠깐 쉬는 시간을 가지도록 합시다. 다음 강의에서
output(출력)부분을 작업하고 드디어 애플리케이션을 작동해보겠습니다
다음 강의에서 뵙겠습니다