Kotlin

BMI 계산기 복습

끄공 2022. 3. 5. 19:36

손에 익어야 해서 지난번에 작업했던 걸 복습하는 시간을 가졌다.

 

저번에는 Linear Layout으로 작업했는데 이번엔 Constraint Layout으로 작업을 해봤다.

 

Linear는 Depth가 쌓여서 복잡해지기도 하고 layout을 짜는 성능이 좋지 못하다.

Relative는 1 Depth로 가기 때문에 성능면에서 좋지만, 여러 디바이스에 유연하게 대응하는 데 한계를 가진다고 한다.

그래서 나온 게 Constraint이고, 개념은 Realtive와 거의 유사하다고 보면 된다.

 

이 Layout은 다른 Component를 기준으로 배치한다는 특징이 있다. 그래서 어떤 걸 기준을 정해줘야 한다.

가령, "1번 TextView의 Top은 2번 Button의 Bottom에 위치한다."가 그 예시이다.

 

이렇게 기준을 정해주면, 나중에 margin이나 padding을 줄 때 그 기준점으로부터 거리를 재기 때문에 헷갈리지 않게

일관된 기준으로 설정을 잘 해줘야 한다.

 

 


 

기본적인 내용이기도 하고 지난번에 정리를 잘 해둬서 이번 복습에 큰 무리는 없었지만, 새롭게 느낀점들이 있어서 정리를 해보려고 한다.

 

1)

나는 이렇게 findViewById 함수를 이용해 xml 파일에서 작성한 layout을 불러와야만 에뮬레이터 화면에 띄울 수 있는 거라고 생각했는데, 그건 아니었다. 

 

 

setContentView안에 있는 보라색 키워드는 내가 작성한 xml 파일이다. 저렇게 세팅만 해주면 에뮬레이터 화면에 띄워지게 된다. 그런데 단순히 layout만을 보여줄 게 아니라 그 화면에서 어떤 action이 일어나게 하려면 추가 작업을 해줘야 한다. findViewById는 Component를 불러와서 변수로 선언할 수 있게 도와주는 역할일 뿐이다.

 

 

 

2)

이건 새로운 개념이라기보단 내 실수였는데 그래도 적어보려고 한다.

전환될 페이지를 만들어주기 위해 새 Activity 파일을 만들었고 기존에 생성돼있던 파일의 onCreate함수를 복붙했는데 빨간 밑줄이 떴다. "mainfest 파일에 추가를 안 해줘서 그런가?" 싶었는데, 추가를 해줘도 그대로였다.

그러다 문득 내가 해당 파일을 kotlin이 아닌, java 파일로 만들었다는 걸 인지했다.

파일 type을 kotlin으로 바꿔주니 해결이 되었다.

 

 

3)

에뮬레이터를 돌리는데 앱을 키기만 하면 계속 죽어버렸다.

로그를 보니 NFE 에러였다. EditText로 입력을 받는데 빈값을 입력받는 경우에 대한 대응 조치를 입력 안 해놔서 앱이 죽었던 거였다. 

 

 

그래서 예외처리를 해주었다. 내용 자체는 지난번에 작업한 것과 동일하다.

 

그런데 이 코드를 작성해주었는데도 NFE 에러가 계속됐다.

 

그리고 내가 발견한 건, 2가지였다.

 

첫째는, 예외처리를 setOnClickListener 메서드 구현부의 가장 위쪽에 적어주어야 한다는 것이다.

예외처리 코드를 맨 아래에다 작성해주었는데, 생각해보니 코드는 위쪽부터 순차적으로 실행이되는 거니까 

예외처리가 되기도 전에 앱이 죽어버리는 것이었다. 맨 위로 옮겨주니 해결되었다.

 

둘째는, 입력받은 값을 height이란 변수에 저장하는 등의 내용들을 Button 구현부 밖에 작성을 해주었는데 이 부분도 실수였던 것 같다. 버튼이 눌려지는 순간에 연산이 수행되게 해야했는데 이걸 밖으로 빼버렸으니 말이다.

 

 

이정도의 내용들을 복습하면서 다시 챙겨갈 수 있었고, "연산 결과를 어떻게 화면에 반영시키지?"가 고민 point였는데

이렇게 TextView를 불러와서 .text에 값을 할당해줌으로써 할 수 있었다. 이 부분이 아직 익숙치 않은데 좀 더 연습을 해야겠다.