일일 회고
정말 일주일 밖에 안남았다... 시간이 참 빠르다... 최종 발표 준비를 잘 해보고 유종의 미를 거둬보자..
오늘의 키워드
- 기술 면접 문답 작성
Sealed class란?
여러 자식 클래스들이 하나의 부모 클래스를 상속받았다고 할 때, 컴파일러는 어떤 클래스들이 부모 클래스를 상속받았는지 알지 못한다.
그래서 이 문제를 해결하기 위해 sealed class라는 개념이 나왔는데 sealed class는 자신은 추상클래스이고, 자신을 상속받는 자식 클래스의 종류를 제한하는 특성을 가지고 있다. 컴파일 시 sealed class의 자식이 어떤 것이 있는지 알 수 있다는 것이다.
자식 클래스의 종류를 제한하기 때문에 다음과 같은 특성이 있다.
- 실드란 '봉인된'이라는 의미로 무언가 안전하게 보관하기 위해 묶어 두는 것
- 실드 클래스 그 자체로는 추상 클래스와 같기 때문에 객체를 만들 수는 없다.
- 생성자도 기본적으로는 private이며 private이 아닌 생성자는 허용하지 않음
- 실드 클래스는 같은 파일 안에서는 상속이 가능 (다른 파일에서 상속 불가) 블록 안에 선언되는 클래스는 상속이 필요한 경우 open 키워드로 선언
이와 같은 특성 때문에 sealed class를 상속 받은 클래스는 한 곳에 모아 관리하기 쉽다는 장점이 있다.
(일반 클래스를 무분별하게 상속하다보면 어디서 뭐가 쓰인 지 헷갈릴 수도 있을 것이다.)
안드로이드에서 ANR이란 무엇이고, 어떻게 방지할 수 있나요?
Application Not Responding의 약자이며, 안드로이드에서 애플리케이션이 일정 시간 동안 응답하지 않을 때 발생하는 오류이다.
사용자가 앱을 실행하거나 상호 작용할 때 앱이 일정 시간 내에 응답하지 않으면 시스템이 ANR을 감지하고 해당 앱을 강제로 종료시킨다.
ANR 발생 조건 예시
- 5초 이내에 터치 이벤트에 대한 응답이 없을 때
- Broadcast Receiver의 onReceive()가 5초(포그라운드) 내로 리턴 되지 않을 때
- 서비스를 특정 시간 이내에 실행할 수 없을 때
- UI가 없는 브로드캐스트 리시버, 서비스도 실행 주체는 메인 쓰레드이므로 긴 시간을 소모하는 작업일 경우 ANR을 발생시킴
등 여러 가지 조건이 있다.
ANR을 방지하기 위해서는 다음과 같은 사항들을 적용해 볼 수 있다.
- 메인쓰레드에서 긴 작업 피하기(중요) - 안드로이드는 메인쓰레드가 UI작업을 처리하므로, 메인 쓰레드에서 오랜 시간이 걸리는 작업을 피해야한다.
- 백그라운드 쓰레드 활용 - 메인쓰레드를 차단하지 않고 작업을 하기 위해, 비동기로 작업해야하고, Thread, Coroutine 같은 백그라운드 쓰레드를 사용할 수 있다.
- 응답 시간을 고려한 딜레이 사용 - 시간이 오래 걸리는 작업을 수행 할 때는 ,사용자에게 작업 중을 알리는 UI(다이얼로그, 프로그레스바 등)를 보여주고, 작업이 끝나면 UI를 업데이트 한다.
'내일배움캠프 7기 > TIL' 카테고리의 다른 글
내일배움캠프 7기 Android TIL 75일차 (2023.11.15) (1) | 2023.11.16 |
---|---|
내일배움캠프 7기 Android TIL 74일차 (2023.11.14) (0) | 2023.11.14 |
내일배움캠프 7기 Android TIL 72일차 (2023.11.08) (0) | 2023.11.08 |
내일배움캠프 7기 Android TIL 71일차 (2023.11.06) (0) | 2023.11.06 |
내일배움캠프 7기 Android TIL 70일차 (2023.11.03) (1) | 2023.11.03 |