안드로이드 스튜디오를 설치한 후
첫 프로젝트를 만들게되면
MainActivity.java
package com.example.test_1;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
비슷하게 나오게 됩니다.버전에따라 조금의 차이가 있을 수 있으나
package com.example.test_1;
부분은 패키지명입니다.
프로젝트명과 다르게 바꾸면 작동을 안합니다.
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
부분은 안드로이드 기본 설정들을 불러오는것이고
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
부분은 클래스라 합니다.
클래스의 선언부에 extends가 들어간 걸로 봐서 AppCompatActivity 라는 클래스를 상속해서
클래스를 만들고 있다는것을 알수있습니다.
여기서 상속한 'AppCompatActivity' 클래스가 화면 출력을 담당하고 있는 클래스인데,
이 클래스를 상속받음으로써 화면에 무언가를 보여주기 위한 수많은 코드를 생략하고
어떤 방법으로 화면에 보여줄까 고민할 필요 없이,
무엇을 보여줄 것인가만 고민하면 되도록 만들어진 클래스입니다.
클래스 안에 있는
protected void onCreate(Bundle savedInstanceState)
부분은 메소드라 합니다.
그 위 '@Override'가 있는 이유
부모클래스에서 자식클래스로 상속받은 메서드를 재정의할 때 쓰고
메서드 위에 @Override를 적어주고 사용합니다.
이 메소드는 상속받아 온 AppCompatActivity 클래스의 메소드라는 것을 알 수 있습니다.
메소드의 이름으로 대략 역할을 짐작할 수 있는데,
onCreate() 메소드는 '만들어질 때' 라는 의미니까
이 메소드는 화면이 만들어질 때 호출되는 메소드라는것으로
짐작할 수 있습니다
메소드명이 'on'으로 시작되는 메소드는 대부분 callback 메소드인 경우가 많습니다.
callback 메소드는 일반 메소드와 다르게
운영체제인 안드로이드가 어떤 상황이 되었을 때 호출되는 것을 말합니다.
자바를 공부할 때 나오는 부분이지만
안드로이드에서는 이 callback 메소드의 활용이 무엇보다 중요합니다.
결국 이 메소드는 어플이 실행되고 화면이 만들어지면 호출되니까
이 메소드 안에 보일 내용물을 작성해 놓았겠구나. 라고 생각할 수 있습니다.
메소드 안에 있는
super.onCreate(savedInstanceState); // (1)
setContentView(R.layout.activity_main); // (2)
부분은 객체라 합니다
(1) 객체의 역활은 갑작스럽게 화면이 종료되었을 때 이전 상태를 저장하고 있는 겁니다.
사용자가 엑셀에서 어떤 작업을 하다가 갑자기 멈췄을 때
다시 실행시키면 마지막 상태가 자동으로 저장되어 보여지는 경우가 있죠.
그런 역할을 저 매개변수가 한다 정도로 이해할 수 있습니다.
결국 이 메소드 안에서 super를 이용하여 부모 클래스의 메소드에게
매개변수를 전달하는 부분을 제외하면 딱 하나의 메소드 호출문만 있는 것입니다.
(2) 코드를 보면 'setContentView()'라는 메소드를 호출하고 있고
매개변수로 'R.layout.activity_main'을 전달하고 있다는 것을 알 수 있습니다.
중요한건 저 'setContentView()'라는 메소드를 우리는 만든 적이 없다는 것이죠.
그렇다는 것은 이 메소드가 부모 클래스의 메소드라는 것이고
자식 클래스는 부모클래스의 멤버를 마음대로 사용할 수 있으니
'setContentView()'를 만들지 않고 사용하고 있다는 것을 확인할 수 있습니다.
이 'setContentView()'메소드가 어떤 역할을 하는지 배운 적은 없지만
이름으로 어느 정도 짐작이 가능하리라 봅니다.
대부분의 API 들에서 제공하고 있는 클래스들은
변수명이나 메소드명 만으로 그 의미나 역할을 짐작할 수 있도록 명명하고 있습니다.
먼저 'set'으로 시작하고 있으니 뭔가를 설정한다는 것이고
'Content'라는 단어는 내용물이고
'View'는 보이는 것 또는 보여지는 것이니까.
종합해 보면
"화면에 보여지는 내용물을 설정하겠다.
그 내용물은 매개변수로 전달하겠다."
라고 해석할 수 있을 것 같습니다.
안드로이드에서 화면에 무엇인가를 보여줄 때
반드시 알고 있어야 하는 클래스가 Activity와 View입니다.
안드로이드에서 View라는 용어는
화면에 보이는 어떤 것(이미지, 텍스트, 버튼 등)을 지칭합니다.
우리가 인테리어를 할 때 벽에 액자를 걸거나 벽장을 설치했다고 했을 때
벽을 액티비티 즉, 화면이라고 보면
장식되어 있는 액자나 벽장 또는 화분 같은 것들을 뷰라고 합니다.
일단 이 메소드가 결과적으로 화면에 글씨를 보여주게 하는 결정적인 메소드라는 것을 알 수 있습니다.
가장 중요하고 기본적인 메소드라고 할 수 있겠죠.
전체적으로 종합해보면
프로젝트가 실행되면 당연히 화면에 무엇이든 보여야 하니까
화면 출력을 담당하는 액티비티 클래스의 객체가 만들어질 것이고
이 객체가 화면을 만들 때 'onCreate()'라는 메소드가 호출되며
이 메소드 안에서 'setContentView()'메소드를 호출 함으로서
화면에 보일 내용물이 정해진다는 흐름을 해석할 수 있었습니다.