nullable type
널 안정성
변수 선언 단계에서 null이 가능한지 아닌지를 같이 선언

? : 안전 호출 연산자
null일 경우 엑세스 시도를 중지하고 null을 반환함

!! : 어셜션 연산자
nullable로 선언했지만, 이 값은 절대 null일리가 없다는 것을 알려줌


*어셜션 연산자를 사용해서 null이 아니라고 선언했기 때문에 NullPointerException 오류 발생
class
객체를 정의하고 만들어 내기 위한 '틀' 또는 '설계도'
- 내가 원하는 UI나 로직(계산식)을 구현하는 곳
- class 안에는 객체 생성을 위한 변수와 메서드가 들어감

객체
클래스에 선언된 모양 그대로 생성된 실체 그 자체
인스턴스
클래스가 메모리에 할당되어 사용가능하도록 만들어진 것


클래스 간의 관계
클래스를 단순히 인스턴스로 만드는 것에 나아가 서로 이어지게 만들어줄 수 있음 -> 상속
- 상속하는 쪽 부모 클래스(=슈퍼 클래스)
- 상속 받는 쪽 자식 클래스(=서브 클래스)
속성을 사용하면 중복되어 사용될 속성에 대한 재사용성을 높여 효율적이고 빠르게 개발을 할 수 있도록 도와줌



*yeppy.flySpeed = 30에서 이 30이라는 값이 클래스 내부 set의 value로 들어감
IS-A / HAS-A
IS-A
클래스를 상속 받을 때의 관계
HAS-A
객체는 실제로 클래스 자체인 인스턴스가 아니더라도 다른 클래스의 인스턴스를 소유할 때의 관계


- Bird IS-A Animal
- Cage HAS-A Bird
람다 표현식
- 람다 표현식은 함수를 작성하는 약식 문법을 제공함
- 함수 유형을 다른 함수에 전달할 수 있음


고차 함수
함수를 인자로 전달받거나 함수를 결과로 반환하는 함수

Jetpack Compose 용어 정리


상단 Composable 어노테이션을 붙여줌으로서 함수가 UI요소로서 작동함을 알 수 있음
변수에 mutableState 유형을 사용하여 앱의 상태를 Compose에서 관찰, 추적 가능한 상태로 만들어 줌
TextField의 inputValue의 value라는 속성을 읽고 각 Composable을 추적해 value가 변경되면 리컴포지션(재구성)을 시도함
TextField 값이 변경될 때마다 onValueChange가 트리거가 된다. 변경된 값은 람다 표현식의 it에 들어가 inputValue.value 변수에 들어가게 됨
하지만 위의 코드는 값을 변경하려고 해도 0으로 고정되어 변경이 불가능하거나 remeber와 관련된 오류가 뜬다.
-> 트리거를 통해 Composable 함수가 다시 호출되면서(재구성되면서) inputValue 값이 초기값인 0으로 설정되기 때문
=> remember 키워드 사용
remember
컴포저블이 재구성되더라도 값을 저장할 수 있도록 도와주는 키워드
계산된 값은 초기 컴포지션을 수행하는 중에 컴포지션에 저장되고 저장된 값은 리컴포지션 중에 반환된다.

by remeber를 통해 텍스트가 수정되면 초기화되지 않고 값을 기억하도록 만들어 줌