본문 바로가기

전체 글236

[안드로이드 면접] - 19 : 1. repeatOnLifeCycle 에 대해서 설명해보시오. 더보기 lifecycleScope 한계 때문에 해당 메서드를 사용한다. Flow 를 사용할 때, lifecycleScope 에서 사용하게 된다면, 액티비티가 onDestroy() 될 때는 데이터 collect 가 중단된다. 하지만, 액티비티 종료할 때 호출되는 onDestroy() 메서드가 아니라, 백그라운드로 내려갈 때에는 collect 중단이 되지 않는다. 앱이 백그라운드로 내려가면, 액티비티는 onStop() 이 수행되므로, lifecycleScope 는 계속해서 collect 에서 데이터를 수직한다. 기존에 이 문제를 해결하기 위해선, onStart 에서 collect 를 시작하고, onStop 에서 collect 를 중지하는 작업을 .. 2023. 2. 24.
[안드로이드 면접] - 18 : 1. 뷰를 구성하는 레이아웃은 XML 파일 기반으로 구성되어있다. 왜 그런지 한 번 생각해봤는가? 더보기 사용자 이벤트를 받아, 동작을 제어하는 코드로부터 따로 표시하기가 더 좋다. 또한, UI 의 구조를 시각화하기가 쉽다. - 레이아웃 코드와 비즈니스 로직 코드가 완전히 분리가 됨으로써 개발자와 디자이너의 역할 분담 또한 가능하다. - 자바나 코틀린 코드로 레이아웃을 작성했다면, 레이아웃 변경할 때마다 소스를 재 컴파일을 해야할 것이다. 반대로 레이아웃만 수정 시에 코드를 컴파일하지 않아도 되므로 개발 속도 향상이 있다. 2. Context 란 무엇인가? 더보기 컨텍스트는 말 그대로 맥락이라는 뜻으로 애플리케이션 환경을 알고있는 인터페이스라고 말할 수 있다. 쉽게 말해서 컨텍스트를 이용하면 getPac.. 2023. 2. 20.
[안드로이드 면접] - 17 : 1. 코틀린 확장함수(Extension Function) 란? 더보기 언어별 프레임워크 안에 오픈소스로 구현되어 있는 여러 함수들 있다. 예를 들면 자바 toString() 함수를 생각해보자. 해당 메서드는 출력 형식은 고정되어 있지만, 우리가 필요한 형식이 아닐 수 있다. 여기서 우린 이 부분을 사용하는 목적에 맞게 커스텀해서 사용하고 싶은 생각을 할 수 있지만, 자바는 안 된다. 하지만, 코틀린에서는 이러한 요구사항을 처리할 수 있는 함수가 라이브러리에 존재한다. 이게 바로 확장함수이다. 기본으로 정의된 함수인 것처럼 새로운 기능을 추가하는 기능이다. 정리하자면, 기존 클래스에 새로운 함수를 확장한다. 2. 코틀린 범위지정함수(Scope Function)란? 더보기 범위지정 함수는 고차함수로 정의되고.. 2023. 2. 18.
[안드로이드 면접] - 16 : 1. ListView 의 ViewHolder 패턴에 대해 설명하고 왜 사용하는 지 설명하시오. 더보기 ViewHolder 이란? View 를 관리를 하는 Holder를 가지고 화면에서 보이는 아이템 개수만 생성하고, 스크롤이 발생하면 ViewHolder에 등록한 뷰를 재사용한 후, 데이터만 바꿔주기 패턴이다. 이는 앱의 효율성이 향상되는 패턴이다. ListView 는 일반적으로 내부 화면에 보여질 뷰 배열만 몇 개 생성하고, 스크롤 되었을 때 이것을 재사용하게 된다. 이 부분은 ConvertView 를 이용하여 메모리 낭비를 줄인다고 생각하면 된다. 하지만, 뷰를 인플레이팅하는 과정은 ConvertView 를 이용하여 줄였지만, 뷰의 id 를 찾아서 데이터 세팅하는 과정은 계속해서 진행하기 때문에 고비용.. 2023. 2. 17.
[안드로이드] - MVC 패턴과 안드로이드 MVC 패턴 MVC 제록스 팰러앨토 연구소에서 스몰토크 관련 일을하던 Trygve Reenskaug 이 1979년 최초로 소개를 했다. MVC 패턴은 이름에서도 알 수 있듯이 모델(Model), 뷰(View), 컨트롤(Controller) 세 개의 컴포넌트로 이루어져있다. 각 컨포넌트는 고유한 역할을 수행한다. 모델(Model) 데이터 가공을 책임지는 컴포넌트를 말한다. 모델은 애플리케이션의 정보, 데이터를 나타낸다. 데이터베이서, 처음 정의하는 상수, 초기화 값, 변수 등을 뜻한다. 비즈니스 로직을 처리한 후 모델의 변경사항을 컨트롤러와 뷰에 전달한다. 모델은 다음과 같은 규칙을 가지고 있다. 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다. 뷰나 컨트롤러에 대해서 어떤 정보도 알지 말아야 한다. 변경이.. 2023. 2. 15.
[안드로이드 면접] - 15 : 1. 안드로이드 사용해본 레이아웃 설명하기 더보기 LinearLayout 여러 View 들을 가로 또는 세로 방향으로 나열할 때 사용하는 레이아웃이다. orientation 속성을 가지고 있어서 가로(Horizontal), 세로(Vertical) 을 설정할 수 있다. 자식들은 중첩되지 않고, 지정한 방향으로 쌓이는 형태로 표시된다. weight 속성은 가중치를 설정할 수 있다. 💡가중치 설정은 어떤건가? 이 속성은 뷰가 화면에서 얼마만큼의 공간을 차지해야 하느냐에 따라 해당 뷰에 '중요도' 값을 할당하게 된다. 다양한 디바이스 화면에 dp 가 아니라 비율에 따른 대응으로 좋다 하지만, 뷰 렌더링하는 과정에서 onLayout() 을 자주 호출하여 상관관계를 파악하기에 성능 상 좋지 않다. RelativeL.. 2023. 2. 15.