| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- Android App Architecture Guideline
- Hilt
- 안드로이드 앱 아키텍처 가이드라인 예시
- 안드로이드 mvvm
- 안드로이드 Mockito
- 안드로이드 의존성주입
- 리싸이클러뷰 최적화
- 안드로이드 아키텍처 컴포넌트
- 안드로이드 리싸이클러뷰
- android clean architecture
- 안드로이드 Espresso
- Android MVVM
- 안드로이드 hilt
- android DI
- android memory leak
- 안드로이드 테스트코드
- 안드로이드 JUnit
- 코루틴
- MVVM
- 안드로이드 mvvm예제
- 안드로이드 클린 아키텍처
- 안드로이드 앱 아키텍처 가이드라인
- coroutine
- 스타트업 코딩테스트
- RxJava
- 안드로이드 앱 아키텍처 가이드라인 설명
- Koin
- 안드로이드 앱 아키텍처 가이드라인 사용법
- 안드로이드 최적화
- sharedFlow
- Today
- Total
안드로이드 연구소
[코딩테스트 제출 시 필독] 주석(@어노테이션)으로 코드 검사 개선 본문
앞 전에 Lint 검사와 Deprecated검사를 통해서
안드로이드에서 피해할 문법들을 알아보았습니다.
기본적으로 Android Studio에서 문법적 오류를 체크하는 IDE 또는
Lint검사나 기타 정적 분석 도구 또는 다른 다른 정적 검사 도구들에는 문제가 있습니다.
"R.id.문자열값" 넣어야하는 구문에서
"R.id.색상값", "R.id.그래픽값"을 넣더라도
정적 분석 도구들은 이를 오류로 찾아내지 못하고 있습니다.
하지만 실행을 하거나 해당 구문을 사용한 엑티비티에서 오류가 발생한걸 알 수 있습니다.
만약에 이때 이때는 "문자열값만 넣어줘야하는거야"라고 검사 도구들에게 알려주었다면
문자열 이외의 문구가 들어왔을 때 나올 오류까지도 검사도구들은 열심히 찾아주었을 것 입니다.
그렇다면 검사도구들에게 알려주 수 있는 방법 주석(어노테이션) 사용법을 알려드리겠습니다.
Q1. ChatGPT, 주석을 이용한 코드 검사 개선에 대해 설명해줘.
간단하게 어노테이션을 이용하여 코드의 품질을 보장하고 버그나 오류를 방지하는 코드 검사 프로세스입니다.
주석을 사용하여 Android Studio IDE 및 lint와 같은 기타 도구에 힌트와 메타데이터를 제공할 수 있습니다.
그런 다음 이 정보를 사용하여 다양한 검사 및 최적화를 수행할 수 있습니다.
간단하게 다양한 검사도구들에게 에러를 판단수 있는 힌트를 제공하는 기능정도 보면 좋을 것 같습니다.
Q2. 어떤 주석(어노테이션)들이 있지?
- @NonNull and @Nullable
: 매개변수, 필드 또는 반환 값이 null일 수 있는지 여부를 나타냅니다. null 포인터 예외의 위험이 있는 경우 경고 또는 오류를 제공할 수 있습니다.
fun doSomething(nullableParam: @Nullable String?) { // ... }
위 예제에서 파라미터로 null을 허용한 변수가 들어오게 세팅하였다면 바로 에러를 체크해줄 수 있겠죠?
- 리소스 주석 (@StringRes, @DrawableRes, @DimenRes, @ColorRes, @InterpolatorRes)
: 어떠한 리소스 유형이 필요한지를 확인할 수 유효성 검사를 할 수 있습니다.
fun showIcon(@DrawableRes iconId: Int) { val icon = ContextCompat.getDrawable(context, iconId) imageView.setImageDrawable(icon) }파라미터로 Drawable아닌 R.String이나 R.Color와 같은 리소스 값이나 단순 Int값을 들어오는 변수를 허용해줬다면 에러 체크를 정확하게 할 수 있을겁니다.
- 쓰레드 주석(@MainThread, @UIThread, @AnyThread 등 등)
@MainThread fun updateUI() { textView.text = "Hello, world!" } GlobalScope.launch { // Perform some background task here withContext(Dispatchers.Main) { updateUI() } }
@MainThread는 메서드가 기본 UI 스레드에서만 호출되어야 함을 나타내는 데 사용되는 주석입니다.
만약 Dispatchers.Main으로 메인쓰레드를 사용하지 않는 코루틴을 사용했을 경우에 대한
오류를 막을 수 있겠죠?
- Value 제한 주석(@IntRange, @FloatRange, @Size 등 등)
전달된 값의 범위를 체크할 수 있는 어노테이션입니다.
fun setVolume(@IntRange(from = 0, to = 100) volume: Int) { audioPlayer.setVolume(volume / 100f, volume / 100f) } setVolume(50)@IntRange(from=0, to=100)을 통해서 0부터 100까지의 숫자값이 들어오는 것을 허용하고
그 외의 Int값을 들어올 경우를 잡아줄 수 있습니다.
- 권한 주석 (@RequiresPermission)
: 디바이스에 해당 권한이 허용되었는지를 체크하는 어노테이션입니다.
@RequiresPermission(Manifest.permission.CAMERA) fun startCameraPreview() { }위의 예시처럼 카메라 권한이 허용 여부를 체크할 수 있습니다.
@RequiresPermission(allOf = [Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE]) fun takePicture() { }
또 위처럼 카메라와 외부저장소 쓰기처럼 여러개의 권한 여부를 동시에 체크할 수 있습니다.
- 반환값 주석 (@CheckResult)
: 해당 함수의 return값이 실제로 사용되는지 확인하려면 @CheckResult 주석을 사용하세요.
@CheckResult fun getUser(userId: String): User? { } fun showUserProfile(userId: String) { val user = getUser(userId) if (user != null) { // Display the user's profile } else { // The user was not found, so display an error message to the user } }getUser()함수가 실제로 사용되고 return값이 이용되는지를 확인합니다.
- @CallSuper 주석
: 슈퍼클래스 동작이 보존되고 서브클래스 구현에서 예기치 않은 동작을 방지하기 위한 주석입니다.
open class BaseActivity : AppCompatActivity() { @CallSuper override fun onStart() { super.onStart() } } class MainActivity : BaseActivity() { override fun onStart() { super.onStart() } }해당 엑티비티에서 BaseActivity의 onStart()메서드를
MainActivity에서 해당 메서드를 사용하기 위해서 BaseActivity를 상속하고 있는 클래스 예제들입니다.
BaseActivity에 onStart()메서드에 @CallSuper 주석을 달면
모든 하위 클래스가 super.onStart() 문을 사용하여 메서드의 슈퍼클래스 구현도 호출해야 함을 나타냅니다.
Q3. 어떻게 위의 주석들을 사용할 수 있어?
build gradle에서 아래 코드를 넣은 뒤 sync를 맞추고 해당 어노테이션들을 쓴 뒤에
안드로이드 스튜디오 상단의 Analyze > Inspect Code 를 누르시면 바로 검사가 가능합니다.
dependencies {
implementation 'androidx.annotation:annotation:1.6.0'
}
그럼 오늘은 여기까지로 마치겠습니다.
감사합니다.
구글 공식 문서: 주석으로 코드 검사 개선
https://developer.android.com/studio/write/annotations?hl=ko
주석으로 코드 검사 개선 | Android 스튜디오 | Android Developers
주석을 사용하여 린트와 같은 코드 검사 도구에 힌트를 줌으로써 보다 미묘한 코드 문제를 더 잘 탐지하는 방법을 알아보세요.
developer.android.com
'안드로이드 연구소' 카테고리의 다른 글
| [리싸이클러뷰 박사 교육과정] 리싸이클러뷰 최적화(1) - onBindViewHolder 최적화 (0) | 2023.05.08 |
|---|---|
| [리싸이클러뷰 박사 교육과정] 리싸이클러뷰 최적화(0) - Recyclerview 탄생배경과 작동원리와 문제점 (2) | 2023.05.06 |
| [코딩테스트 제출 시 필독] Deprecated메서드 제거 (0) | 2023.05.05 |
| [코딩테스트 제출 시 필독] 안드로이드 린트 검사(Android Lint) (0) | 2023.05.04 |
| [A급 개발자 되는 법] 안드로이드에서 메모리 누수 확인 방법 (0) | 2023.05.03 |