Search

1조 멘토링 4주차

분류
기타
담당멘토
양민욱
멘토링 요청시간
2023/07/19 20:00-21:00
멘토링 시간
2023/07/19 20:00-21:00
멘토링방
멘토링룸1
배정상태
해결완료
비용지급
지급완료
번호
0
신청팀
기초멘토링팀
소요시간
1
작성자
천성민/차지훈

질문

1.
어떤 경우에선 run 없이 바로 seton~ 사용하는데, 차이점이 뭔가요?
Plain Text
복사
1.
R.layout.activity_main 와 activityMainBinding.root 차이
Kotlin
복사
1.
append 사용시 결과 값이 한줄씩 엔터 되서 출력되게 하는 방
Kotlin
복사

멘토 답변

문제 공유방에서 첫번째 안드로이드 프로젝트 과제를 학습해오고 궁금한 것을 질문하는 방식으로 4주차를 진행했습니다.
run을 사용하는 이유에 대해서 간단히 알아보았습니다.
activityMainBinding.editText1.setText("") activityMainBinding.editText1.setOnFocus... activityMainBinding.editText1.something.. 위 코드 처럼 중복으로 참조하는 변수를 수신객체로 지정해서 중복 코드를 줄이는 방법으로 사용 수신 객체 지정 람다 문법 apply, with, run ... with(activityMainBinding) { editText1.setText("") editText1.setOnFocus.. editText1.something() }
Kotlin
복사
R.layout.activity_main 와 activityMainBinding.root 차이점을 설명드리면서, Binding 클래스의 root를 설명해드렸습니다.
setContentView(activityMainBinding.root) vs setContentView(R.layout.activity_main) XML과 ViewBinding을 이용한 뷰 구현에 대한 차이를 설명드렸습니다. inflate: XML에 정의된 뷰 -> View.class 객체로 변경하는 것 root는 ViewBinding로 인해 구현된 뷰 Tree에서 젤 상위 부모를 참조하는 변수.
Kotlin
복사
줄바꿈 문자에 대해서 설명드렸습니다.
append 사용시 결과 값이 한줄씩 엔터 되서 출력되게 하는 방법
Kotlin
복사
"\n" 줄바꿈 아스키 코드 문자열 listView.append(name + "\n") listView.append("$age\n") listView.append(korean)
Kotlin
복사
기능 구현에 대해서 로직을 분리하는 관점에서도 설명해드렸습니다.
activityMainBinding.run { editTextNumber2.run{ setOnEditorActionListener { v, actionId, event -> var name = editTextText1.text.toString() var age = editTextNumber1.text.toString() var korean = editTextNumber2.text.toString() listView.text = "" listView.append(name) listView.append(age) listView.append(korean) editTextText1.setText("") editTextNumber1.setText("") editTextNumber2.setText("") setText("") true } } }
Kotlin
복사
editTextNumber2 뷰를 제어하고 있는데 editTextText1과 editTextNumber1를 내부에서 또 접근하고 있다. 하나의 뷰가 또 다른 뷰를 제어하는 구조가 어색하다.
/** * 요구 사항. * 조건: 3번째 EditText Enter를 입력했을 때 * 액션: 3개의 EditText 모두 초기화하고, 3개 입력 값으로 이루어진 Text를 추가한다. */
Kotlin
복사
editTextNumber2.run { setOnEditorActionListener { v, actionId, event -> if (actionId == EditorInfo.IME_ACTION_SEARCH) { onEnderClick() } true } } // 액션: 3개의 EditText 모두 초기화하고, 3개 입력 값으로 이루어진 Text를 추가한다. private fun onEnderClick() { addListView() clearAllEditText() } private fun addListView() = with(activityMainBinding) { val name = editTextText1.text.toString() val age = editTextNumber1.text.toString() val korean = editTextNumber2.text.toString() //줄바꿈 \n listView.text = "" listView.append(name + "\n") listView.append("$age\n") listView.append(korean) } private fun clearAllEditText() = with(activityMainBinding) { editTextText1.setText("") editTextNumber1.setText("") editTextNumber2.setText("") }
Kotlin
복사
요구사항에 따라 역할을 함수로 분리.
editTextNumber2 리스너에 또 따른 뷰를 접근하는 부분은 로직의 일부 일뿐 뷰와 어떤 의존성이 생기는 것이 아니다.
단지 기능에 따른 코드 분리가 안되어 있어 코드 관점으로 연관되어 보이는 느낌을 받을 것 이다.
뷰 여백을 그리는 속성인 padding과 margin에 대해서 복습하는 과정을 가졌습니다.
padding: 뷰 내부 여백을 주는 속성 margin: 뷰 외부로 여백을 주는 속성
Kotlin
복사