Log.d() 함수를 사용하려면 MainActivity.kt 처음에 import android.util.Log 을 해줘야 한다.
- 변수 선언 Var (Variable)
- var 변수명 : 타입 = 값
ex) var shortValue: Short = 32.767 - 종류
- Double & Float
- Int & Long
- Short & Byte
- Cjar & String
- Boolean
- 변수 출력 ${}, "$"표시를 그대로 출력하고 싶을 때는 "$"표시 앞에 백슬래시("\")
- var 변수명 : 타입 = 값
- 상수 선인 Val
- 변수와 다르게 한 번 선언하면 바꿀 수 없다.)
보통 대문자로 쓴다.
Val 상수 이름 = 값
- 변수와 다르게 한 번 선언하면 바꿀 수 없다.)
- IF 문
if ( 조건) {True 일 때....} - If ~ else 문
if (조건) {True일 때} else {False일 때} - When 문
- 특이점
- True 외에 False에 대해서도 쓸 수 있다 (Else를 쓸 수 있다.)
- 결과가 같으면 비교값을 컴마로 구분해서 같이 쓸 수 있다.
- 비교값에 "in 숫자..숫자" 로 범위를 표현할 수 있다.
- 형식
When (파라미터) {
비교값1 -> {}
비교값2 -> {}
비교값3, 비교값4 -> {}
else -> {}
}
- 특이점
- 배열
- 배열은 개수 특정이 있고, 컬렉션은 없다.
- 형식
var 변수 = Array(개수)
ex) var students = intarray(10)
var longarray = longarray(10)
※ String은 기본 타입이 아니기 때문에 StringArray는 없다.
단, arrayOf() 함수를 사용해서 String 값을 직접 할당할 수는 있다.
ex) var dayArray = arrayOf("MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN")
var dayArray = Array(10, {item->""}) - 배열에 값 입력하기
- 배열명[인덱스] = 값
배열명.set(인덱스, 값)
- 배열명[인덱스] = 값
- 배열에 있는 값 꺼내기
- 배열명[인덱스]
- 매열명.get(인덱스)
- 컬렉션 : 코틀린의 컬렉션 데이터 타입은 기본적으로 변할 수 없는 데이터 타입 (Immutable)로 설계가 되어 있어서 원래 용도인 동적 배열로 사용하기 위해서는 뮤터블로 만들어진 데이터 타입을 사용해야 한다.
- List
- 형식 var list = mutableListOf("MON", "TUE", "WED")
- 리스트 생성하기 (mutableListOf)
var mutableList = mutableListOf("MON","THU","WED") - 리스트에 값 추가하기 (add)
입력될 위치의 인덱스를 따로 지정해주지 않아도 입력되는 순서대로 인데스가 지정되며 동적으로 리스트의 공간이 자동으로 증가한다.
mutableList.add("THU") - 리스트에 입력된 값 사용하기 (get)
입력할 때와 다르게 꺼낼 때는 get을 써야 한다.
var variable = mutableList.get(1) - 리스트값 수정하기 (set)
두 번재 값을 수정하는 예 : mutableList.set(1, "수정할 값") - 리스트에서 입력된 값 제거하기 (removeAt)
두 번째 값을 삭제하는 예 : mutableList.removeAt(1) - 빈 리스트 사용하기
빈 리스트를 생성하려면 데이터 타입을 직접 입력해줘야 한다.
var 변수명 = mutableListOf<컬렉션에 입력될 값의 타입>
문자열로 된 빈 컬렉션을 생성 : var stringList = mutableListOf<string>()
※<>이 괄호 명칭은 제네릭으로 컬렉션이 사용하는 값의 타입을 지정하기 위한 도구 - 컬렉션 개수 가져오기 (size) : mutabliList.size
- Set
- 중복을 허용하지 않는 List / 인덱스 조회가 불가하고 get 함수도 지원하지 않음
[예]
set= mutableSetOf<String>()
set.add("JAN")
set.add("FEB")
set.add("MAR")
set.add("JAN") // 동일한 값은 입력되지 않음
- 중복을 허용하지 않는 List / 인덱스 조회가 불가하고 get 함수도 지원하지 않음
- Map
- Key와 Value가 쌍으로 입력되는 컬렉션
Map의 Key는 List 의 index와 비슷하나 직접 입력해줘야 하고, 삭제 했을 때 자동으로 땡겨 오지 않는다. - 함수 : 입력 및 수정은 put(), 사용은 get(), 삭제는 remove() 함수 사용
[Put 예]
var map=mutableMapOf(string, string)
map.put("키1", "값1")
map.put("키2", "값2")
[Remove 예]
map.remove("키2")
- Key와 Value가 쌍으로 입력되는 컬렉션
- 컬렉션 값의 단위 = 엘리먼트
- List
- 잡다구리
MainActivity.kt : Android > app > java > com.example.myapplication > Mainactivity - 부등호에서 같음이 항상 오른쪽(나중에) (<=, >= ...)
반복문 : For 특정 횟수만큼 반복 시, While은 특정 조건이 만족할 때까지 반복할 때 사용
- For 반복문
- 기본형식 (온점 2개)
for (변수 in 시작값..종료값) {
// 실행 코드
} - until 은 마지막 숫자 전 까지
- 배열 크기 만큼 반복 가능
[index를 사용하는 방법]
var array = arrayOf("JAN", "FEB", "MAR", "APR", "MAY", "JUN")
for (index in 0 until array.size) {
Log.d("for", "현재 월은 ${array.get(index)}입니다.")
}
[변수에 담은 후 사용하는 방법 (가독성이 더 좋음)]
var array = arrayOf("JAN", "FEB", "MAR", "APR", "MAY", "JUN")
for (month in array) {
Log.d("for", "현재 월은 ${month}입니다.")
} - step : 건너뛰기
[3씩 건너뛰기]
for (변수 in 시작값..종료값 step 3) {
//실행 코드
} - downTo : 감소 시키기
- 기본형식 (온점 2개)
- While 반복문
- 기본 형식
While (조건식) {
// 실행 코드
}
- 일반적인 while 반복문
var current = 1
val until = 12
while (current < until) {
Log.d("while", "현재값은 ${current}입니다.")
current = current + 1
}
- 일반적인 while 반복문
- do ~ while : do 이후 한번은 무조건 실행 후 while 조건에 따라 추가 진행 여부 결정
- 반복문 제어
- break : 반복문 탈출
- continue : 해당 반복문을 끝내고 다음 반복문으로 (다음 반복문이 없다면 그냥 끝)
- 기본 형식
함수 : 코드를 사용할 수 있는 최소 단위
- 형식 & 예 :
[형식]
fun 함수명(파라미터 이름: 타임): 반환 타입 {
return 값
}
[예]
fun square(x: Int): Int {
return x *x
} - 함수 파라미터의 정의
- 변수를 정의하듯 '이름: 타입'의 형태로 정의, 여러 개 일경우 컴마로 구분
코틀린에서 파라미터를 통해 입력되는 값은 모두 이뮤터블로, Val이 생략된 형태라고 보면 된다.
[예]
fun newFunction(name: Streing, age: Int = 29, weight: Double = 65.5) {
Log.d("fun", "mame의 값은 ${name}입니다.")
Log.d("fun", "age의 값은 ${age}입니다.")
Log.d("fun", "weight의 값은 ${weight}입니다.")
}
newFunction("Hello")
- 변수를 정의하듯 '이름: 타입'의 형태로 정의, 여러 개 일경우 컴마로 구분
클래스와 설계 : 그룹화할 수 있는 함수와 변수를 한군데 모아놓고 사용하기 쉽게 이름을 붙여놓은 것
- 클래스의 기본 구조
[형식]
class 클래스명 {
var 변수
fun 함수() {
//코드
}
}
[예] Log클래스의 코드를 함축한 예
class Log {
var status : Int
companion object {
static fun d(tag: String, msg: String) {
//문자열을 출력하는 코드
}
static fun e(tag: String, msg: String) {
// 문자열을 출력하는 코드
}
}
} - 클래스의 생성
- 프라미어 생성자
- Constructor 키워드를 사용해 정의 (조건에 따라 생략 가능)
class KotlinOne construcotr(value: String) {
//코드
}
※ 생성자에 접근 제한자나 특정 옵션이 없다면 consturctor 키워드를 생략할 수 있다.
- Constructor 키워드를 사용해 정의 (조건에 따라 생략 가능)
- 세컨더리 생성자
- constructor 키워드를 마치 함수처럼 사용해서 작성할 수 있다.
class KotlinTwo {
constructor (value: String) {
Log.d("class", "생성자로부터 전달받은 값은 ${vlaue}입니다.")
}
}
- constructor 키워드를 마치 함수처럼 사용해서 작성할 수 있다.
- 프라미어 생성자
- 클래스의 사용 = 클래스 내부에 정의된 변수와 함수를 사용한다는 것
위젯과 리소스 다루기
- 배치를 담당하는 레이아웃
MainActivity.kt : 소스 코드 작성
activity_main.xml : 화면을 구성- 컨스트레인트 레이아웃 (ConstraintLayout) : 안드로이드 기본 레이아웃 (베치되는 위젯들 사이에 간단한 제약조건(Constraint) 설정만으로 전체 화면을 쉽게 구성)
- 리니어 레이아웃 (LinearLayout) : 위젯을 가로 또는 세로 한 줄로 배치하기 위한 레이아웃.
- 리니어 레이아웃을 기본 레[이아웃으로 사용하기
- 리니어 레아아웃을 사용하기 위해서 컨스트레인트 레이아웃 안에 리니어 레이아웃을 추가할 수도 있지만 레이아웃이 중첩되면 그남큼 그래픽 처리 속도가 느려지기 때문에 기본 레아이아웃인 컨스트레인트 레이아웃을 리니어레이아웃으로 바꾼 후에 작업하는 것이 좋다.
- XML Code에서 androidx.constraintlayout.widget.Constraintlayout을 LinearLayout으로 수정
화면 우측 상단에서 code 를 선택하여 코드에서 변경
스코프 함수
- run --> 최종 값을 반환
- let --> 최종 값을 반환
- apply --> 자기 자신을 반환
- also --> 자기 자신을 반환
카메라와 갤러리
- 카메라 사용하기
'Computer > Android' 카테고리의 다른 글
Kotlin으로 배우는 Android 기본사항 (0) | 2022.01.02 |
---|---|
https://developer.android.com/ (0) | 2021.08.29 |
Manifest merger failed : Apps targeting Android 12 (2) | 2021.08.25 |
[코틀린 안드로이드 기초 강의_13] 리스너 이해하기 (0) | 2021.08.16 |
Installed Build Tools revision 31.0.0 is corrupted. (0) | 2021.08.15 |