마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 사용자 정의 함수 생명주기 질문드립니다.

0 추천
안녕하세요 안드로이드에 입문한지 한달밖에 안 된 학생입니다.

주변 사람들이 안드로이드를 위해서 자바를 많이 알아야한다고 해서 자바 공부를 겸해서 하고 있는데요.

직접 만지다보니 자바와 많이 다르다고 생각되면서 생긴 의문입니다.

 

자바의 경우 여러개의 사용자 함수를 만든다음에 메인함수에서 각 클래스 또는 메소드를 이용하는데요.

안드로이드에서도 이런 경우를 많이 본 것 같습니다. 그런데 안드로이드에는 메인 함수가 없고

메인 함수라고 여길 수 있는 것이 onCreate함수라고 들었습니다.

그런데 구현한 샘플코드들을 보면 여러개 지정해놓은 메소드들을 onCreate에서만 실행하는 것이 아니라는 것을 느꼈습니다.

그래서 안드로이드 생명주기를 공부했는데 보면 안드로이드 SDK에서 주어준 onCreate, onResume, onDestory 등에 대한 실행 시기는 나와있는데 사용자가 만든 메소드들이 언제 실행하는지는 알수 없던데요.

혹시 이에 대해서 어떻게 생각하면 될까요?

예를 들자면 onBackPressed 함수라던가.. 이런 것에 대해서요...

답변 주시면 감사하겠습니다.
nanapig94 (240 포인트) 님이 2015년 7월 31일 질문
안드로이드 관련 서적을 한권사서 그걸 파세요. 여기다 이런 질문 올리시지 마시구요. 그게 더 도움 될겁니다.

4개의 답변

+1 추천
 
채택된 답변
별별 답변이 다 달렸네..main 함수가 자바에 있는지 없는지도 모르는 답변은 뭘 저리 긴지...기본의 기본도 모르는 것들이 답변이라고 올린것 하고는...

원래의 자바는 콘솔 기반언어이므로 입출력이 콘솔로되어있고, 외부에서 호출되는 메소드는 main 함수뿐이라고 보면됩니다.

안드로이드는 전체적인 문법과 라이브러리 구조를 자바를 그대로 승계했으므로,

도움이 될것이라는 겁니다. 안드로이드 서적에선 자바 기본 문법이나 구조는 대부분 다루지 않습니다.

당연히 안다는 전제를 깔고 가기 때문이죠. 그런 맥락으로 추가 공부를 해야하겠습니다.

안드로이드는 UI가 있는 Event-Driven기반의 아키텍쳐를 가지고 있습니다. 윈도우즈를 위시로 맥, X윈도우등 대부분의 GUI 아키텍쳐가 가지는 이벤트 중심 구조이므로 어떤 이벤트마다 각 특정 메소드가 매핑되어있습니다. 운영체제 설계자에의해 미리 정해졌다는거죠. 서블릿이나 jsp는 이벤트 드리븐 구조를 아주 잘 보여주고 있습니다. 안드로이드와 같은 형태이죠. Win32나 asp도 마찬가지.

따라서 사용자 메소드는 일반 자바처럼, C처럼 사용자가 부를 때나 호출됩니다.

다만 이미 매핑된 함수의 override함수는 이벤트 발생시에 호출되겠죠.override나 상속, 다형성등은 자바책이나 객체지향 책을 숙지하고 있어야하겠습니다.
익명사용자 님이 2015년 7월 31일 답변
nanapig94님이 2015년 8월 3일 채택됨
정확한 답변이 된 것 같습니다. 정말 감사합니다.
이제 안드로이드를 좀 더 잘 이해하기 위해서 Event-Driven기반의 아키텍쳐가 뭔지 알아야겠군요. 그리고 잘 사용하기 위해서 객체지향의 상속, 다향성 등을 더 공부해야겠구요.
+1 추천

일단 제가 한가지 이야기하지면 main 함수라고 하는 것인 아마 생성자를 이야기하는 것 같은데요.

일단 잘못아시는 것중 가장 큰건 생성자(Constructors) 는 있습니다.아마 대부분 Activity를 만들다 보시면 생성자를 생략하고 onCreate(..)에서 초기화등을 처리하기 때문에 그렇게 느끼실수 있지만, 묵시적으로 상속받은 부모클래스의 생성자를 이용해서 생성하기 때문에 없는 것 처럼 보일뿐입니다.

다음으로 사용자 메소드의 실행시기는 사용자가 만들었기때문에 사용자가 정의 합니다. 사용자 정의 메소드라고 하시고 질문한 부분도 약간 이상한 부분이 계신데요. 제가 느끼기엔 이벤트 처리 함수들에 대해서 물으시는 듯한 느낌이 강합니다.onBackPressed 는 일반적으로 사용자 정의 메소드라기 보다는 Override. 즉 부모의 이벤트 처리 메소드를 제정의하는 메소드입니다.그리고 일반적으로 on으로 시작하는 메소드들은 특정 이벤트가 발생했을때의 처리를 담당하게 되는 메소드입니다. 이런 부분들은 이미 부모 클래스에 추상화 되어 정이된 부분을 제정의해서 쓰게 되게 됩니다. 물론 이벤트 핸들링을 위해서 인터페이스를 상속받거나 해당 오브젝트에 할당해서 사용할수도 있습니다.

대충 여기까지 하고 안드로이드와 자바가 많이 달라보이는 이유는 java는 최상위 클래스부터 시작해서 application을 구현하나  android는 많이 상속받은 activity부터 시작하는 것때문에 차이를 느끼시는 듯합니다.

java.lang.Object-android.content.Context-android.context.contextwrapper-android.view.contextthemewrapper-android.app.activity

사용자는 저 Activity 클래스를 다시 상속받아서 시작하게 되는 것입니다.

아무튼 이벤트 헨들러를 직접 구현하는 정도까지 공부하시게 되면 좀더 많이 보이실 것 같습니다.

다른 여러분들을 추천과 같이 열심히 공부하셔야 할 것 같습니다. ^^

컴러기 (22,230 포인트) 님이 2015년 7월 31일 답변
답변을 보니 역시 아직 제대로된 개념이 잡혀있지 않은 것 같습니다.
좀 더 여러가지 샘플코드를 구현해보면서 개념을 잡아가야겠군요.
좋은 답변 감사합니다. on으로 시작되는 method가 부모의 이벤트 처리메소드를 재정의하는 것이라는 것을 알게되었네요.
+1 추천
메인 함수라 지칭하는 걸 보니 C언어나 절차지향언어 하시다 넘어오신 것 같네요. 아니면 말고 ㅎㅎㅎㅎ

 

안드로이드에서 사용자인터페이스를 구성하는 기본단위(화면)은 Activity 입니다. 화면을 꾸며야하니 당연히 Activity를 상속받는 클래스를 작성하는 것이죠.

우선 Activity 생명주기를 보시고 콜백메서드에 대해 이해를 하시면 될것 같네요.

사용자 함수?라는게 그냥 본인이 작성한 메서드를 말하는거 같은데

예를 들면 public int getAge(){...};  이런거겠죠.

 

그런데 언제 실행하냐는 질문자체가 이해가 안갑니다.

 

만약 어플이 구동되고 화면이 띄워진 상태에서 '나이조회'라는 버튼을 눌렀을 때 사용자 함수( 여기서는 예로 getAge)를 호출 되어야 한다고 하면 당연히 '버튼을 눌렀을때' 말씀하신 사용자 함수를 콜하면 되겠죠.

즉, '버튼을 눌렀을 때'란 버튼에 클릭리스너를 달고 onClick 메서드를 오버라이드 하는 부분에다가 getAge()를 호출하면 된다는 뜻이죠.

 

'나이조회'라는 버튼이 화면안에 xml로 그려져있다고 가정하고

순서를 보면,

어플이 구동 -> onCreate() 에서 해당 xml로 화면을 구성(setContentView)

이때, 버튼에 리스너를 달고

btn.setOnClickListner( new OnClicklistner(){

 public void onClick(){

//클릭했을 때 로직, 여기서는 getAge()로 로직 작성

}

})

 

너무나 당연한 이야기를 적는것 같아 민망하네요 ㄷㄷ
치솟음 (3,710 포인트) 님이 2015년 7월 31일 답변
저의 난해한 질문을 잘 이해하고 답변을 달아주셔서 감사합니다.
코드를 첨가해서 알려주시니 더 이해하기 쉬었던 것 같습니다.
0 추천
사용자들이 만든 메소르라는게.. 님이 직접 사용하시려고 만드신건가요?

언제 실행되는지는.. 당연히 호출한 시점에 실행되는 것이고. 질문이 좀 애매하네요..

조금만 더 공부하시면 이해하실 수 있을텐데 생각 정리 되시면 다시 질문해주세요~
작전동 (5,890 포인트) 님이 2015년 7월 31일 답변
...