컴굥일지
[Kotlin] 코틀린 기초 본문
반응형
코틀린 기초
- 안드로이드 스튜디오 실행 : ctrl + shift + F10
- 안드로이드 스튜디오 자동 정렬 : ctrl + alt + L
변수 그리고 val과 var의 차이점
- 앱 실행 시간 동안 정보 저장 방법에 가장 기본인 코드
// fun : 함수를 만드는 키워드
fun main() { // main() 앱 시작점을 알려주는 특별한 함수(그래서 왼족에 스타트버튼이 존재한다)
// body에 실행하고 싶은 코드를 넣음
// var는 수정이 가능하다. => 변수(mutable variable)
var myName = "Jini"
myName="Kari"
print("Hello " + myName) //출력
// val은 나중에 값을 바꿀 수 없다. => 상수(immutable variable)
val myAge=22
print(myAge)
}
숫자 데이터 유형
- 주석: 컴파일러가 무시하는 코드
// TODO: ~~~
// 위와 같이 쓰면 안드로이드 스튜디오에서 저 주석의 위치를 쉽게 찾을 수 있음
/*
주석을 여러 줄로
쓸 수도 있다.
*/
- 코틀린은 타입 언어이다.
=> 모든 변수는 특정 타입이 있다.
fun main() {
// type : string
val myName = "Jini"
// type : int 32 bit
var myAge = 22 // 자동으로 타입을 결정해주는 것을 "타입 추론"이라고 한다
// 적합한 값을 집어 넣는다면, 데이터 타입을 따로 지정하지 않아도 된다.
//var myHeight <-- 이렇게만 쓰면 에러난다. 타입을 추론할 수가 없기 때문
var myHeight: Int // 이렇게는 가능
// Integer TYPES : Byte (8 bit), Short (16 bit),
// Int (32 bit), Long (64 bit)
val myByte: Byte = 13 // myByte의 타입을 Byte로 지정함
val myShort: Short = 125
val myInt: Int = 123123123
val myLong: Long = 123_039_812_309_487_120
// Floating Point number Types : Float (32 bit), Double (64 bit)
val myFloat: Float = 13.37F // Float는 값의 마지막에 F를 붙여줘야 한다.
//대체로 부동 소수정 값은 double 타입을 원한다고 생각하기 때문
val myDouble: Double = 3.14159265358979323846
}
데이터 유형 bool, char, string
fun main() {
// Booleans 타입은 논리 변수로, true/false 만을 값으로 갖는다
var isSunny: Boolean = true // 굳이 타입을 명시하지 않아도 boolean인 것을 안다
isSunny = false
// Characters : 문자 하나를 초과할 수 없다.
val letterChar = 'A'
val digitChar = '1'
// Strings
// string은 char가 연속된 것이다.
val myStr = "Hello World"
var firstCharInStr = myStr[0]
var lastCharInStr = myStr[myStr.length - 1]
print(firstCharInStr+" "+ lastCharInStr)
}
String interpolation (문자열 보간법)
- string에 $ 기호를 사용하여 변수를 넣는 것
- 중괄호를 사용하여 문자열 안에 식을 넣을 수도 있다
- $를 문자열에 쓰고 싶으면 앞에 백슬래쉬를 붙이면 된다
fun main() {
// Strings
val myStr = "Hello World"
var firstCharInStr = myStr[0]
var lastCharInStr = myStr[myStr.length - 1]
print("first char: $firstCharInStr, last char: $lastCharInStr\ntotal length is ${myStr.length}")
// 변수 뒤에 띄어쓰기 없이 바로 적고 싶을 때 - 중괄호 사용
val name="Jini"
print("${name}Hello")
}
산술 연산자와 유형의 중요성
fun main() {
// Arithmetic operators (+, -, *, /, %)
var result = 5 + 3
result %= 2
print(result)
print("\n")
val a=5
val b=3
var result2=a/b
print(result2) // 결과는 1 <- 정수를 정수로 나누어서
print("\n")
print(a.toDouble()/b)
print("\n")
// result2=a.toDouble()/b <-- 에러남. result2가 Int 타입이기 때문
var result3:Double
result3=a.toDouble()/b
print(result3)
}
비교 연산자
fun main() {
// Comparison operators (==, !=, <, >, <=, >=)
val isEqual = 5==3 // 참 거짓이 결과로 나온다
println("5 == 3 $isEqual")
println("5 > 3 ${5>3}")
println("-5 > 3 ${-5>3}")
println("5 != 5 ${5!=5}")
}
증감 연산자
fun main() {
// Assignment operators (+=, -=, *=, /=, %=)
var myNum = 5
myNum+=3
myNum*=2
println(myNum) //16
// Increment & Decrement operators (++. --)
println("myNum++ :${myNum++}") //16
println(myNum) //17
println("++myNum :${++myNum}") //18
println(myNum) //18
println("myNum-- :${myNum--}") //18
println(myNum) //17
println("--myNum :${--myNum}") //16
println(myNum) //16
}
If문
fun main() {
var heightPerson1 = 170
var heightPerson2 = 189
if (heightPerson1 > heightPerson2) {
println("use raw force")
} else if (heightPerson1 == heightPerson2) {
println("use your power technique 1337")
} else {
println("use technique")
}
val age = 55
if (age > 30) println("you are over 30")
}
식으로 된 If문
fun main() {
val age = 16
val drinkingAge = 21
val currentAge = if (age >=drinkingAge){
println("Now you may drink in the US")
drinkingAge
}else{
println("You can't drink")
-100
}
print("current age is $currentAge")
}
When식
- C, C++, JAVA의 switch문
fun main() {
var season = 3
when (season) {
1 -> println("Spring") // 숫자와 화살표 사이에 공백이 필요함
2 -> println("Summer")
3 -> { // 실행될 코드가 2줄 이상일 때
println("Fall")
println("Autumn")
}
4 -> println("Winter")
else -> println("Invalid Season") // 위의 조건에 모두 해당되지 않을 때
}
println()
var month = 3
when (month) {
in 3..5 -> println("Spring") // ..을 사용해서 범위를 정할 수 있음
in 6..8 -> println("Summer")
in 9..11 -> println("Fall")
// in 12 downTo 2 -> println("Winter") <-- 12월부터 2월까지 거꾸로 범위가 잡힘
12, 1, 2 -> println("Winter")
else -> println("Invalid Season") // else가 없어도 돌아는 감
}
println()
var age = 5
when (age) {
!in 0..20 -> println("You can drink") // 느낌표를 붙일 수도 있음
in 18..20 -> println("You can vote")
16, 17 -> println("You can drive")
else -> println("You are too young")
}
var x: Any = 13.37
when (x) {
is Int -> println("$x is Int") // type을 확인할 때 is를 사용함
!is Double -> println("$x is Double") // 느낌표를 붙일 수도 있음
is String -> println("$x is String")
else -> println("$x is none of the above")
}
}
식으로 된 When
fun main() {
val x: Any = 13.37
val result = when (x) {
is Int -> "is an Int"
!is Double -> "is not Double"
is String -> "is a String"
else -> "is none of the above"
}
print("$x $result")
}
While 반복문
fun main() {
var x=1
while(x<=10){ //조건이 참일 때 반복문 탈출
if(x%2==0) continue
println(x)
x++
}
while (true){
if(x>=20) break
println("$x")
x+=2
}
}
Do While 반복문
fun main() {
var x=15
do { // do{} 부분을 실행하고 조건체크를 함
println("$x")
x++
}while (x<=10)
println("The End")
}
For 반복문
fun main() {
for(num in 1..10){
print("$num ") //1~10
}
println("")
for(i in 1 until 10){ // for(i in 1.until(10))
print("$i ") //1~9
}
println()
//아래는 2칸씩
for (i in 100 downTo 90 step 2){ // for(i in 100.downTo(90).step(2))
print("$i ")
}
println()
}
함수 - 매개변수 - 인자 - return
// Method : function within a class
/* 객체지향 프로그래밍 언어가 아니면 function이라고 부르지만,
객체 지향에서는 class 안에 생성되면 method, 아니면 function이라고 부름 */
fun main() {
// main 함수가 시작점이므로, 이 안에 코드가 없으면 아무 일도 일어나지 않는다.
myFunc()
println(addUp(1234567890,987654321)) // 여기서는 "인자"라고 부름 (argument)
}
fun myFunc(){
println("called from myFunc")
}
//함수 선언 시에는 "매개변수"라고 부름 (parameter)
fun addUp(a:Int, b:Int):Long{ // int형 매개변수 2개를 받아, long형 값을 return함
return a+b.toLong() // (a+b).toLong()은 안 됨
}
코틀린의 Nullable
fun main() {
var name :String ="Jini"
//name=null <-- 이거는 불가능함. null타입이 아닌 string은 null을 입력할 수 없다
var nullableName:String?="Jini" // 마지막에 물음표를 붙이면 nullable하게 된다
nullableName=null
var len=name.length
//var len2=nullableName.length <-- nullable하지 않은 string만 length를 사용할 수 있음
var len2=nullableName?.length //이런식으로 작성할 수 있음 (아니면 조건문으로 작성)
// null이 아니면 길이가 들어가고, 아니면 null이 들어간다
println(len2)
}
Nullable - 엘비스 연산자 - Not Null 단언 연산자
fun main() {
var nullableName: String? = "Jini" // 마지막에 물음표를 붙이면 nullable하게 된다
nullableName = null
// Elvis operater ?:
val name = nullableName ?: "Guest" //null이면 default값을 넣어줘라
println(name)
// non-null 단언 연산자 !!
// nullable 타입을 non-null 타입으로 변경해줌
// null 타입이었으면 널 포인터 제외가 발생
var nullName:String?="jini" //null
println(nullName!!.toLowerCase())
}
반응형
'프로그래밍 강의 > Kotlin' 카테고리의 다른 글
[Kotlin] 코틀린 기초 더 배우기 (0) | 2022.12.28 |
---|---|
[Kotlin] 코틀린 객체 지향 프로그래밍 기초 (0) | 2022.12.28 |
Comments