공유 컴퓨터 : smb://192.168.0.76 계정:304 비번:1111
**프로그램을 설치할려고 할 때 다운로드 받은 거라서 안된다고 나오면 시스템 환경 설정을 실행하고 [보안 및 개인 정보 보호]를 싱행해서 하단에 나오는 메시지 클릭
** Android 하기 위한 준비
1. JDK 설치
=> 설치 확인 : Windows 의 경우는 환경변수에 Program Files - Java - jdk - bin 이라는 디렉토리를 path에 추가하고 명령어를 입력
=> Mac에서는 터미널에서 java -version(JRE 설치 여부와 버전 확인), javac -version(JDK설치 여부와 버전 확인)
2. Android Studio 설치
3. 환경 설정
1) Mac에서는 Android Studio 메뉴의 Preferences를 실행해서 설정
2) Windows에서는 한경 설정 메뉴가 대부분 window 메뉴에 있다.
4. 에뮬레이터 설치
[Tools] - [AVD Manager]
** Java Build Tool
1. Maven
=> pom.xml 파일을 기반으로 하는 빋드 도구
=> spring mvc project의 기본 빌드 도구
=> xml 형식으로 설정
2. Gradle
=> build.gradle 파일을 기반으로 하는 도구
=> android studio project 의 기본 빌드 도구
=> json 형식으로 설정
** Document
1. Android의 기본 원리나 프로젝트 생성 - 한글 지원
https://developer.android.com/guide
2. API 에 대한 설명
https://developer.android.com/reference/packages
개발자 가이드 | Android 개발자 | Android Developers
Android 개발자 가이드에 오신 것을 환영합니다. 왼쪽 탐색에 나열된 문서에서는 Android 프레임워크와 다른 라이브러리에서 API를 사용하여 Android 앱을 빌드하는 방법을 알려줍니다. Android를 처음 ��
developer.android.com
** Mac의 키보드
Caps Lock 키가 한 영 전환
복사나 붙여넣기 할 때는 윈도우키 +c, 윈도우키 + v
** 프로젝트 실행 : [Run] - [run app]을 선택해도 되고 삼각형 모양의 아이콘을 클릭해도 된다.
=> 애뮬레이터로 실행하는 경우는 미리 설치가 되어 있어야 한다.
** 프로젝트 구조
1. manifests/AndroidManifest.xml
=> 앱의 환경설정 파일
=> 앱의 기본 모양, 컴포넌트 등록과 삭제, 권한 설정 등을 한다.
프로젝트 안에 컴포넌트를 만들었더라도 여기 등록이 안되면 사용할 수 없다.
컴포넌트는 개발자가 클래스를 이용해서 만들지만 인스턴스를 만들어서 실행하는 것은 Android System이 한다.
이것을 제어의 역전(IoC - Inversion of Control)이라고 한다.
2. Java 디렉토리
1) 패키지 이름 : 소스 파일이 있는 곳
2) 패키지이름(androidTest) : 안드로이드 앱을 테스트 하기 위한 클래스가 있는 곳
환경설정을 읽어서 테스트
3) 패키지이름(test) : 단위 테스트를 하기 위한 클래스
환경 설정은 읽지 않고 테스트 : 알고리즘 테스트
3. res 디렉토리
=> 프로그램 실행에 필요한 자원이 저장되는 디렉토리
=> 여기에 저장된 리소스는 앱이 실행될 때 메모리에 전부 로드된다.
=> 안드로이드는 리소스에 저장된 자원에 하나의 상수에 할당을 해서 자원의 이름을 직접 사용하지 않고 리소스 ID를 이용해서 사용할 수 있도록 해준다.
=> 안드로이드에서는 리소스를 만들 때 소문자와 숫자만 이용해서 만들도록 하고 영문 소문자로 시작하도록 강제한다.
4. Gradle Script
=> 빌드를 위한 gradle 파일이 위치하는 디렉토리로 build.gradle이 빌드 설정을 위한 파일
=> project 수준이 있고 modul 수준이 있는데 lroject는 애플리케이션 1개를 의미하고 module은 독립적으로 실행할 수 있는 단위여서 하나의 project에 여러 개의 module을 만드는 것이 가능하다.
** 디버깅(Debugging)
=> 디버깅은 논리적인 오류나 예외를 처리하기 위해서 메모리의 값을 확인하면서 실행하는 작업
1. break point 설정 : 라인 번호 옆의 gutter를 클릭해서 생성
2. Debug Mode 실행 : [Run] - [Debug]
=> 논리적인 오류나 NullPointException의 경우에 주로 이용
** Exception 확인
=> printStackTrace에서 위에서부터 아래로 내려오면서 자신이 만든 클래스 중에서 가장 먼저 나오는 것을 찾아서 그 위치부터 안으로 들어가면서 처리
** Git Hub 연동
1. 프로젝트 업로드
1) [VCS] - [Import int Version Control] - [Share Project on GitHub]
=> git이 설치되어 있지 않으면 git을 설치하라고 뜨고 설치가 끝나면 Android Studio를 종료하고 재실행 하면된다.
2) id와 password 입력창이 보이고 로그인을 한다.
3) 레포지토리 이름 설정하는 창이 보인다.
** 안드로이드 화면 출력
1. Activity
=> 안드로이드 화면 출력 컴포넌트
=> setContenView(View 또는 Layout ID) 메소드를 호출하면 Activity의 메인 뷰가 설정된다.
2. ViewGroup : 뷰들을 모아서 출력하는 레이아웃
3. View : 화면에 보여지는 객체로 Widget이라고도 한다.
안드로이드에서 화면 출력을 할 때는 ViewGroup을 이용해서 다른 ViewGroup이나 View를 하나로 만들고 이 ViewGroup을 Activity의 메인 뷰로 설정해서 출력
** View를 만드는 방법
1. Java 코드로 뷰를 만들기
=> 동적으로 뷰를 생성할 수 있다.
=> 뷰를 속성을 변경할 때 컴파일부터 다시 해야 한다.
2. Layout.xml 파일을 이용해서 xml로 만들기
=> Activity가 실행될 때 모든 뷰를 생성해야 한다.
=> 뷰의 속성을 변경한 후 실행만 다시 하면 된다.
3. 보통은 기본 화면은 xml로 설정하고 이후 속성변경은 java 코드로 수행하는 경우가 많다.
** View 실습
1. Android Project 생성
2. MainActivity.java 파일의 onCreate 메소드를 수정
package com.example.androiduserinterface;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.LinearLayout;
public class MainActivity extends AppCompatActivity {
@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)
=> 화면 변경방법 3가지
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) viewgroup : 다른 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를 java코드에서 사용하고자 할 때 설정
@+id/아이디 : + 기호는 새로 생성한다라는 의미이고 +가 없으면 id를 사용
=> ex) android:id="@+id/name"
자바코드에서는 위에 만든 뷰가 속한 뷰나 Activity에서 findViewById(아이디)로 가져와서 사용
2. layout_width, layout_height
=> 필수 속성
=> View의 너비와 높이
=> 3가지 방법으로 설정
match_parent(fill_parent) : 부모의 크기와 같이 만들어 줌
wrap_content : 내용의 크기로 설정
크기와 단위로 직접 설정 => 크기 설정은 절대적이지 않고 부모의 Layout과 다른 View와의 관계에 따라 다르게 설정
3. 단위
1) 절대 단위 : px, in, mm
2) 상대 단위 : dp(dip - 160dpi 를 기준으로 해서 1px이 1 dp, 320dpi가 되면 2px이 1dp), sp(sip - 글꼴에 따라 크기가 달라지는 단위), em
=> Android에서는 dp나 sp를 이용해서 크기 설정하는 것을 권장
4. 배경색 - background
=> 색상값은 #ARGB 나 #RGB를 이용해서 설정
=> 각각의 색상은 16진수 2자리
5. padding, margin
=> padding은 내부 여백으로 경계선과 내용물 사이의 여백
=> margin은 외부 여백으로 내 경계선과 다른 콘텐츠의 겅계선 사이의 여백
=> padding 과 margin으로 설정하면 4방향 모두 동일하게 설정되고 각각의 방향은 padding이나 margin 다음에 Left, Top, Right, 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="Hell World"
android:background="#FF00FF"
android:textColor="#00FF00"
android:visibility="invisible"
android:id="@+id/txtmsg"
/>
</LinearLayout>
버튼 : btnvisible
텍스트 : tmtmsg
이렇게 적어놓는 습관을 들이자.
3. Activity의 onCreate에서 버튼을 눌러서 텍스트의 설정을 변경
package com.example.androiduserinterface;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.TestLooperManager;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class ViewAttributeActivity extends AppCompatActivity {
TextView msg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_attribute);
//XML에 디자인 뷰를 자바에서 사용하기 위해 참조를 가저오는 방법
Button btn = (Button)findViewById(R.id.btnvisible);
//지역변수에 final을 붙이는 경우는 Anonymous Class에서 사용할 때 뿐이다.
final TextView msg = (TextView)findViewById(R.id.txtmsg);
//버튼을 클릭했을 때 수행
btn.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View view){
msg.setVisibility(View.VISIBLE);
}
});
}
}
** final
클래스 앞에 붙으면 상속할 수 없는 클래스
메소드 앞에 붙으면 오버라이딩 할 수 없는 메소드
변수 앞에 붙으면 변경할 수 없는 변수
** anonymous class
=> 클래스를 상속하거나 인터페이스를 implements해서 사용할 때 별도의 클래스를 만들지 않고 인스턴스를 생성해서 사용하는 방식
=> 이 클래스 안에서는 지역변수는 사용 못한다.
지역 변수를 사용하고자 하면 final로 만들어서 사용
=> Android Studio가 anonymous class 중에서 메소드가 1개인 경우는 람다 코드로 변환해버리는 경우가 있다.
Android를 하기 전에 Java의 람다 문법은 숙지를 해야 한다.
람다는 프로그래밍언어마다 호칭이 다르기 때문에 언어별로 따로 학습을 해야 한다.
Mac에서 MySQL 설치
dmg 파일 다운로드 받아서 설치
설치 중간에 root 비밀번호가 보임 - 비밀번호를 메모를 해두었다가 변경을 해야한다.
MySQL 시작
터미널에 접속
cd /usr/local/mysql/bin
./mysql -u root -p 이렇게 치면 비밀번호 쓰라고 나온다.
비밀번호 입력되면
커서모양이
mysql> 이렇게 바뀐다.
alter user 'root'@'localhost' identified by '바꿀비밀번호'
성공하면
flush privileges;
하면 MySQL 설치가 성공적으로 완료 된것이다.
** DBeaver를 설치하고 접속