Kotlin Renewal

2020. 11. 13. 12:06kotlin-이론

코틀린의 특장점 및 특징

1. 간결하다. 

자바와 비교해서 길이나 중간 과정들이 엄청 간결한게 느껴진다.

data class Customer(val name: String, val email: String, val company: String)

val positiveNumbers = list.filter { it > 0 }

object ThisIsASingleton {
    val companyName: String = "JetBrains"
}

 

2. 안전하다.

자바나 안드로이드 개발을 하다보면 Null Point Exception을 의도치 않게 

var output: String
output = null   // Compilation error

// Kotlin protects you from mistakenly operating on nullable types

val name: String? = null    // Nullable type
println(name.length())      // Compilation error

// And if you check a type is right, the compiler will auto-cast it for you

fun calculateTotal(obj: Any) {
    if (obj is Invoice)
        obj.calculateTotal()
}

 

3. 호환성이 좋다. 

jvm에서 사용할 수 있는 라이브러리 및 기존의 자바 코드와 완전히 호환해서 사용할 수 있다. 

import io.reactivex.Flowable
import io.reactivex.schedulers.Schedulers

Flowable
    .fromCallable {
        Thread.sleep(1000) //  imitate expensive computation
        "Done"
    }
    .subscribeOn(Schedulers.io())
    .observeOn(Schedulers.single())
    .subscribe(::println, Throwable::printStackTrace)
    
import kotlin.browser.window

fun onLoad() {
    window.document.body!!.innerHTML += "<br/>Hello, Kotlin!"
}

 

변수 

kotlin에서 모든 것은 객체라고 생각된다. 그래서 c, java의 int, char 등과 다르게 바로 함수를 붙여서 사용할 수 있다. 

Double
Float
Long
Int
Short
Byte

var

내부 데이터를 수정할 수 있다. 

 

val

val의 경우에는 java의 final, c의 const 등과 비슷하게 한번 할당을 해주면 수정할 수 없다.

배열 생성

참고

val array: Array<Int> = arrayOf(1, 2, 3) // [1, 2, 3]
val array2 = arrayOfNulls<Int>(3) // [null, null, null]
val array3 = emptyArray<Int>()
val array4 = Array(5, {i -> i * i}) // [0, 1, 4, 9, 16]

 

함수 선언

- java

public class main {
    public static void main(String[] args){
        main a = new main();
        System.out.println(a.add(2, 4));
    }
    int add(int a, int b){
        return  a+b;
    }
}

 

- kotlin

fun main(args: Array) {

    println(add(1, 4))
}

fun add(a:Int, b:Int):Int = a+b //함수식 형태는 리턴 생략가능 
//fun add(a:Int, b:Int):Int{}이런식으로 사용해도 된다.



fun ss():Unit{}

//void함수와 같다 

 

when

확인할 수 있는 타입이 한정되어있지 않다.

when(a){
        1 -> println("you are number one")
        "hoony"-> println("computer")
        'a'->println("bcdefghi")
        2345 -> println(1234)
        a is String ->  "데이터형까지 사용가능하다는 것이다" 
else -> println("unknown")
        }

 

조건문

다른 언어랑 특별히 사용방법이 다르지는 않지만 in, is 등의 다양한 방법으로 true를 체크할 수 있다.

if(x in 1..5){

} else if (hi is String){

}else{

}

 

반복문

// for 문
 for (animal in animals) {
    Log.d("animal", "animal = " + animal);
 }
 
 for(i in 1 .. 100){
 
 }
 
 for(i in 100 downTo 1 step 2){
 
 }


class

다른 언어와 사용법이 크게 다르지는 않지만 약간의 다른 점이 있어서 작성한다. 

class Person{

}

 

자극히 평범하게 일치한다. 추가로 이번에는 생성자를 만들어보자!

class Person constructor(name:String, age:Int){
	val age: String
    val name: String
	init{
    	this.name = name
        this.age = age
    }
}

 

초기화를 위해서 init{} 블럭을 사용해 초기화를 진행할 수 있다. 또한 생성자를 만들 때 값을 못 넘겨 받아도 초기 설정을 통해서 기본 값을 설정해줄 수 있다. 

class Person(val name:String, val age:Int = 12){
	
}

Person(name="SangHoon") // age = 12

 

부생성자

class Person(name:String, age:Int){
	constructor(name:String, age:Int, id:String, password:String):this(name, age){
    	
    }
}

Person("hi", 12)
Person("hi", 12, "dl57934", "password")

 

클래스 상속

다른 언어와 상속 방식에 몇가지 차이점이 있다. 이것을 알아보자 부모 클래스가 되는 클래스에는 class라는 명칭앞에 open이라는 키워드를 붙여줘야한다.

open class BB{ 
 var name:String = "" 
 var age:Int = 0 
 constructor(name:String, age:Int){ 
   this.name = name this.age = age 
 } 
 open fun whatUInfo(){ 
   println(this.name+this.age) 
  } 
} 

class AA:BB("이상훈", 22){ 
  override fun whatUInfo() { 
    super.whatUInfo() 
    println("너의 이름은 "+name) 
    println("너의 나이는 "+age) 
   } 
}

 

추상 클래스

abstract class AbsClass{
	abstract f(){
    }
}

class MyClass:AbsClass(){
	override fun f(){
    	
    }
}

 

 

DataClass

참고

클래스에서 set, get등을 자동적으로 미리 구현되어 있고 Copy, toString 등을 편리하게 사용할 수 있게 만들어 두었다. 사용법은 정말 간단하다. 

// 방법 1
data class User(var name:String = "", var age:Int = 0 )

// 방법 2
data class User(var name:String = "", var age:Int = 0 ){
	fun compareAge(other:Person) : Boolean{
    	if(other.age < age){
        	return false
		}else {
			return true
        }
}
class Use(var name:String, var age:Int)

var exam3 = User("후니쓰", 22)
var test = Use("후니쓰", 24)

println("User 사용 "+exam3) 
println("Use 사용 "+test)

 

사용할 수 있는 함수들

  • equals()
  • hashCode()
  • copy()
  • toString()
  • componentsN() 

 

 

'kotlin-이론' 카테고리의 다른 글

안드로이드 기본  (0) 2021.01.08
안드로이드 View Group  (0) 2020.11.13
[kotlin] Object Declarations  (0) 2018.06.18
[kotlin]Object Expression  (0) 2018.06.18
[kotlin] Nested Class And Inner Class  (0) 2018.06.18