본문 바로가기

수업 정리

68일차 수업 정리(Android 구조 및 화면 출력)

공유 컴퓨터 : smb://192.168.0.76. - 계정 : 304, 비번 : 1111

**Mac 비밀번호 : 1111

**프로그램을 설치하려고 할때 다운로드 받은 파일이라 안된다는 경우 시스템 환경설정을 실행하고, [보안 및 개인정보보호]에서 설정

**Mac의 키보드

    - CapsLock 키가 한영 전환

    - 복사나 붙여넣기기 윈도우키 + c, 윈도우키 + v

 

**Android를 하기 위한 준비

1. JDK 설치

    => 설치 확인 : Windows의 경우 환경변수에 ProgramFile - Java - jdk - bin 이라는 디렉토리를 path에 추가하고 명령어 입력

    => 터미널에서 java -version(JRE 설치여부와 버전 확인), javac -version(JDK 설치여부와 버전확인)

 

2. Android Studio 설치

 

3. 환경 설정

  1) Mac에서는 Android Studio 메뉴의 Preferences를 실행하여 설정

  2) Windows에서는 환경설정 메뉴가 대부분 window메뉴에 있음

 

4. 에뮬레이터 설치

 

**Java Build Tool

1. Maven

    => pom.xml 파일을 기반으로 하는 빌드 도구

    => spring mvc project의 기본 빌드 도구

 

2.Gradle

    => build.gradle 파일을 기반드로 하는 빌드도구

    => android studio project 의 기본 빌드 도구

    => json 형식으로 설정

 

**Document

1. Android 의 기본원리나 프로젝트 생성

    => https://developer.android.com/guide

 

2. API에 대한 설명

    => https://developer.android.com/reference/packages

 

**프로젝트 실행

    => Run] - [Run app]을 선택하도 되고 삼각형 모양의 아이콘을 클릭해도 됨

    => 에뮬레이터로 실행하는 경우 미리 설치가 되어있어야 함

 

**프로젝트 구조

1. manifests/AndroidManifest.xml

    =>앱의 환경 설정 파일

    => 앱의 기본 모양, 컴포넌트 등록과 삭제 권한 설정등을 함

        - 프로젝트 내부에 컴포넌트를 만들었더라도 여기 등록되지 않으면 사용 불가

        - 컴포넌트는 개발자가 클래스를 이용하여 만들지만 인스턴스를 만들어서 실행하는 것은 Android System

        - 이것을 제어의 역전(IoC - Invesion of Control)이라고 함

 

2. java 디렉토리

  1) 패키지 이름 : 소스파일

  2) 패키지 이름(androidTest) : 안드로이드 앱을 테스트하기 위한 클래스

    => 환경설정을 읽어서 테스트

  3) 패키지 이름(test) : 단위 테스트를 하기위한 클래스

    => 환경설정은 읽지 않고 테스트(알고리즘 테스트)

 

3. res 디렉토리

    => 프로그램 실행에 필요한 자원이 저장되는 디렉토리

    => 여기 저장된 리소스는 앱이 실행될 때 메모리에 전부 로드 됨

    => 안드로이드는 리소스에 저장된 자원을 하나의 상수에 할당하여 자원명을 리소스 ID를 이용하여 사용할수 있게 해줌

        - 안드로이드에서는 리소스를 만들때 소문자, 숫자만 이용하여 만들도록하고, 영문 소문자로 시작하도록 강제

 

4. Gradle Script

    => 빌드를 위한 grade파일이 위치하는 디렉토리로 build.gradle 이 빌드 설정을 위한 파일

    => project, module 수준이 있고, project-애플리케이션 1개, module-독립적 실행 가능 단위, 한 project에 다수의 module 제작 가능

 

**디버깅(Debugging)

    =>디버깅은 논리적인 오류나 예외를 처리하기 위해서 메모리의 값을 확인하며 실행하는 작업

1. break point 설정 : 라인 번호 옆의 gutter를 클릭해서 생성

 

2. Debug Mode 실행 : [Run] - [Debug]를 선택

    => 논리적인 오류나 NullPointerExceptioni의 경우에 주로 이용

 

**Exception 확인

    => printStackTrace에서 위에서 아래로 내려오며 자신이 만든 클래스 중 가장 먼저 나오는 것을 찾아 그 위치부터 안으로 들어가며 처리

 

**Git Hub연동

1. 프로젝트 업로드

  1) [VCS] - [Import into Version Control] - [Share Project on Github]

    => git이 설치되어 있지 않으면 git을 설치하라고 뜨고 설치가 끝나면 Android Studio를 종료하고 다시 시작하여 수행

  2) id와 Password 입력창이 보이고 로그인을 수행

  3) 레포지토리 이름 설정하는 창이 보임

 

**안드로이드 화면 출력

1.Activity

    => 안드로이드 화면출력 컴포넌트

    => setConteneView(View 또는 Layout ID) 메소드를 호출하면 Activity의 메인 뷰가 설정됨

 

2. ViewGroup : 뷰들을 모아서 출력하는 레이아웃

 

3. View : 화면에 보여지는 객체로 Widjet이라고도 함

    => 안드로이드 화면 출력시 ViewGroup을 이용해서 다른 ViewGroup, View를 하나로 만들고, Activity의 메인뷰로 설정하여 출력

 

**View를 만드는 방법

1. Java 코드로 뷰를 만들기

    => 동적으로 뷰를 생성할 수 있음

    => 뷰의 속성을 변경할 때 컴파일부터 다시 해야 합니다.

 

2. Layout.xml 파일을 이용하여 xml로 만들기

    => Activity가 실행될 때 모든 뷰를 생성해야 함

    => 뷰의 속성을 변경한 후 실행만 다시하면 됨

 

3. 보통은 기본화면은 xml로 설정하고 이후 속성변경은 java 코드로 수행하는 경우가 많음

 

**View 실습 - Java 코드로 뷰를 생성

1. Android Project 생성

 

2. MainActivity.java 파일의 onCreate 메소드 수정

@Override
protected void onCreate(Bundle savedInstanceState) {
    //오버라이딩시 직접 만든 클래스의 메소드를 오버라이딩하는 경우가 아니면
    //상위 클래스의 메소드를 호출해 주어야 함
    super.onCreate(savedInstanceState);

    //xml 파일의 내용을 메인뷰로 설정
    //setContentView(R.layout.activity_main);

    //레이아웃 생성
    LinearLayout linear = new LinearLayout(this);

    //버튼 생성
    Button btn1 = new Button(this);
    //버튼의 속성을 설정
    btn1.setText("버튼");
    //버튼을 레이아웃에 추가
    linear.addView(btn1);

    //Activity에 레이아웃을 메인뷰로 설정
    setContentView(linear);
}

 

**View 실습 : xml로 뷰를 실행

    => 새로운 프로젝트를 생성하지않고 실행가능한 Activity만들기

1. File - New - Activity - Empty Activity

 

2. Activity 이름과 Layout 파일의 이름을 설정하는 대화상자가 출력

    => Launcher Activity를 체크하면 실행가능한 Activity로 만들어짐

 

3. 생성된 Layout 파일의 내용 수정

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ViewXML"
    android:orientation="horizontal">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="XML 버튼"/>

</LinearLayout>

 

**View의 종류

1.Window

    => View의 일종으로 애플리케이션이 생성되어 화면에 출력시 가장 바탕이 되는 뷰로 1개만 생성이 가능

        - Window의 크기가 디바이스 전체 크기로 설정

    => View들을 관리

 

2.Surface

    => Layer라고도 불리며 View 위에 놓여서 실제 그림을 그리는 역할을 수행하는 객체로 단독 출력 불가

 

3.View

    => 터치 등의 이벤트를 처리할 수 있고 화면에 surface를 하나 가지고 있는 객체

 

4.출력 구조

    => Activity(View Controller) -> View -> Surface(Layout)

    => 화면 변경

        - Activity 변경

        - Activity 그대로 두고 View를 변경

        - View를 그대로 두고 Surface를 이용해서 출력하는 그림을 변경

 

5. 실제 출력은 운영체제가 수행

    => application에서 운영체제가 출력하는 surface를 직접 핸들링하게되면 운영체제와 앱이 충돌할 수 있음

       - 출력은 Surface를 추상화한 View를 이용

    => MVC : Model, View, Controller로 나누어서 구현

    => View만을 이용해서 출력하게 되면 View에 데이터를 저장해야 함

    => 출력은 View가 담당하고 데이터는 별도로 가질수 있는 Activity의 개념을 도입하여 Activity가 Controller의 역할 수행

 

6. Android에서의 View

  1) widget : 하나의 컴포넌트

  2) view group : 다른 widget들을 모아서 출력할 수 있는 View

 

**Android에서 로그 출력

    => System.out.print, println을 사용할 수 없음

    => Log.레벨(String title, String msg)를 이용

    => 출력은 logical 화면에서 확인

    => 레벨은 l, d, w, e등이 있음

 

**Android Studio에서 Activity를 생성하거나 새로운 View를 인식하지 못하여 에러가 발생하는 경우

    => [Build] - [Clean Project] 와 [Rebuild Project]를 수행

    => Android Studio를 재실행

 

**View의 속성

1. id

    => xml에서 view를 만들고 이 view를 자바에서 사용하고자 할 때 설정

        - @ + id/아이디 : +기호는 새로 생성한다라는 의미이고 +가 없으면 id 를 사용

    => ex) android:id = "@+id/name"

        - 자바 코드에서는 위에 만든 뷰가 속한 뷰나 Activity에서 findViewById(아이디)로 가져와서 사용

 

2. layout_width, layout_height

    => 필수 속성

    => View의 너비와 높이

    => 3가지 방법으로 설정

        - match_parent(fill_parent) : 부모의 크기와 같이 만들어 줌

        - wrap_content : 내용의 크기로 설정

        - 크기와 단위로 설정

    => 크기 설정은 부모의 Layout과 다른 View와의 관계에 따라 다르게 설정(절대 크기 X)

 

3. 단위

  1) 절대 단위 : px, in, mm

  2) 상대 단위 : dp(dip), sp(sip), em

    - dip : 160dpi를 기준으로 1px가 1dp, 320dpi가 되면 2px이 1dp

    - sip : 글꼴에따라 크기가 달라지는 단위

    => Android에서는 dp나 sp를 이용해서 크기 설정하는 것을 권장

 

4. 배경색 - background

    => 색상값은 #ARGB나 #RGB를 이용하여 설정

    => 각각의 색상은 16진수 2자리

 

5. padding, margin

    => padding은 내부 여백으로 경계선과 내용물 사이의 여백

    => margin은 외부 여백으로 내 경계선과 다른 콘텐츠의 경계선 사이의 여백

    => padding, margin으로 설정시 4방향 동일하게 설정, 각각의 방향은 padding, margin 다음에 left, rigth, top, bottom등으로 설정

 

6. visibility

    => 뷰의 표시 여부

    => visible, invisible(숨겨진 상태이지만 영역은 차지), gone(숨겨지며 영역도 사라짐)

 

7. clickable, longClickable

    => boolean값으로 설정하여 클릭가능 여부를 설정

 

8. focusable

    => 포커스를 받을수 있는지 여부

    => 스마트폰에서는 포커스를 받을수 있는지 여부가 키보드 사용 가능 여부를 결정

 

9. 맞춤을 위한 속성

    => LayoutParams와 Layout_gravity

 

**View의 속성을 xml에서 설정하고, 버튼을 이용하여 View의 속성을 동적으로 변경

1. 실행 가능한 activity를 추가

 

2. Layout을 수정

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".ViewAttributeActivity">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Visible"
        android:id="@+id/btnvisible"
        />
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Hello_andr"
        android:background="#FF00FF"
        android:textColor="#00FF00"
        android:visibility="invisible"
        android:id="@+id/txtmsg"
        />

</LinearLayout>

    => 버튼 : btnvisible

    => 텍스트 : txtmsg

 

Tip! 

    => 앱 제작시 여러 View를 사용하므로 각 속성의 ID를 저장해 두는 것이 좋음

 

**final

    => 클래스 앞에 붙으면 상속할 수 없는 클래스

    => 메소드 앞에 붙으면 오버라이딩할수 없은 메소드

    => 변수 앞에 붙으면 변경할 수 없는 변수

 

**anonymous class

    => 클래스를 상속하거나 인터페이스를 implement해서 사용할 때 별도의 클래스를 만들지 않고 인스턴스를 생성하여 사용하는 방식

    => 이 클래스 내부에서 지역변수는 사용 불가

        - 지역변수 사용시 final로 만들어서 사용

    => Android Studio가 anonymous class 중에서 메소드가 1개인 경우는 람다코드로 변환해버리는 경우가 있음

        - Android를 하기 전에 Java의 람다문법은 숙지해야 함

        - 람다는 프로그래밍언어마다 호칭이 다르므로 언어별로 따로 학습해야 함

 

**Mac에서 MySQL 설치

1. dmg 파일을 다운로드 받아서 설치

 

2. 설치 중간에 root 비밀번호 확인

    - 비밀번호를 메모를 해두었다가 변경을 해야 합니다.

    - jt7!;afg)V_u

 

3. 시스템 환경 설정을 열어서 MySQL 을 start

 

4. 터미널에 접속

cd /usr/local/mysql/bin

./mysql -u root -p

alter user ‘root’@‘localhost’ identified by ‘비밀번호’;

flush privileges;

 

5. DBeaver를 설치하고 접속