반응형
Greensky0026
삽질러의 대환장 공사판
Greensky0026
전체 방문자
오늘
어제
  • 분류 전체보기 (241)
    • Language (56)
      • JAVA (13)
      • Swift (38)
      • Kotlin (4)
      • Dart (0)
      • PHP (0)
      • JavaScript (1)
    • IDE & Framework (92)
      • Spring (10)
      • Android (48)
      • iOS (8)
      • NodeJS (1)
      • CodeIgniter (3)
      • Flutter (1)
      • 분류중 (18)
    • Infra (8)
    • Database (12)
    • VCS (4)
    • Debug Log (34)
      • java (7)
      • swift (3)
      • Android (9)
      • Web (7)
      • 삽질기 (7)
    • Others (19)
      • 코딩테스트 풀이 (0)
      • IT 이야기 (18)
    • 쉼터 (2)
    • 개발공부 (14)
      • Network (1)
      • 자료구조와 알고리즘 (2)
      • Code design (8)
      • ETC (1)
      • 아카이브 (1)

블로그 메뉴

    공지사항

    • 프로그래머스 코딩 테스트 관련글 비공개 처리

    인기 글

    태그

    • 프로그래머스
    • map
    • xcode
    • 공부
    • Android
    • Java
    • kotlin
    • reduce
    • IT
    • swift
    • JSP
    • level1
    • 프로그래밍
    • 예제
    • 구축
    • 코딩테스트
    • swfit
    • 개발
    • 타입
    • ios

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    Greensky0026

    삽질러의 대환장 공사판

    AAC MVVM - (3)AAC ViewModel + ViewBinding
    IDE & Framework/Android

    AAC MVVM - (3)AAC ViewModel + ViewBinding

    2021. 10. 17. 20:29
    반응형

    역할 : View에 필요한 데이터를 담당하고, 비즈니스 로직을 담당해 데이터를 처리한다.

    즉, View와 Model 사이에 위치한다고 볼 수 있다.

    애초에 나온 이유는 view와 model간의 결합도를 낮추기 위함으로,

    ViewModel이 View를 참조하면 의미가 없어진다,

    따라서, ViewModel은 View를 참조하면 않된다.

    또한, view는 model이 아닌 viewmodel을 통해서만 data에 접근가능해야 한다.

     

    AAC ViewModel을 사용했을 때, MVVM 구현에 어떤 이득이?

    수명주기를 고려할 수 있기 때문,

     

    class ChronometerViewModel : ViewModel(){
        private var startTime: Long = 0
    
        fun getStartTime(): Long = startTime
    
        fun setStartTime(){
            if(startTime <= 0) {
                this.startTime = SystemClock.elapsedRealtime()
            }
        }
    }

    →Activity가 data에 대해 알 필요도, 접근할 필요도 없도록 ViewModel이 모두 작업

    Activity는 해당 작업을 하는 함수를 호출만 하면 된다.

    class MainActivity : AppCompatActivity() {
    
        private lateinit var chronometerViewModel: ChronometerViewModel
        private lateinit var binding: ActivityMainBinding
        private lateinit var chronometer: Chronometer
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            binding = ActivityMainBinding.inflate(layoutInflater)
            setContentView(binding.root)
            chronometer = binding.ch
    
            chronometerViewModel = ViewModelProvider(this).get(ChronometerViewModel::class.java)
    
            showChronometer()
        }
    
        private fun showChronometer(){
            chronometerViewModel.setStartTime()
            chronometer.base = chronometerViewModel.getStartTime()
            chronometer.start()
        }
    }

    → ViewBinding만을 사용해 작업

    Activity는 Chronometer의 시간을 설정하고, 시작할 뿐,

    data에 관련된 일체의 작업도 하지 않는다.

     

     

     

     

     

     

     

     

     

     

     

    반응형
    저작자표시 비영리 (새창열림)

    'IDE & Framework > Android' 카테고리의 다른 글

    [Kotiln] 실행아이콘이 없는, 런처가 없는 앱 만들기  (0) 2021.11.02
    [Kotlin] ContentResolver 기본 : 통화내역(Call log) 조회  (0) 2021.11.02
    AAC MVVM - (2)Data binding  (0) 2021.10.17
    AAC MVVM - (1)Live Data  (0) 2021.10.17
    View binding 사용해보기  (0) 2021.10.17
      'IDE & Framework/Android' 카테고리의 다른 글
      • [Kotiln] 실행아이콘이 없는, 런처가 없는 앱 만들기
      • [Kotlin] ContentResolver 기본 : 통화내역(Call log) 조회
      • AAC MVVM - (2)Data binding
      • AAC MVVM - (1)Live Data
      Greensky0026
      Greensky0026
      점이 모여 선이 된다. 내 삽질도 언젠간 거대한 지하 도시가 되겠지!

      티스토리툴바