Search

1조 멘토링 3주차

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

이전 주차 질문

8. Null, ? 와 !! 설명 부탁합니다!
a?. => a가 null이면 실행하지 않아. 그래서 안전해. a!!. => a가 null이면 프로그램이 죽을 거야 공통점: 둘다 Nullable Type이 NotNull Type으로 형변환되어 사용 가능 차이점: !!의 경우 null이면 NullPointerException이 발생하면서 프로그램이 종료됨. ?의 경우 null이면 해당 구문이 실행이 안됨 a? -> if (a != null) { // 이곳을 실행. print(a) } vs print(a)
Kotlin
복사
9. As 사용 방법. (형변환)
Number. ex) Int, Long, Float ⇒ toInt(), toLong()
이 외에 타입 형변환 해주려면 as, is를 사용해야함
is a is B => a가 B 타입이 맞다면, 특정 액션을 한다. (안전한 방식) val a: Int = 10 // a => Int if (a is Float) { //위 조건식을 통과하는 시점에 a는 Float 타입이 됩니다. print(a) } --- as a as B => a가 B가 아니라면, ClassCastException이 발생함 이 구문이 실행할 때 바로 발생하는 것이 아니라 해당 값을 접근할때? val a: Dialog = 10 val b: Float = a as Popup // 변수에 값을 대입하는 시점에 ClassCastException 공통점: 둘다 형변환은 해준다.
Kotlin
복사
10. 스마트 캐스팅이 정확이 뭔지 모르겠습니다.
// in java // A라는 클래스를 B로 바꾸고 싶다. if (A instanceOf B) { val temp: B = (B) A // 코드로서 강제 형변환을 해준다. } vs if (A is B) { // A가 B가 됨. 자동으로 컴파일러가 변환해줌 }
Kotlin
복사
11. Sealed class 는 단순히 상속받은 클래스를 부모클래스에 묶어서 정리하는 개념이 맞나요
class Parent() //자식 3개를 만듦 class Child1: Parent() class Child2: Parent() class Child3: Parent() // 특정 코드에서 val parent: Parent() = getChild() // Parent를 상속한 Child를 반환하는 함수 when (parent) { is Child1 -> { ... } is Child2 -> { ... } is CHild3 -> { ... } else -> { } // 컴파일러는 Child3 이후에 또 다른 상속받은 자식 클래스가 존재할 수 있다고 생각해요. } --- sealed class Parent() //자식 3개를 만듦 object Child1: Parent() class Child2: Parent() class Child3: Parent() // 컴파일러에게 Parent sealed class가 있고, 이 클래스를 상속받은 자식 클래스는 3개야. Child1, Child2, Child3 val parent: Parent = getChild() // Parent를 상속한 Child를 반환하는 함수 val value = when (parent) { is Child1 -> { ... } is Child2 -> { ... } is Child3 -> { ... } }
Kotlin
복사
12. Reflection “::” 설명 부탁합니다
Kotlin
복사
1.
현재 하고있는 공부방식 이대로 괜찮을까요?

Android

ViewBinding (편리한 기능) 개념
findViewById() Android UI 개발 플로우. Android UI를 만들때 XML로 레이아웃을 짜고, XML을 뷰(View)로 변환하고 해당 뷰에 접근하고 제어 1) XML로 UI를 그린다 2) XML을 View 객체로 변경한다. 3) 변경한 View에 접근해서 제어한다. findViewById() --> (3)의 방법 --- (1) xml <Textview android:id="+id/text" ... </TextView> activity or Fragment에서 접근을 할 때 (2) setContentView(R.layout.activity_main) (3) val text: TextView = findViewById(R.id.text) 문제점: 뷰가 복잡해질 수록 3번의 코드 라인 수가 많아짐-> 오로지 개발자가 치는 코드가 늘어나는 구조 --- (RxView.. DataBinding) 최근 들어서 성능 이슈가 발견되어서 다 버려지게 되었고. 최근 트렌드. 'ViewBinding' (1) 동일 => 이전과 비교해서 xml을 동일하게 짜야함. (2) setContentView에서 xml을 직접 넘기는 구조가 아니라 컴파일러에 의해서 만들어진 Binding Class를 통해서 접근 ex) R.layout.activity_main -> ActivityMainBinding ViewBinding 클래스가 만들어짐. 역할은 XML에 정의한 TextView 위젯들은 실제로 뷰 클래스로 변환을 해주면서 (3)의 기능. 참조까지 다 만들어줘요. 장점: 개발자가 직접 뷰 참조를 만들어주지 않아서 오히려 안정성 증가. val text: ImageView = findViewById(R.id.text) // error 휴면 에러..가 존재했다.
Kotlin
복사