본문 바로가기
개발/Android

[Android] Annotaion 개념 정리 및 예제

by 1인용 놀이터 2025. 5. 7.
728x90
반응형

 

어노테이션(Anotation)

 

자바, 코틀린에서 @을 이용하여 코드에 부가적인 정보를 부여하는 방법으러 컴파일러, 런타임 시스템 등이 이를 사용할 수 있게 정형화된 방법을 뜻한다.

 

보통 어노테이션과주식을 비교를 많이 하는데, 주석은 어노테이션처럼 코드에 대한 정보를나타내나 실제 프로그램에 영향이 없는 반면 어노테이션은 영향을 주는 특징이 있다.

직접 실행되지는 않지만, 컴파일러나 Android Lint, 프로가드(ProGuard), Gradle, Room 등의 툴이 이 정보를 해석해서 코드 검사, 최적화, 자동 생성 등에 활용합니다.

 

기본개념

자바/안드로이드에서 어노테이션은 @로 표시되고, 클래스, 메서드, 변수 등에 부착 된다.

 

@NonNull
String getName() {
    return "ChatGPT";
}

 

해당 코드는 "getName()은 null을 절대 반환하지 않아야해" 라는 의미가 된다.

안드로이드스투디오가 이걸 기반으로 NullPointerException 위험을 띄울 수 있다. 

 

자주쓰는 어노테이션 종류

  1. @NonNull : null 이 들어오면 안됨
  2. @Nullable : null이 들어 올 수 있음
  3. @UiThread : 해당 메소드는 반드시 UI 스레드에서 실행되어야 함
  4. @WorkerThread : 해당 메소드는 반드시 백그라운드 스레드에서 실행
  5. @MainThread : 메인 스레드에서만 실행
  6. @AnyThread : 어떤 스레드에서도 호출 가능
  7. @CallSuper : 오버라이딩 할 때 super 호출을 반드시 해야 함
  8. @Keep : 프로가드 난독화에서 해당 클래스/메소드/필드를 제외
@UiThread
public void updateUI() {
    // UI 갱신 코드
}

 

Room DB 관련 어노테이션

  1. @Entity : 테이블을 정의
  2. @Dao : DB 접근 객체 정의
  3. @Query : 직접 SQL을 작성
  4. @Insert, @Update, @Delete : 기본 쿼리 자동 생성
  5. @PrimaryKey : 기본 키 지정 
  6. @Embedded : 객체를 테이블 안에 포함
  7. @Ignore : DB에 무시되는 필드나 메소드

Lint, Gradle, 빌드 도구 관련

  1. @SuppressLint("....") : Lint 경고 무시
  2. @VisibleForTesting : 테스트용으로 노출된 메소드임을 표시
  3. @Deprecated : 사용하지 말아야 할 API
@SuppressLint("MissingPermission")
public void accessLocation() {
    // 권한 체크 없이 위치 접근
}

 

어노테이션 사용 이유

  1. 코드 품질 향상 : 잘못된 사용을 컴파일 타임에 알려준다.
  2. 자동화 : Room, Dagger, Hilt, Retrofit 등 많은 라이브러리는 어노테이션으로 코드를 자동 생성
  3. 가독성/문서화 : 동료 개발자도 쉽게 이해할 수 있음
  4. 최적화 : @Keep 등은 빌드 최적화 과정에서 필요한 정보 제
728x90
반응형

'개발 > Android' 카테고리의 다른 글

[Android] Preference 정리  (0) 2025.05.12
[Android] Service를 통한 Activity 전환  (0) 2025.05.09
[Android] Room 개념 정리 및 예제  (1) 2025.04.23
[Android] RecyclerView ?  (0) 2025.04.11
[Android] ViewBinding 정리  (1) 2025.03.13