디모의 코틀린 강좌 참고 (링크)
주석 (C++이랑 같음)
// , /* */
구문 종료시 세미콜론 불필요
명칭 작성은
- 클래스는 대문자 (eg: Person)
- 변수,함수명칭은 소문자 (eg: calculateRoute)
변수 선언 방법
- val: final 키워드와 동일함
- var: 선언 후 변경 가능
일반 선언
var a_1:Int // 아무것도 선언하지 않아도 됨 대신 warning 표시 뜸
val a_2:Int // const라고해서 에러 뜨지 않음. final 같은 느낌. 첫 초기화 이후 변경 불가능
a_1=1
a_1=2
a_2=1
//a_2=2 불가능
기본 자료형
기본 자료형
var b_1:Byte = 127 // -128~127
var b_2:UByte = 255u // unsigned
var b_3:Short = 32767
var b_4:UShort = 65535u // unsigned
var b_5:Int = 1 //정수 기본형
var b_6:UInt = 1u // unsigned
var b_7:Long = 1
var b_8:ULong = 1u // unsigned
var b_9:Float = 1f //
//var b_10:UFloat =1uf // 구문오류 -> 실수형은 unsigned가 없다.
//var b_11:Float = 1.0 // 구문오류 -> float 타입에 리터럴값을 입력시 f를 붙여야한다.
//var b_12:Double = 1.0f // 구문오류 -> 실수의 기본형
var b_13:Double = 1.0 //실수의 기본형
var b_14:Boolean = true
//var b_15:Boolean = 1 // 구문오류 -> 불리언에 정수 못박음
리터럴 숫자 표현법
리터럴 숫자 표현 방법
var c_1:Int = 1234 // 기본 10진수
//var c_2:Int = 1234L // 구문 오류 -> L은 8바이트 정수형을 의미 형이 맞지 않음.
var c_3:Long = 1234L
var c_4:Int = 0x1af // 16진수 입력 가능
var c_5:Int = -0b1011 // 2진수 가능하고 음수 가능
var c_6:UInt = 0b1011u // 2진수 양수
문자열
문자열
var d_1:Char ='ㅁ'
//var d_2:String = 'ㅁ' + 'ㅂ' // 구문 오류 문자는 추가가 안됨
var d_3:String ="ㅋㅋ " //
var d_4:String ="\\n으로도 줄바꿈 가능 \nㅇㅇ 근데 직관적으로 보자면 세개 박고 넘어간다.\"\"\"" +
""" 이런식으로
작성해도 된다 ㅇㅋ?
"""

형변환
- 명시적 형변환
//형변환
var e_1:Int = 54321
//var e_2:Long = e_1 // 불가능 형변환 필요!
var e_3:Long = e_1.toLong()
배열
- 정적인 배열
//배열
var f_1 = arrayOf(1,2,3,4,5) //선언 방법 하나 값을 채우면서 생성
var f_2 = arrayOfNulls<Int>(5) // 꺽쇄는 제네릭
f_2[0] =2
타입 추론
- c++의 auto
//타입 추론 -> auto 같은 느낌
var g_1 = "asdf" // 이경우 String이라는 자료형이지만 생략해도 우측 변수의 자료형을 통해 추측한다.
//var g_2 // 구문 에러 -> 추론할 대상이 없기 때문에
var g_3 = 1234 // Int
var g_4 = 1234L // Long
var g_5 = 12.45 // double
var g_6 = 12.45f // float
var g_7 = 0xAA // Int
var g_8 = 0b11 // Int
var g_9 = true // Boolean
var g_10 = 'C' // Char
함수
// 일반 함수 선언 - 반환이 없는 경우
fun println4String(str:String){
println(str)
}
// 일반 함수 선언 - 반환이 있는 경우
fun add(a: Int, b: Int, c: Int): Long{
return a.toLong()+b.toLong()+c.toLong()
}
//간단한 함수의 경우
fun add2(a: Int, b: Int, c: Int):Long=a.toLong()+b.toLong()+c.toLong()
//간단한 함수의 경우 반환형을 생략할 수 있다.
fun add3(a: Int, b: Int, c: Int)=a.toLong()+b.toLong()+c.toLong()
비교 연산
//일반적인 If문과 비교연산들
var h_1= 7
if(h_1>10)
println("성공")
else if(h_1==7)
println("같음")
else if(h_1!=-1)
println("-1 체크")
else if(h_1>=7)
println("크거나 같다")
else
println("실패")
h_1= 11
if(h_1>10)
println("성공")
else
println("실패")
보다시피 일반적으로 사용하던 연산들은 다 된다.
자료형 체크
//자료형 체크 is !is
var h_2 = 7
/*
if(h_2 is Long)
println("h2는 Long에요")
else
println("h2는 Int에요")
*/
if(h_2 is Int) //형이 맞아야만 동작한다.
println("h2는 Long에요")
else
println("h2는 Int에요")
/*
if(h_2.toInt().toLong() is Int) //형이 맞아야만 동작한다.
println("h2는 Long에요")
else
println("h2는 Int에요")
*/
/*
// 동작하지 않는 구문
if(h_2 is 7)
println("h2는 Int에요")
*/
영상에서는 형변환이 된다고 하는데? 안된다. 뭐 그래도 좋다. Any라는 불특정타입을 이용해서 파라미터에 따라 특정 자료형에 대해서만 동작하도록 할 수 있었음
When = (C++)Switch
fun doWhen(srcVal:Any){
when(srcVal){
1 -> println("정수 1입니다.")
"Dimo" -> println("Dimo의 코틀린 강좌입니다.")
is Long -> println("Long 타입입니다.")
!is String -> println("문자열이 아닙니다")
else -> println("어떤 조건에도 만족하지 않습니다")
}
}
fun doWhen2(srcVal:Any){
var res =when(srcVal){
1 -> "정수 1입니다."
"Dimo" -> "Dimo의 코틀린 강좌입니다."
is Long ->"Long 타입입니다."
!is String -> "문자열이 아닙니다"
else -> "어떤 조건에도 만족하지 않습니다"
}
println(res)
}
Any = auto 같은 역할을 한다.
'개발일지 > 코틀린(Kotlin)' 카테고리의 다른 글
코틀린 - 카메라 필터 앱 만들기 - 4 (IntelliJ + OpenCV) (0) | 2024.04.15 |
---|---|
코틀린 - 카메라 필터 앱 만들기 - 3 (CameraX+OpenCV) (0) | 2024.04.15 |
코틀린 - 카메라 필터 앱 만들기 - 2 (OpenCV 세팅) (0) | 2024.04.15 |
코틀린 - 카메라 필터 앱 만들기 - 1(CameraX) (0) | 2024.04.15 |
코틀린(Kotlin) - 1 (목표 설정) (0) | 2024.04.03 |