이력서를 위한 이력 관리는 어떻게 하는 것이 좋을까?

포트폴리오와 이력서는 어떻게 관리하는 것이 좋을까?

그냥 많은 프로젝트를 진행하고, 많은 활동을 하는 것이 좋을까?

이 글은 지극히 개인적인 생각을 담아 정리하기에 편하게 읽어주시길


이 글에서 알아볼 내용

  • 지극히 개인적인 내용을 담았습니다.

Read More

안드로이드 MVVM 따라 하기 - MVVM에서의 안티 패턴

Android MVVM 따라 하기 3 번째 글이다.

이번 글에서는 최소한 하지 않아야 할 부분을 적어보려고 한다.

안드로이드 MVVM은 결국 Lifecycle을 알고는 있다. 하지만 Context를 직접 접근하지는 않아야 한다.

class SampleViewModel {

  fun showMain(context: Context) {
    // Bad
  }

단순 데이터 전달이 없다면 어떠한 이벤트를 바로 View에서 처리하는 편이 더 좋다.

하지만 데이터가 추가로 필요한 경우, 상황에 따라 다른 화면으로 이동을 필요로 한다면 다음과 같이 작성하는 게 좋다.

  private val _showMain = MutableLiveData<Item?>(null)
  val showMain: LiveData<Item?>() get() = _showMain
  // or
  private val _showMain = MutableStateFlow<Item?>(null)
  val showMain: Flow<Item> get() = _showMain.filterNotNull()

  fun loadData() {
    // Load data
    _showMain.value = Item(...)
  }
}


이 글에서 알아볼 내용

  • ViewModel에서 할 수 있는 것과 하지 말아야 할 것은?
  • Context를 넘겨주면 안 되는 이유는?

Read More

안드로이드 Compose Scaffold, TopAppBar 활용한 개발

Android Compose에서는 어떠한 컴포넌트를 최상위로 두고 작업하는 것이 좋을까?

필자의 경우 Compose 시작점 코드는 아래와 같다.

class SampleActivity {

  fun onCreate() {
    setContent { // Compose 활용 시작
      SampleTheme { // 기본 Theme 정의
        CompositionLocalProvider(options) { // 내부에서 활용할 CompositionLocal 이 있다면 등록
          Scaffold { // 머트리얼을 따르는 기본 틀
            // 여기에서 View 처리
          }
        }
      }
    }
  }
}

Theme를 기본으로 적용하고, 여기에 CompositionLocalProvider를 필요에 따라 추가로 활용하고 있다.

그런 다음 Scaffold를 활용해 Material을 따르는 기본 틀을 활용하고 있다.


이 글에서 알아볼 내용

  • Material의 구조를 가볍게 살펴보자
  • Material의 Scaffold를 알아본다
  • TopAppBar를 알아본다.

Read More

안드로이드 Compose Preview를 잘 활용하는 방법은? - 함수를 잘 분리하자.

Android XML은 기본 Preview가 잘 나온다. 하지만 Compose는 Preview를 하기 위한 기법이 필요하다.

  • Preview를 잘하기 위해서는 Primitive types 또는 class 객체를 넘겨준다.
  • DI를 이용하는 경우 Preview가 힘들다.
  • DI를 활용하는 경우라면 @Preview 함수 내에서 DI에서 만들어주는 객체를 manual dependency injection을 통해 생성해 초기화 시켜야 한다.

그래서 추천하는 방식은 아래와 같다.

  1. DI를 활용한 ViewModel에서 전달받아 값을 처리하는 @Composable fun을 하나 만든다.
  2. Primitive types/data class/@Composable () -> Unit를 파라메터로 가지는 함수를 생성한다.
    1. 번을 Preview 하는 함수를 작성한다.
// 1번에 대한 구현
@Composable
internal fun MainContainer(viewModel: ViewModel) {
  val value by remember { viewModel.value }
  MainContainer(value)
}

// 2번에 대한 구현
@Composable
private fun MainContainer(value: String) {
  Text(text = value)
}

// 3번에 대한 구현
@Preview
@Composable
internal fun PreviewMainContainer() {
  SampleThemePreview {
    MainContainer(
      value = "value",
    )
  }
}


이 글에서 알아볼 내용

  • Compose Preview를 잘 그릴 수 있는 방법
  • ViewModel을 쉽게 활용하기 위한 방법

Read More

안드로이드 Compose Material 2 컬러 정보를 알아보자

Material Design은 크게 버전 2와 버전 3로 나눠지는데, 일반적으로 M2는 Material로 명시되어 있다.

안드로이드 12와 함께 나온 디자인이 머트리얼 3인데, 안드로이드 스튜디오에서 컴포즈 관련 새로운 프로젝트 생성 시에 함께 나오는 머트리얼 버전은 2이다.(안드로이드 스튜디오 패치 시 변경될 수 있다)

머트리얼 2와 3는 차이가 있다.

  • 색상에 대한 층이 머트리얼 3가 더 넓다.(하지만 모든 컬러를 구글의 기본 컴포넌트에서 활용하지는 않는다)
  • style 관련을 피그마 정보와 쉽게 연동되어 읽기 쉽다.
    • titleSmall, headlineLarge 와 같은 형태이다.
  • 3에서는 다이나믹 컬러를 제공한다. 일반적인 회사에서는 특별히 선호하지는 않을 것 같다.
  • 머트리얼 3에서 폴드 대응을 하기 위한 별도 라이브러리를 제공한다.
  • 머트리얼 3 용 Exo player 용 라이브러리도 제공한다.

지금 선택한다면 3를 선택하는 건 나쁘지 않다. 하지만 2를 선택하여 활용하는 경우도 많을 것 같아 이 글을 간단하게 정리해두려고 한다.

  • 3에는 아직 BottomSheet가 포함되어 있지 않아 결국 2와 3를 함께 활용해야 할 수 있다.


이 글에서 알아볼 내용

  • 머트리얼 2의 색상 정보
  • isLight가 뭘까?

Read More