2020. 11. 13. 12:06ㆍkotlin-이론
코틀린의 특장점 및 특징
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 |