내일배움캠프 30일차

김재현·2024년 4월 8일

오늘은 프로젝트 진행중 궁금했었던 내용을 정리해서 개념 정리를 해보았다.

액티비티 생명주기 호출(실습)

  • 생명주기에 대해 알아보기 위해 다음과 같은 코드 작성 후 동작해보았다.
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val textView = findViewById<TextView>(R.id.text_Status)
        textView.text = "activity created"

    }

    override fun onStart() {
        super.onStart()

        Log.d("TAG", "onStart : activity started")
    }

    override fun onResume() {
        super.onResume()

        Log.d("TAG", "onStart : activity resumed")
    }

    override fun onPause() {
        super.onPause()

        Log.d("TAG", "onPause : activity paused")
    }

    override fun onStop() {
        super.onStop()

        Log.d("TAG", "onPause : acitivity stopped")
    }

    override fun onDestroy() {
        super.onDestroy()

        Log.d("TAG", "onPause : activity died")
    }
}
  • 시작


    앱을 켰을때 onCreate()가 최초로 호출되고

    onStart와 onResume이 호출되었다.

  • 백그라운드


    홈 버튼으로 백그라운드에 앱을 두었더니 onPause와 onStop이 호출되었다.

    다시 앱으로 돌아오니 onRestart와 onStart, onResume이 실행되었다.

  • 종료


    마지막으로 앱을 종료할때는 onPause, onStop, onDestroy가 순서대로 호출되었다.

  • 생명주기를 직접보니까 뭔가 신기했다.

참고 : https://rkdrkd-history.tistory.com/47

싱글톤이란

  • 과제를 구현하면서 알게된 단어인 싱글톤 패턴이 무엇인지 궁금했었는데 한번 알아보았다.

  • 싱클톤이란 어떤 클래스가 최초 한번만 메모리를 할당하고 그 메모리에 객체를 만들어 사용하는 디자인 패턴이다. 생성자의 호출이 반복적으로 이루어 지더라도 실제로 생성되는 객체는 최초에 생성된 객체를 반환해 주는 것이다. 즉, 객체를 한번만 생성하고 생성된 객체를 재사용하면서 객체의 재생성 비용을 줄이는 패턴이다.

  • 코틀린에서는 클래스 이름앞에 object 키워드를 붙이면 싱글톤 클래스를 만들 수 있다.
    이 경우에는 생성자를 호출하지 않는 클래스에서만 사용할 수 있다.

  • companion object는 생성자를 통해 파라미터를 전달받는 싱글톤 클래스이다.

반복되는 객체의 인스턴스 사용에서 메모리 낭비를 방지하기 위해 사용한다는 점은 이해되었다!

리사이클러뷰에 각 기능에 대해서

  • recyclerView는 말 그대로 view를 재활용하여 사용하는 방법으로 listView의 단점을 보완한 상위 호환이라고 알고 있다. 스크롤 할 때마다 맨 위의 아이템이 삭제되고 맨 아래 아이템이 생성 되길 반복했던 listView와는 달리 맨 위의 아이템을 재활용하여 아래로 이동해 재사용되는 것이 recyclerView이다.

  • Adapter

    • 데이터를 목록 형태로 보여주기 위해 사용된다.
    • 데이터를 아이템 뷰와 연결하는 역할.
  • ViewHolder

    • 아이템 뷰를 저장하고 표시하는 역할.
    • 스크롤 해서 위로 올라간 View를 재활용하기 위해 View를 기억하는 역할을 합니다.
    • 각 뷰들을 itemView.findViewById를 사용해 해당 뷰를 연결한다.
  • onCreateViewHolder

    • 뷰가 만들어질 때(onCreate) 호출되는 메소드입니다.
    • 레이아웃을 인플레이트하여 뷰 홀더를 생성해 return 해준다.
  • onBindViewHolder

    • 뷰가 바인드(bind)될때 호출되는 메소드로 onCreateViewHolder에서 뷰가 만들어졌다면 onBindViewHolder는 뷰에 내용이 씌워지는 때이다.

    • onBindViewHolder는 스크롤을 내리거나 올릴때마다 호출된다.

  • gemItemCount

    • 리스트의 수를 return합니다.
  • LayoutManager

    • 데이터나 아이템들이 리사이클러뷰 내부에서 배치되는 방식을 관리합니다.
    • LinearLayoutManager : 수평, 수직으로 배치 시켜줍니다.
    • GridLayoutManager : 그리드 화면으로 배치 시켜줍니다.
    • StaggeredGridLayoutManager : 높이가 불규칙한 그리드 화면으로 배치 시켜줍니다.

참고 : https://uknowblog.tistory.com/29
https://velog.io/@ouowinnie/Kotlin-%EA%B0%9C%EB%85%90-%EB%A6%AC%EC%82%AC%EC%9D%B4%ED%81%B4%EB%9F%AC%EB%B7%B0-RecyclerView

하루의 마무리

  • 오늘은 발표회 진행하고 프로젝트 진행중 궁금했었던 키워드와 실습을 해보면서 궁금증을 해소해보았다.

0개의 댓글