경험의 기록

https://android-developers.googleblog.com/2021/07/jetpack-compose-announcement.html

 

Jetpack Compose is now 1.0: announcing Android’s modern toolkit for building native UI

Posted by Anna-Chiara Bellini , Product Manager, Nick Butcher , Developer Relations Today, we're launching version 1.0 of...

android-developers.googleblog.com

베타 버전이던 Jetpack Compose가

2021년 7월 28일 자로 정식 릴리즈 되었다.

 

❓ Jetpack Compose 란

  • XML레이아웃 대신 선언형 함수를 사용하여 UI를 구성
  • UI 개발 효율성을 극대화하기 위하여 개발됨
  • State로 UI를 동기화하여 버그 방지
  • Kotlin 으로 개발되었으며 Material Design 을 기반으로 함

 

즉, 기존의 XML레이아웃을 꾸며서 UI를 작성하는 방식이 아닌 코드로 작성하는 것이다.

@Composable 이라는 어노테이션을 사용하여 Composable 단위로 UI을 작성한다.

 

사용하려면 우선적으로

안드로이드 Arctic Fox 이상 버전을 사용 해야 한다.

 

기존에 사용하던 프로젝트에서 적용하려면

https://developer.android.com/jetpack/compose/setup

 

Jetpack Compose와 함께 Android 스튜디오 사용  |  Android Developers

Jetpack Compose로 최적의 환경에서 개발하려면 최신 버전의 Android 스튜디오 Arctic Fox를 다운로드해야 합니다. Jetpack Compose와 함께 Android 스튜디오를 사용하여 앱을 개발할 때 Compose UI를 즉시 미리 볼

developer.android.com

공식 문서를 참고하면 된다.

 

 

이 글은 Google 공식문서를 기반으로 작성되었습니다.

 


프로젝트 생성

Empty Compose Activity로 새로 생성해준다.

 

 

생성하면 기존과 다른 형태의 샘플 레이아웃과 코드를 확인할 수 있다.

이제 XML파일 대신 코드를 통해 레이아웃을 생성한다.

 

여기서 생소한 2가지 어노테이션을 확인할 수 있다.

 

  • @Preview : 레이아웃 미리보기 지원함.
  • @Composable : 기존의 View의 역할. 실행시 컴파일러에게 UI를 그리게 하며, 반환타입을 정하지 않고 순서를 신경쓰지 않으며, 동시 실행 가능하고 갱신, 취소 될 수 있다.

 

@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
    ComposeExTheme {
        Greeting("Android")
    }
}

@Preview 어노테이션은 레이아웃의 미리보기 기능을 지원한다.

showbackground 속성이 true 라면 기본 배경색을 White로 채워준다.

Preview를 빌드 하면

 

결과물을 미리 확인할 수 있으며

 

샘플 코드를 실행해보면 동일한 화면이 뜨는 것을 확인할 수 있다.

 

 

구조 살펴보기

이제 대략적인 구조를 살펴보자.

기본적으로 테마를 구성하는 Color, Shape, Theme, Type 클래스로 구성된다.

 

Color

Material Design 을 기본으로 하는 컬러들이 선언되어 있는 클래스이다.

 

Shapes

도형의 모양을 선언하는 클래스이다.

 

Type

텍스트 타입이 정의 되어 있으며

주석으로 처리되있는 부분은 기본 디자인들의 default 값이다.

이 값들을 오버라이드하여 디자인을 변경할 수 있다.

 

Theme

private val DarkColorPalette = darkColors(
    primary = Purple200,
    primaryVariant = Purple700,
    secondary = Teal200
)

private val LightColorPalette = lightColors(
    primary = Purple500,
    primaryVariant = Purple700,
    secondary = Teal200

    /* Other default colors to override
    background = Color.White,
    surface = Color.White,
    onPrimary = Color.White,
    onSecondary = Color.Black,
    onBackground = Color.Black,
    onSurface = Color.Black,
    */
)

@Composable
fun ComposeExTheme(darkTheme: Boolean = isSystemInDarkTheme(), content: @Composable() () -> Unit) {
    val colors = if (darkTheme) {
        DarkColorPalette
    } else {
        LightColorPalette
    }

    MaterialTheme(
        colors = colors,
        typography = Typography,
        shapes = Shapes,
        content = content
    )
}

테마를 구성하는 클래스이다.

 

Color에서 정의되어 있는 컬러를 바탕으로 다크테마, 기본테마를 정의하며

Type과 동일하게 default 값을 오버라이드 하여 값을 변경할 수 있다.

 

위에서 정의한 테마를 바탕으로

다크모드, 기본모드에 따른 테마를 지정해주고 Shapes와 Type에서 정의한 Typography를 바탕으로 테마를 생성한다.

 

MainActivity

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            ComposeExTheme {
                // A surface container using the 'background' color from the theme
                Surface(color = MaterialTheme.colors.background) {
                    Greeting("Android")
                }
            }
        }
    }
}

@Composable
fun Greeting(name: String) {
    Text(text = "Hello $name!")
}

@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
    ComposeExTheme {
        Greeting("Android")
    }
}

이제 다시 샘플코드로 돌아와보면, 텍스트가 생성되는 원리를 이해할 수 있다.

 

@Composable 로 작성된 Greeting 함수는 텍스트를 받아서 생성해주는 역할을 하며

onCreate에서 Surface를 사용하여 텍스트의 배경색을 지정하고, Android 텍스트를 넘겨주어 UI을 생성하는 것이다.

 

 

기본 머테리얼 디자인에서 임의로 색을 변경해보면

배경색이 변한 것을 확인할 수 있다.

단, Priview는 수정해주지 않았기 때문에 미리보기에서는 색이 변경되지 않는다.

 

기본 구조를 파악해보았으니

다음엔 본격적으로 사용법에 대해 알아보려고 한다.

 

https://github.com/HanYeop/Jetpack-Compose/tree/master/ComposeEx

 

GitHub - HanYeop/Jetpack-Compose: Jetpack Compose 사용해보기

Jetpack Compose 사용해보기. Contribute to HanYeop/Jetpack-Compose development by creating an account on GitHub.

github.com

 

 

 

참고

https://developer.android.com/jetpack/compose

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading