타입 추론 : var myName = "Hong"
타입 지정 : var myName:String
val MYNAME = "Hong
var doubleValue:Double = 35.6
var floatValue:Float = 124.6f // f 붙이기 (필수)
var intValue:Int = 123456
var longValue:Long = 2_147_483_647l // l 붙이기 (선택)
var shortValue:Short = 123
var byteValue:Byte = 127
var charValue:Char = 'a'
var stringValue:String = "크기를 특정할 수 없다."
var booleanValue:Boolean = true
var intArr:IntArray = IntArray(10) // size 10인 Int 배열
intArr[0] = 100 // 0번째 인덱스에 100 대입
// intArr[20] = 200 /* error */
list : listOf<GENERIC_TYPE>()
mutableList : mutableListOf<GENERIC_TYPE>()
mutableMap : mutableMapOf<KEY_TYPE, VALUE_TYPE>()
// Generic 타입 명시 필요
var list = listOf<Int>() // 입력된 값을 바꿀 수 없다.
var mutableList = mutableListOf<int>() // 동적이라 값을 바꿀 수 있다.
var mutableMap = mutableMapOf<String, String>() // key, value 쌍으로 추가, 조회
// 값 넣기
var mutableList.add(5) // add() : 자동적으로 index 생성됨
var mutableMap.put("변수1", "값1")
// 값 조회
Log.d(TAG, mutableList.get(0)) // 0번째 인덱스의 값 로그 찍기
Log.d(TAG, mutableList[0]) // 같은 표현
Log.d(TAG, mutableMap.get("변수1")) // key에 해당하는 value 값 로그 찍기
<, >, >=, <=, ==, !=
var result1 = 1 > 2 // -> false
var result2 = "홍길동" == "홍길동" // -> true
&&, ||, !
var logic1 = 300<500 && 1 > 100
var logic2 = 300<500 || 1 > 100
var logic3 = !false
if (조건식) {
// code
} else if (조건식) {
// code
} else {
// code
}
if문의 확장판
var month = 7
when (month) {
// 특정 값 찾기
1 -> {
Log.d(TAG, "1월 입니다.")
}
// 특정 값 찾기 한 줄로 작성
2 -> Log.d(TAG, "2월 입니다.")
// 범위 찾기
3, 4, 5 -> {
Log.d(TAG, "봄 입니다.")
}
in 6..8 -> {
Log.d(TAG, "여름 입니다.")
}
// 그 외 범위
else -> {
Log.d(TAG, "집에 있습니다.")
}
}
for (idx in 1..10) { } // 1~10까지
for (idx in 1 until 10) { } // 1~9까지
for (idx in 1 until 10 step 2) { } // 1, 3, 5, 7, 9
for (idx in 10 downTo 1) { } // 10, 9, ... , 1
for (idx in 10 downTo 10 step 2) { } // 10, 8, 6, 4, 2
var intArray = intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8)
for (value in intArray) { } // Array의 값을 꺼냄, Collection도 가능
// 반복가능한 if문
var out = 0
while (out < 3) {
out = out + 1
}
out = 3
do {
out = out + 1
} while (out < 3)
// control loop
for (idx in 0..10) {
if (idx == 3) continue
if (idx > 5) break
}
함수를 사용하는 이유? 코드를 분류하기 위해서!
// 선언 방법
fun functionName() { ... }
fun functionParam(param1:String, param2:Int) { ... }
fun getPi() : Double { return 3.141592 } // 함수명 옆에 ": return type"
// 호출 방법
functionName()
functionParam("value", 142)
var pi = getPi()
변수(property)와 함수(method)의 모음
// 클래스 선언
class className {
init {
// 클래스를 초기화 하면 호출
}
var variable:String = "" // 변수 - property
fun function() {
var variable_local = "" // 함수 - method
}
}
// 클래스 초기화 후 사용
var cls = className() // instance : 메모리에 로드되어 있는 클래스
// 클래스 초기화 후 클래스 내부의 property와 method 사용
cls.variable
cls.function()
// companion object 포함한 클래스 선언
class Log {
companion object {
fun d(paramTag:String, paramMsg:String) {
print("[$paramTag] : $paramMsg")
}
}
}
// 클래스 초기화 없이 사용 가능
Log.d("Tag", "Message")
open
class ChildClass : ParentClass() { ... }
override
로 재정의//open 키워드로 상속 허가
open class Parent {
var money = 5000000
// open 키워드로 자식 클래스에서 재정의 허가
open var house = "강남 200평 아파트"
open fun showHouse() {
Log.d("class", "my house=${house}")
}
}
// 상속받을 때에도 초기화 필요 Parent()
class Child : Parent() {
// override 키워드로 부모 멤버와 동일한 이름을 재정의
override var house = "강남 10평 오피스텔"
fun showMoney() {
Log.d("class", "money=${money}")
}
override fun showHouse() {
Log.d("class", "my house=${house}")
}
}
// 사용
var parent = Parent()
var child = Child()
child.showMoney() // 상속 받으면 부모 멤버를 내 것 처럼 사용할 수 있다
// 부모와 자식 각각 서로 다른 메서드 결과가 나옴
parent.showHouse()
child.showHouse() // 부모 멤버를 재정의하여 사용했음
overload : 같은 이름인 함수이지만 파라미터가 달라 다른 함수로 구분
class Son {
fun getNumber() : Int {
return 1
}
fun getNumber(param:String) : Int {
return 2
}
}
var son = Son()
var result1 = son.getNumber("홍")
var result2 = son.getNumber()
null : null object를 가리키는 것
?
?
이후에 오는 코드가 실행되지 않는다.?:
키워드로 기본 값 지정 가능 (Elvis expression)var myName:String = "메시"
var number:Int? = null // nullable
var newVariable:Activity? = null
number.plus(50) // Null Pointer Exception
number?.plus(50) // Safe call!! (? 이후의 코드 실행되지 않음)
// Elvis expression
var result = number?.plus(50) ?: 51 // ?: 키워드로 기본 값 지정 가능
result.plus(50)
references:
이것이 안드로이드다 with 코틀린 강좌