1. 람다함수와 고차함수와 익명함수를 설명하시오
고차함수(High Order Function)
매개 변수 또는 반환 값으로 또 다른 함수(람다)가 사용되는 함수를 말한다. 자바에서 많이 들어봤던 콜백함수가 그와 비슷하다.
과거 자바 8버전에서 '람다' 를 발표하기 이전까지 함수를 매개 변수로 전달하기 위해서는 해당 함수가 선언된 인터페이스를 구현한 클래스를 정의하고 객체를 생성하여 그 객체를 매개 변수로 전달하는 방법을 주로 사용했다.
안드로이드 API24 이후부터 람다 사용이 가능해지면서 위와 같은 방법 구현이 쉬워졌다.
람다식(Lambda) 함수
간단하게 말하면 메서드를 하나의 식으로 표현한다고 말할 수 있다. 이로 이루어진 함수를 일컫는다.
람다식으로 만들어진 함수는 이름이 없고 반환값이 없어지므로 익명함수(anonymous function) 이라고 불리우기도 한다.
또한, 모든 메서드는 클래스에 포함되어야 하는데, 람다식을 사용한다면 클래스를 쓰지 않아도 된다. 즉, 람다식을 하나의 객체로 취급한다는 것이다. 람다식은 익명 클래스의 객체와 동등하다.
💡익명 클래스란? 클래스 선언과 객체 생성을 동시에 하여 한 번만 사용될 수 있고 오직 하나의 객체만 생성할 수 있는 일회용 클래스
Java!
// 람다식
(int x, int y) -> x + y
// 익명클래스
new Object() {
int sum(int x, int y) {
return x+y;
}
}
2. ViewModel 을 사용하는 이유는?
상태 변화 같은 것에도 데이터를 유지되게 만들기 때문에 사용한다.
안드로이드 프레임워크는 View(Activity, Fragment) 의 라이프사이클을 관리한다.
안드로이드 프레임워크는 View 를 파괴하거나 다시 만드는것을 결정하는데, 모바일 OS 특성상 리소스에 대한 제약이 많은 OS 라서 파괴 시 리소스를 제거하게 된다.
보통 화면 회전을 할 때, 화면이 파괴(onDestroy)되고 다시 만들어질 때(onStart), 복구 로직(onRestoreInstanceState)이 수행된다.
위와 같은 라이프 사이틀에 따라 파괴되고 복구되어야 할 때, 데이터 유지가 필요하는 상황이라면 데이터를 저장했다가 꺼내와야하는 번거로움이 생긴다.
View 보다 긴 수명을 가지는 인스턴스가 존재한다면 불편함을 해소시켜줄 수 있다.
그게 바로 ViewModel 이다.
View(Activity, Fragment) 에 맞춰 model(Data) 을 유지시키는 게 ViewModel 이다
ViewModel 인스턴스의 Scope 는 ViewModel 을 가져올 때 ViewModelProvider 에 전달되는 객체(View)의 Lifecycle 로 지정된다.
그렇게 View 보다 더 큰 Scope 를 가진 ViewModel 을 가지고 상대적으로 작은 View Scope 내에 있는 데이터 유지를 한다.
3. 안드로이드 커스텀 뷰 란?
필요에 의해서 기존에 있던 뷰가 아닌 새로운 뷰를 의미한다.
💡기존에 있던 뷰? Button, TextView, EditText, ListView, CheckBox, RadioButton, Spinner 등, 레이아웃으로는 LinearLayout, FrameLayout, RelativeLayout 등.
커스텀 뷰를 만드는 이유는 실제로 앱을 만들다 보면 기획자, 디자이너, 사용자(클라이언트)의 요구사항에 맞는 기능을 기존에 있던 뷰들로 만들기가 어렵고, 불가능한 경우가 존재한다.
ex. 원형 썸네일을 표현하기 위한 뷰를 만들기 위해서 ImageView 를 상속할 수 있고, 텍스트의 일부 내용만 보여주고 원할 때 펼쳐 모든 내용을 보여줄 수 있는 뷰를 만들기 위해서는 TextView 를 상속할 수 있다.
커스텀 뷰의 KeyPoint
- 생성자는 3개를 만든다.
- onDraw 함수를 통해서 그래픽을 그린다.
- onMeasure 함수를 통해서 뷰의 크기를 결정한다.
- 커스텀 속성을 attrs 파일을 통해서 정의한다.
'Android Q&A > Android One a day' 카테고리의 다른 글
[안드로이드 면접] - 13 : (0) | 2023.02.09 |
---|---|
[안드로이드 면접] - 12 : (0) | 2023.02.07 |
[안드로이드 면접] - 10 : (0) | 2023.02.02 |
[안드로이드 면접] - 9 : (0) | 2023.02.01 |
[안드로이드 면접] - 8 : (0) | 2023.01.31 |