본문 바로가기
Android Q&A/Android One a day

[안드로이드 면접] - 15 :

by 후추부 2023. 2. 15.

1. 안드로이드 사용해본 레이아웃 설명하기

더보기

LinearLayout

  • 여러 View 들을 가로 또는 세로 방향으로 나열할 때 사용하는 레이아웃이다.
  • orientation 속성을 가지고 있어서 가로(Horizontal), 세로(Vertical) 을 설정할 수 있다.
  • 자식들은 중첩되지 않고, 지정한 방향으로 쌓이는 형태로 표시된다.
  • weight 속성은 가중치를 설정할 수 있다.

💡가중치 설정은 어떤건가? 이 속성은 뷰가 화면에서 얼마만큼의 공간을 차지해야 하느냐에 따라 해당 뷰에 '중요도' 값을 할당하게 된다.

다양한 디바이스 화면에 dp 가 아니라 비율에 따른 대응으로 좋다 하지만,

뷰 렌더링하는 과정에서 onLayout()자주 호출하여 상관관계를 파악하기에 성능 상 좋지 않다.

 

RelativeLayout

  • 자식 View 들이 서로 간의 상대적 배치 관계에 따라 화면에 표시될 위치를 결정되도록 만들어주는 레이아웃이다.
  • 상대적인 배치 기준을 정하지 않는다면, 내부에 중첩되어 표시가 된다.
  • 특정 View(위젯)을 기준으로 배치하게 된다.
  • 아무런 조작을 하지 않았을 때는 왼쪽 상단부터 View(위젯)가 쌓이게 된다.

 

FrameLayout

  • 주로 하나의 자식 View 만 표시할 때 사용되는 레이아웃이다
  • 추가된 순서대로 쌓이게 되어 마지막에 추가된 뷰가 가장 위에 올라오게 된다.
  • 여러 Fragment 를 동일한 위치 내에서 교체하여 표시하고자 할 때, Fragment 의 컨테이너 역할로써 사용되기도 한다.
  • 보통 로딩 중 Progress 를 보여줄 때도 사용된다

 

ConstraintLayout

  • 레이아웃에 배치되는 뷰들에 여러 제약을 적용하여 각 뷰의 위치와 크기를 결정하는 레이아웃이다.
  • 수평적인 구조로 뷰를 배치하기 때문에 다른 레이아웃에 비해 성능 향상을 얻을 수 있다.
  • RelativeLayout 의 상대적 위치 관계에 따른 배치LinearLayout 의 가중치가 가진 장점과 chain 사용을 통해 추가 하위 레이아웃 없이도 그룹화를 만들 수 있다.

 

2. 코틀린 불변성(Immutability) 란?

더보기

코틀린의 함수형 프로그래밍은 스레드 안전(thread-safe)하다. 그리고 불변성은 스레드를 안전하게 만드는 데 큰 역할을 한다.

프로그래밍 관점에서 불변성은 데이터(상태)를 바꾸지 못하는 걸 의미를 한다.

 

불변성의 장점

  • 한 번 정의된 상태가 유지되므로, 코드를 이해하기 쉽다
  • 공유했을 때도 충돌이 일어나지 않으므로, 병렬처리를 안전하게 할 수 있다.
  • immutable 객체에 대한 참조는 변경되지 않으므로, 쉽게 캐시할 수 있다.
  • 방어적 복사본을 만들 필요가 없다. 또한 객체를 복사할 때 깊은 복사를 따로하지 않아도 된다.

 

3. 코틀린 가변적일 경우 발생하는 문제는?

더보기

1. 프로그램을 이해하고 디버그하기가 힘들어진다.

>> 데이터(상태) 변경이 잦으면 이를 추적하고 코드 해석이 어려워지고, 코드 수정 또한 어렵게 된다.

 

2. 코드의 실행을 추론하기 어려워진다.

>> 코드 런타임에 따라서 값이 달라 질수 있으므로 현재 어떤 값을 갖고 있는지 알아야 코드의 실행을 예측할 수 있다. 또한 한 시점에 확인한 값이 계속 동일하게 유지된다고 확신할 수 없다.

 

3. 멀티 스레드 프로그램일 때는 적절한 동기화가 필요하다.

>> 데이터(상태)변경이 일어나는 모든 부분에서 충돌이 발생할 수 있다. 따라서 모든 변경 시점마다 동기화를 해주어야 한다.

 

4. 테스트하기 어렵다.

>> 모든 상태를 테스트해야 하는데, 변경이 많을 수록 더 많은 조합을 사용하여 테스트를 해야한다.

 

4. 코틀린 가변성을 제한하는 방법은 무엇이 있는가?

더보기

1. 읽기 전용 프로퍼티(val) 를 사용한다.

2. 가변 컬렉션과 읽기 전용 컬렉션을 구분한다. (ex. List vs MutableList)

3. 데이터 클래스의 copy 를 활용한다.

4. 가변적인 객체를 외부에 노출하지 않는다.

 

5. val 와 const val 의 차이는 무엇인가?

더보기

값이 할당되는 시점이 다르다. val 는 런타임 시점, const val 는 컴파일 시점이다.

 

따라서, val 는 프로그램 수행 중에 프로그램 수행에 따라 값이 바뀔 수가 있다. (ex. 두 매개변수를 받아 더하기 함수를 이용하여 return 받는 값을 val 에 할당 시에 두 매개변수에 따라 return 받는 val 가 값이 다르다.

그에 반하여 const val 는 언제나 동일한 값을 가진다.