반응형

# AndroidManifest.xml

안드로이드 앱의 기본정보를 저장한 파일

icon : 안드로이드 앱 아이콘 지정

label : 안드로이드 앱 제목 지정

activity : 안드로이드 앱 메인 액티비티 지정

android.intent.action.Main : 시작 액티비티 지정 여부

android.intent.category.LAUNCHER : 앱 실행 시 맨 처음 화면에 표시할 시작 액티비티로 지정

 


# activity_main.xml

화면에 보여질 위젯들을 배치하는 레이아웃 파일을 의미

GUI 형식으로 버튼이나 필요 위젯들을 직관적으로 배치할 수도 있고 

CODE형식으로 코드를 작성해서 배치나 설정등을 해줄 수 있다.


# MainActivity.kt

화면(액티비티)에 배치된 위젯에 이벤트를 추가해서 인터랙티브 한 작업을 하거나

기타 백엔드 작업을 위한 코드들을 추가하는 파일을 의미

 

# 액티비티 activity

앱을 실행했을때 화면을 구성할 수 있도록 해주는 안드로이드 요소

보통 앱의 종류에 따라 하나 이상의 액티비티로 구성될 수 있음

웹으로 비유하자면 하나의 웹페이지 개념으로 이해하면 됨 

 

# res 

앱 개발에 필요한 다양한 리소스들을 저장하는 디렉토리

drawable : 앱을 구성하는 각종 시각적 리소스들을 저장

layout : 앱 배치에 사용할 레이아웃 파일을 저장

values : 앱을 구성하는 각종 문자열을 저장하는 파일을 저장

 

# findViewById

레이아웃에 선언된 구성요소들을 액티비티에서 접근해서

조작하려면 해당 요소를 id로 지정해서 변수에 할당해야 함

findViewById 함수를 이용하면 해당 위젯을 선택한 다음 

변수에 할당할 수 있음

 

, 위젯을 지정할 때는 R.id. 위젯 아이디 형태로 사용해야 함 

 

 

# View 클래스

안드로이드 화면에서 실제로 사용되는 것들은 모두 View 클래스 상속을 받음

다른 말로 '위젯' 이라고도 함

# ApplicationContext  or ActivityContext

Context의 정의 

Application 환경에 대한 전역 정보를 접근하기 위한 인터페이스

추상 클래스이며 실제 구현은 Android 시스템에 의해 제공된다

Context를 통해 애플리케이션에 특화된 리소스나 클래스에 접근할 수 있다. 

Activity 실행, Intent 브로드캐스팅 그리고 Intent 수신 등과 같은 응용 프로그램 수준의 작업을 수행하기 위한 API를 

할 수 있다.

 

Context의 역할

Context는 애플리케이션과 관련된 정보에 접근하고자 하거나

어플리케이션과 연관된 시스템 레벨의 함수를 호출하고자 할 때 사용된다. 

그런데 안드로이드 시스템에서 어플리케이션 정보를 관리하고 있는 것은

시스템이 아닌, ActivityManagerService라는 일종의 또 다른 애플리케이션이다.

따라서 다른 일반적인 플랫폼과는 달리, 안드로이드에서는 애플리케이션과 관련된 정보에 접근하고자 할 때는 ActivityManagerService를 통해야만 한다. 

 

ApplicationContext

어플리케이션 자체와 연동되는 것이므로애플리케이션의 life cycle이 지속되는 동안 동일한 객체 

즉 애플리케이션을 종료 후 다시 실행시킬때에만 바뀌는 것. 

+ 어플리케이션 전연적으로 하나만 존재하는 싱글턴 객체 

 

ActivityContext

Activity의 라이프사이클과 함께 작동해 onDestroy()와 함께 사라진다.

즉, Activity에 대한 환경 정보들이 Context에 있고, 이 Context에 Intent를 통해 다른 액티비티를 띄우면

액티비티 스택이 쌓이게 된다.

 

# Intent

인텐트는 앱 컴포넌트(Component)가 무엇을 할 것인지를 담는 메시지 객체이다.

메시지는 의사소통을 하기 위해 보내고 받는 것

메시지를 사용하는 가장 큰 목적은 

다른 액티비티, 서비스 , 브로드캐스트 , 리시버 , 컨텐트 프로바이더 등을 실행하는 것.

인텐트는 이들 사이에서 데이터를 주고받기 위한 용도로 사용된다.

 

intent 사용규칙

1. var로 선언한 프로퍼티에만 사용할 수 있다.

2. 클래스 몸체에 선언한 프로퍼티에만 사용할 수 있다. 주 생성자에는 사용할 수 없다.

3. 사용자 정의 getter/setter를 사용하지 않은 프로퍼티에만 사용할 수 있다.

4. null 허용프로 퍼티에는 사용할 수 없다. 

5. 기초 타입 프로퍼티에는 사용할 수 없다.

 

애플리케이션을 만들때 하나의 화면을 가지고 어플리케이션을 만들지는 않는다. 

하나의 화면에 모든 기능을 담기란 불가능하다.

대부분의 애플리케이션은 많은 View를 모으고 모아서 만든 결과물이다. 

그래서 안드로이드에서 화면 간 이동과 화면간 데이터 전달이 무척이나 빈 전하고 중요하다.

안드로이드에서 페이지 전환과 페이지간 데이터 전달은 Intent를 통해서 구현이 가능하다.

 


실습)

1. HelloAndroid라는 액티비티를 생성 

2. "Hello World" 문구를 보여주는 TextView 위젯 생성

3. 5개 버튼을 생성해서 각 버튼에 ID를 지정 / onClick 이벤트 발생 시 실행될 함수를

4. MainActivity.kt파일 안에서 정의  + 필요한 버튼 ID를 FindViewById를 이용해 변수 설정

 

 

package imlsw96.helloandroid

import android.content.Intent
import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.Toast

class MainActivity : AppCompatActivity() {

    // 변수선언시 초기화를 바로 못하는 경우 lateinit 키워드 사용
    lateinit var btnSayHello : Button
    lateinit var btnGoogle : Button
    //lateinit var btn911 : Button
    //lateinit var btnGallery : Button
    //lateinit var btnFinish : Button

    override fun onCreate(savedInstanceState: Bundle?) {
        // 안드로이드 앱의 실행 진입점
        // 즉, 현재 액티비티가 생성되면 뭔가를 실행하라는 의미

        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // 화면에 무언가를 출력함
        // res - layout - activity_main.xml

        btnSayHello = findViewById(R.id.btnSayHello)
        btnGoogle = findViewById(R.id.btnGoogle)
        // activity_main.xml에 만들어 놓은 id로 위젯을 찾아서 변수에 할당
        // btn911 = findViewById(R.id.btn911)
        //btnGallery = findViewById(R.id.btnGallery)
        //btnFinish = findViewById(R.id.btnFinish)

        btnSayHello.setOnClickListener() {  // btnSayHello에 클릭이벤트 추가
            Toast.makeText(applicationContext, "Hello, World!!",
            Toast.LENGTH_SHORT).show()
            // makeText(대상, 메세지, 지연시간).show() 잠시동안 메세지를 출력함
            // 코틀린에서의 Toast는 자바스크립트의 alert창과 유사하다.
        }

        btnGoogle.setOnClickListener() {
            var gIntent : Intent = Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.co.kr"))
            startActivity(gIntent)
        } // 버튼 클릭시 새로운 브라우져 뷰를 열어서 구글 홈페이지를 띄움
    }

    // 특정 위젯을 findViewById 함수로 잡아서 이벤트를 추가할때마다 코드가 지저분해짐
    // 따라서, 이벤트 처리를 위한 독립적인 함수를 만들어 처리하는 것이 좋음
    // 레이아웃의 onClick 속성에 이벤트 처리함수를 지정하면 됨
    fun call911(v: View){
        var mIntent : Intent = Intent(Intent.ACTION_VIEW, Uri.parse("tel:/911"));
        startActivity(mIntent)
    }

    fun openGallery(v: View) {
        var mIntent : Intent = Intent(Intent.ACTION_VIEW, Uri.parse("content://media/internal/images/media"));
        startActivity(mIntent)
    }
    fun appFinish(v: View) {
        finish();
    }
}

lateinit 으로 변수를 클래스 안에서 설정해준것을 확인할 수 있다. '

lateinit은 코드 설명을 보면 알 수 있듯이 변수 선언시 초기화를 바로 못하는 경우 사용한다고 나와있다.

여기서 든 의문점으로는 초기화를 바로 못하는 경우는 언제인가에 대한 의문점이 생겼다. 

뇌피셜을 돌려보려 코드를 찬찬히 보니 메서드 재정의한 onCreate부분을 봐보면 앱의 액티비티 실행 진입점임을

확인할 수 있는데 lateinit으로 선언한 변수들은 버튼이 클릭되었을때 이벤트를 걸기위해 설정을 해둔것이 아닌가

 

 

Toast 하는 문장에서 대상 부분에 applicationContext라고 지정되어있는데 이 부분은 지금 현재 MainActivity를 위치에 해당하는 의미 

 

위의 설명에서 뷰 클래스는 액티비티의 '위젯'들의 최상위 클래스이다. 그중 버튼에 onClick에 맞는 함수들을 걸어놨으니 함수의 인자 값은 View 클래스가 지정된다. 

 

 

반응형

'JAVA & APP :국비지원 학원 복습 > AndroidStudio' 카테고리의 다른 글

04 Files  (0) 2021.02.26
실습)동물사진 보기 앱  (0) 2021.02.25
02 안드로이드 : widget  (0) 2021.02.25

+ Recent posts