본문 바로가기
Android/이것저것

[Android] 프로그래밍 하면서 놓칠 수 있는 부분들

by 일상 속 둔치 2023. 6. 3.

프로그래밍을 하면서 의도치 않게 놓치는 부분들이 있다.

사소한 실수들이지만 때로는 크리티컬한 이슈로 이어지는 부분들이 있다.

 

이번 글에서는 필자의 그런 경험들을 작성해보고자 한다.

1. RecyclerView의 itemView 재활용

RecyclerView와 ListView의 가장 큰 차이점은 성능을 위해서 RecyclerView에서는 itemView를 재활용 한다는 점이다.

성능적인 부분에서는 이점이 많지만, 오히려 신경을 써주지 않으면 문제가 발생할 수 있다.

 

예를 들어서 하나의 RecyclerView에 itemType이 다르게 설계될 수도 있다.

그럴 때 다른 listener를 등록하기도 하고, 속성 값을 다르게 설정하기도 한다.

 

ListView로 설계를 했을 때에는 매번 새로 View를 그려주기 때문에 문제가 발생하지 않겠지만,

RecyclerView를 사용할 때는 이전에 사용하던 itemView를 사용하면서 이전 item의 listener나 속성 값이 남아있어

의도하지 않은 동작을 할 수도 있다.

 

만약에 다른 type의 itemView를 하나의 RecyclerView에서 사용하게 된다면 이 부분을 신경써주면 좋을 것 같다.

 

2. resource close

IO 등을 할 때에 실패할 수도 있기 때문에 보통 try-catch로 묶어서 사용한다.

이때, 사용한 stream을 close 해주지 않는다면 메모리 누수가 생기는 등 문제들이 발생할 수 있다.

이럴 때 편하게 사용할 수 있는 것이 try-with-resources 이다.

 

기존에는 finally에서 close를 해주었다면, try-with-resources를 사용할 때는 자원을 자동으로 반납해준다.

아래처럼 사용 했을 때 더 간결하고 안전한 코드를 작성할 수 있다.

public void readCursor(){
    try{
    	if(cursor.moveToNext()){
        	cursor.getString(0);
        }
    }
    catch(Exception e){
    	e.printStackTrace();
    }
    finally{
    	cursor.close();
    }
}

public void readCursorTryWithResources(){
    try(Cursor cursor = new Cursor()){
    	if(cursor.moveToNext()){
        	cursor.getString(0);
        }
    }
    catch(Exception e){
    	e.printStackTrace();
    }
}

 


 

 

RecyclerView로 동적 목록 만들기  |  Android 개발자  |  Android Developers

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. RecyclerView로 동적 목록 만들기   Android Jetpack의 구성요소 RecyclerView를 사용하면 대량의 데이터 세트를 효율적

developer.android.com

 

The try-with-resources Statement (The Java™ Tutorials > Essential Java Classes > Exceptions)

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Java Language Changes for a summary of updated

docs.oracle.com

 

댓글