본문 바로가기
Kotlin

[Kotlin]

by 엘딘 2022. 2. 3.

 

변수 & 상수

var - 변수(insert, delete, update)
var a:Int = 1             [변수명:변수타입 형태로 작성]
var a:Int?                 [?를 사용함으로써 null값 허용]
a = 12 사용 가능

val - 상수(변하지 않는 값, select)
val a:Int = 11
a = 22 사용 불가

주석

  한줄 - ctrl + /

  범위 - ctrl + shift + /

 

출력

 · print("input = ")

  // val input = readLine()

 · println("You input : " + input)

 · println("You input : $input")     

     $ + 변수 : 변수 값을 출력

 · println("${input}을 출력하세요")

     input값과 문자를 연결해서 출력하려면 input을 {}로 묶어주어야함

 

입력

  val read = Scanner(System.`in`)         * `는 ~밑에 있는 문자

  val number = read.nextInt()

var a = 1
val str1 = "a = $a"
val str2 = "a = ${a + 1}"
println("str1: \"$str1\", str2: \"$str2\"")	>	str1: "a = 1", str2: "a = 2"

val num1 = 5    // Int로 추론
val num2 = 3
val num3:Int = num1 + num2
println("num1 + num2 = $num3")			>	num1 + num2 = 8

// 문자열 비교 == equals
var str3:String = "hello"
var str4 = "world"
var str5 = "hell"
str5 += "o"

println( "${ str3 == str5 }" )  		>	true		// 값을 비교 
println( "${ str3 === str5 }" ) 		>	false		// 다른 객체이므로 false
println( "${ str3 === str4 }" )			>	false

 

? !!

? - null 값을 포함할 수 있다

!! - null 값이 아님을 강조

val name:String = "홍길동"
val name2:String = name			// 에러 - String?과 String은 다름
val name3:String? = name		// 정상
val name4:String = name!!		// 정상 - !!를 쓰면서 String?을 String타입으로 변환

 

toString() toInt()
var a:Int = 12

var s = a.toString()
println(s)			> 12	// 문자로 출력

var num:Int = s.toInt()			// Java - parseInt()
println("${num + 1}")		> 13

 

배열
arrayOf
var array = arrayOf(10, "안녕하세요", true)	// 다양한 자료형 사용 가능
println(array)					> 배열 주소값 출력
println(array.contentToString())		> [10, 안녕하세요, true]
println(arrays.toString(array))			> [10, 안녕하세요, true]
println(array[2])				> true
println(array.get(2))				> true
println(2 in array)				> true

// 제네릭
var arrayInt = arrayOf<Int>(10,20,30)
var arrayString = arrayOf<String>("십", "이십", "삼십")

var array2 = Array(3, {33})			> (크기){들어갈 값}
print(array2.contentToSTring())			> 33, 33, 33 출력


var array3 = arrayOf(1,2,3,4,5)
println("${array3.size}")			> 5
println("${array3.sum()}")			> 15

array3[0] = 10
println(array.contentToString())		> [10, 2, 3, 4, 5]

for(n in array3){ println(n) }			> 10 2 3 4 5 (값들이 세로로 나열되어 출력)
for(i in array3.indices){ print("$i : ${array3[i]}")	
  > 0 : 10,  1 : 2,  2: 3,  3 : 4,  4 : 5
  
// filter
val array4 = arrayOf(1, -2, 3, -4, 5, 0)
array4.filter{e -> e>0}.forEach{e -> print("$e")}
println()					> 1 3 5
val result = array.filter{e -> e>0}
println(result)					> [1, 3, 5]

val fruits = arrayOf("banana", "pear", "apple", "kiwi", "avocado")
fruits
    .sortedBy{it}				// 오름차순
    .map{it.toUppercase()}			// 대문자
    .forEach{print(it)}				> APPLE AVOCADO BANANA KIWI PEAR
println(fruits.contains("apple"))		> true

// 조건문
when{ "apple" in fruits -> println("Apple이 있습니다")}	 > Apple이 있습니다

 

dto, vo
data class Product(val name:String, val price: Double)	// 한줄 끝
  getter setter는  내부적으로 생성 
  class앞에 public으로 생략가능
  name 필드는 private으로 생성
  
fun main(args:Array<String>){
    var cls = Person("길동", "홍")
    println(cls.getFullName())					> 길동 홍
    cls.firstName = "수길"
    println(cls.getFullName())					> 수길 홍
	
var bird = Bird()
    bird.color = "red"
    println("${bird.color}")					> red
    bird.sing("long")
}

class Person{
    var firstName:String
    var	lastName:String
    
    constructor(firstName:String, lastName:String){
    this.firstName = firstName
    this.lastName = lastName
    }
    fun getFullName(): String{
    	return "$firstName $lastName"
    }
}
    
class Bird{
    var wing:Int = 2
    var length:String = "short"
    var color:String = "blue"
    
    fun sing(vol:String) = println("sing vol: $vol")		> long
}
fun main(args:Array<String>){
    val base1 = Base("abc", "123", 24)
    println(base1.toString())			> Base(id='abc', pwd='123', color=24)

    val base2 = Base("bcd", "234")
    println(base2.toString())			> constructor(bcd:String, 234:String, 22:Int)
}

class Base(val id:String, val pwd:string, val age:Int){		// 기본 생성자
    constructor(id:String, pwd:String) : this(id, pwd, 22){	// 보조 생성자
    	println("$id:String, $pwd:String, $age:Int")		> id:'abc', pwd:'123, age:24
    }
    
    override fun toString() :String{
    	return "Base(id='$id', pwd='$pwd', age=$age)"
    }
}

 

if, for, switch(when), while
//if
var num:Int = 50
val str = if(num > 30){
             "abc"
          }else{
             "bcd"
          }
// == val str = if(num > 30){ "abc" }else{ "bcd" }


//삼항연산자(Java)
int num = 50
String str = (num > 30) ? "abc":"bcd"

// kotlin에는 삼항 연사자가 없음
var num:Int = 30
val str = if(num > 30) "abc" else "bcd"

val max = if(a > b) a else b 			// a 보다 b가 크면 a, 아니면 b


// switch(Java)
String s = ""
int num = 3
switch(num){
    case 0:
        s = "abc"
        break;
    case 1:
        s = "bcd"
        break;
    default:
        s = "xyz"
}
// kotlin(when)
val a1:Int = 3
val s = when(a1){
            0 -> "abc"
            1 -> "bcd"
            else -> "xyz"
        }

val score = 85.0
var grade:Char = 'F'
when(score){
	in 90.0..100.0 -> grade = 'A'
	in 80.0..89.9 -> grade = 'B'
	in 70.0..79.9 -> grade = 'C'
	!in 70.0..100.0 -> grade = 'F'
}


// for
val array = arratIf(1, 2, 3)
for(number in array){
	println(number)
}

for(i in 0 until 100){				// 0 until 100으로 쓰면 0 <= until < 100으로 자동 표기
    println(i)
}
for(i in 0 .. 100){				// ..는 0 <= .. <= 100으로 양쪽 숫자 모두 포함
    println(i)
}


// while, do while
var w:Int = 0
while(w < 10){
	println("w: $w")
    w++
}

w = 0
do{
    w++
    println("w:$w")
}while(w < 10)


// continue, break
for (i in 1..5){
    if(i == 3) break			
    println(i)					> 1, 2까지 출력
}

for(i in 1..5){
    if(i == 4) continue
    println(i)					> 1,2,3,5 출력
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Kotlin' 카테고리의 다른 글

[Android] GoogleMaps  (0) 2022.04.03
[Kotlin] 가위바위보  (0) 2022.02.22
[kotlin] 2  (0) 2022.02.09

댓글