[안드로이드] static을 자주 쓰면 안되는 이유


Android/안드로이드 프로그래밍 2013.06.24 09:45





 코드를 짜다보면 뷰의 구조가 복잡해서 혹은, 다르게 뷰와 뷰 사이에서 무언가 함수를 실행시키기 위해서 static을 사용하는 경우가 있다. 

Static을 사용하는 보편적인 경우는 Constant 변수에 사용을 해서 메모리에 상주를 시켜놓고 따로 해당 클래스의 instance를 생성하지 않고도 여러 곳에서 공통적으로 사용하는 변수에 사용을 하게 된다. 


이를테면, StringConst.java 란 파일에 

public static final String PRODUCT_ID = "product_id";

위와 같이 여러 Constant변수를 생성해서 사용할 때 많이 사용이 된다. 


 프로젝트를 진행하다가 뷰안에 여러개의 뷰가 들어가 있고, 이를테면 부모뷰 아래에 있는 다른 뷰에서 무언가 작업을 했을 때 부모뷰까지 영향을 주기 위해서 Listener나, Broadcast같은 방법을 사용하지 않고 Static으로 고정시켜서 쓰는 경우가 있다. 자식뷰가 켜지기 위해서 항상 부모뷰가 생성이 되고 자식뷰가 나타나기 때문에 견고하다고 생각할 지 몰라도, 생각보다 꽤 위험한 방법이였다. 

 죽는 문제를 떠나서 부모뷰나 자식뷰에서 자잘한 UI문제가 발생한다. (간헐적으로 발생하고 꽤나 불안정하다) 그 이유는 위에서 이야기했듯이, instance가 생성이 되던말던, static으로 짜여진 함수나 뷰, 변수들은 항상 메모리에 상주하게 되기 때문에, 고정되어 있는 변수는 큰 문제가 없지만, 유동적인 뷰의 경우에는 그 값이 바뀌지 않거나 이미 고정되어 있기 때문에 다양한 오류들을 만들어낼 가능성이 높다. 


 아무리 진행속도가 급해도 뷰에 static을 쓰는 오류는 범하지 말아야 하는 이유다. 

오늘의 블록체인 뉴스

WRITTEN BY
ShakeJ

0 , 댓글  2개가 달렸습니다.
  1. 조금 이해가 안 되는게, 애초에 저런 특성은 다 알고서 쓰는 거 아니었나요?

    static 변수 사용을 오류라고까지 말해가며 드는 예시 치고는 너무나도 당연하달까.

    대부분 저 정도는 알고서 쓰기에 실무에서 큰 문제 없이 잘 쓰이는 것이죠... 값이 계속 바껴야 하는 유동적인 곳에 static을 쓰는 실수를 범한 적도 없구요.

    • 음.. 제가 좀 더 자세히 적었어야 했는데 죄송합니다.
      글을 쓴 이유는, 애초에 알아야 할 특성을 모른 채 쓰시는 분들도 많더라구요~ 다른 곳에서 만든 소스를 받아 다시 작업을 해야 하는 경우 생각보다 이런 경우가 많아서 적었던 경우입니다 :) 값이 계속 바껴야 하는 부분에 static을 사용하는 것은 상황에 따라 쓰일수도 에러가 나지도 않지만, 뷰를 static으로 선언해서 사용하는 경우가 있더라구요 :)
      댓글 감사합니다 :)
secret