posted by Kyleslab 2012. 11. 8. 10:26

전부터 궁금했던것 Override를 하였을때 부모의 원메소드를 호출할때 super를 사용한다.

그런데 super를 먼저 사용하기도 하고 나중에 사용하기도 한다. 

안드로이드 경우 보통 생명주기에 관한 메소드를 오버라이드 할때 자주 사용하는데 이때에 한해 언제 사용하는게 좋은지 궁금했다. 

안드로이드쪽으로 유명한 블로거 커니님이 관련된 내용의 포스트를 하셔서 자세한 내용을 물어보았다.

http://androidhuman.tistory.com/entry/안드로이드를-위한-자바-오버로딩Overloading-오버라이딩Overriding의-이해

오버라이드인 경우 꼭 super.onCreate(); 라인 밑에다가 자신이 해야할 일들을 작성해야 하는 이유가 있나요?
작성된 소스들을 보거나 실제로 해봐도 그전이나 그후에 해도 작동에 차이를 안보이는 듯했습니다.
또한 이클립스에서 오버라이드를 하면 TODO주석이 super라인 전에 달립니다.
먼저 부모 메소드의 일을 진행하고 내일을 하는 것과 내일을 하고 부모일을 진행하는 것 어떤 차이가 있는지요?
쓰다보니 먼가 따지듯이 적은 것 같지만 정말 궁금해서 댓글 남겨봅니다.

2012/11/06 17:44 ADDR : EDIT/ DEL : REPLY ]
  • 결론부터 말씀드리자면 상황에 따라 다 다릅니다.
    구현에 따라 부모 메서드를 먼저 호출하지 않으면 제대로 동작하지 않는 것도 있을 것이고, 어떤 경우에는 상황에 따라 자식 메서드와 부모 메서드 둘 중 하나만을 호출하도록 할 수도 있습니다. 

    간단히 예를 들자면

    if(condition){ // 어떤 상황에선
    // 자식 메서드의 구현으로 처리하지만
    }else{ // 그 밖의 상황은
    super.method(); // 부모 메서드의 방식 사용
    }

    이렇게 구현될 수도 있겠죠.

    액티비티의 Lifecycle 메서드를 오버라이드 할 때, 일반적으로는 순서를 바꿔도 별 상관이 없지만 액티비티 상태 저장/복귀가 일어나는 경우 순서를 바꾸면 오동작할 가능성이 있습니다. 때문에 개인적으로 부모 메서드 호출을 가장 먼저 하는 것을 권장합니다.

    2012/11/06 21:52 ADDR : EDIT/ DEL ]

결론은 상황에 따라 다르지만 안드로이드의 경우는 먼저 하는것을 추천해주었다.


일반적인 경우라면 상황에 따라 다른 것이 맞다. 부모메서드가 해야할일이 있다면 super를 부르는 것이 당연하고 그전에 무언가 처리해야할일이 있다면 super를 나중에 부르고 부모가 먼저 해줘야하는 일이 있다면 super를 먼저 부르면 된다.





'Mobile > Android' 카테고리의 다른 글

Fragment를 이용한 TabActivity  (0) 2012.11.09
Fragment(1)  (0) 2012.11.09
IntentService  (0) 2012.11.06
weight값설정시 최적화  (0) 2012.11.06
한 앱에서 라이브러리와 값 공유  (0) 2012.11.02