Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

개선시켜야할 것들 #21

Open
dev210202 opened this issue May 23, 2023 · 3 comments
Open

개선시켜야할 것들 #21

dev210202 opened this issue May 23, 2023 · 3 comments

Comments

@dev210202
Copy link
Owner

dev210202 commented May 23, 2023

RecyclerView

1. RecyclerAdapter에서 파라미터로 위치 데이터 설정하지 않고 변수로 만들어서 사용함

위치 데이터를 받으면 변수에 데이터 전체를 대입(set)하고 notifyDataSetChanged() 호출.
Adapter에서 notifyDataSetChanged()를 호출하는 부분에서 리스트의 크기와 아이템이 둘다 변경되는 작업들을 수행하기때문에 올바르게 사용되고 있으나, 이것을 정확히 알고 사용한 것이 아니고, 프로그램의 확장성을 고려했을 때 개선할 수 있는 부분이 분명히 있어보인다.
문제점: notifyDataSetChanged를 사용해서 리스트에서 아이템이 하나만 바뀌어도 리스트 전체를 갱신해야함.

<개선할 수 있는 방법?>

  1. 갱신 방법을 변경한다.
    notifyItemChanged, notifyItemRangeChanged 등 상황에 맞게 처리한다.
  2. ListAdapter를 사용한다.
    위치데이터를 변수로 사용하지 않고 위치 데이터 타입을 ListAdapter의 파라미터에 넘겨주면 ListAdapter 내부에서 위치 데이터 리스트를 생성하고, 위치 데이터에 변경이 생기면 DiffUtil을 통해서 현재 리스트와 이전 리스트의 값을 비교해서 갱신하므로 notifyDataSetChanged를 호출하지 않아도 된다.

2. 새로운 Recyclerview를 만들때마다 사용할 RecyclerAdapter 클래스를 만들어줘야함

RecyclerView마다 새로운 Adapter와 ViewHolder를 생성하는 것은 낭비임. 재사용할 수 있게 만들려면 어떻게 해야할까?
래퍼런스
1
2

재사용을 위해서는 들어갈 Data와 표시할 View를 인스턴스를 생성할때 받고 BaseAdapter에서 처리해줘야한다.
Data는 BaseAdapter에서 사용할 리스트를 만들고 해당 데이터를 View에 바인딩하면 리스트를 매번 만들지 않아도 될 것이다.
View는 들어갈 컴포넌트들을 인스턴스를 생성할때 지정해야하므로 BaseAdapter의 파라미터에 BindView 메소드를 넣고 BaseViewHolder에서 사용하도록한다.

onCreate, onBind는 BaseAdapter에서 받은 함수 파라미터를 실행하게해서 인스턴스를 생성할때 View에 대한 처리를 하도록 만든다.

3. RecyclerView에 LayoutManager와 Adapter 등 지정해주는 것을 묶어서 처리하기

LayoutManager와 Adapter등 RecyclerView를 설정하는 코드를 묶어서 가독성을 올린다.

<개선할 수 있는 방법>

  1. also 함수를 사용
@dev210202 dev210202 changed the title 코드 분석 개선시켜야할 것들 Jun 12, 2023
@dev210202
Copy link
Owner Author

LifeCycle을 고려하지 않은채로 Coroutine과 Room 사용

@dev210202
Copy link
Owner Author

Repository 패턴 사용시 DataSource의 데이터를 그대로 전달하고있음. Data 스펙이 바뀔경우 관련된 코드들을 모두 수정해야하는 결합도가 높은 방식을 사용중.

@dev210202
Copy link
Owner Author

데이터 로딩중 끊기면 캐싱으로 처리해서 기존 데이터는 보이게 해줘야함

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant