[TECHIT] 코틀린 9

hegleB·2023년 5월 26일
0
post-thumbnail

쓰레드

import kotlin.concurrent.thread

fun main(){

    val thread1 = ThreadClass1()
    thread1.start()

    // Runnable 인터페이스를 구현한 클래스는 start 메서드가 없기 때문에
    // Thread 클래스의 객체를 생성하여 이를 통해 가동한다.
    val thread2 = ThreadClass2()
    val thread3 = Thread(thread2)
    thread3.start()

    thread{
        for(a1 in 1..10){
            println("thread 3")
        }
    }
}

// Thread를 상속받은 클래스 사용
class ThreadClass1 : Thread(){
    override fun run() {
        super.run()

        for(a1 in 1..10){
            println("thread1")
        }
    }
}

// Runnable 인터페이스를 구현한 클래스 사용
class ThreadClass2 : Runnable{
    override fun run() {
        for(a1 in 1..10){
            println("thread2")
        }
    }
}

코틀린 Thread가 자바 Thread가 크게 다른 점은 고차함수를 사용할 수 있다는 점이다. run 메서드에 들어갈 코드(쓰래드로 처리 될 코드)를 익명함수나 람다식으로 작성해서 넣어주면 해당 코드를 쓰래드로 운영해준다. start도 자동으로 호출하기 때문에 개발자가 명시적으로 호출하지 않아도 된다.

Steam

import java.io.DataInputStream
import java.io.DataOutputStream
import java.io.FileInputStream
import java.io.FileOutputStream
import java.io.ObjectInputStream
import java.io.ObjectOutputStream
import java.io.Serializable

fun main(){
    // saveDataStream()
    // readDataStream()
    // saveObjectStream()
    // readObjectStream()
}

class TestClass1(var a1:Int, var a2:Int) : Serializable{

    fun printValue(){
        println("a1 : $a1")
        println("a2 : $a2")
    }
}

// DataStream으로 쓰기
fun saveDataStream(){
    val fos = FileOutputStream("data1.dat")
    val dos = DataOutputStream(fos)
    
    dos.writeInt(100)
    dos.writeDouble(11.11)
    dos.writeUTF("문자열1")

    dos.flush()
    dos.close()
    fos.close()
    
    println("쓰기 완료")
}

// DataStream으로 읽기
fun readDataStream(){
    val fis = FileInputStream("data1.dat")
    val dis = DataInputStream(fis)

    val a1 = dis.readInt()
    val a2 = dis.readDouble()
    val a3 = dis.readUTF()

    dis.close()
    fis.close()

    println("a1 : $a1")
    println("a2 : $a2")
    println("a3 : $a3")
}

// ObjectStream으로 쓰기
fun saveObjectStream(){
    val fos = FileOutputStream("data2.dat")
    val oos = ObjectOutputStream(fos)
    
    val t1 = TestClass1(100, 200)
    val t2 = TestClass1(1000, 2000)
    
    oos.writeObject(t1)
    oos.writeObject(t2)

    oos.flush()
    oos.close()
    fos.close()
    println("쓰기 완료")
}

fun readObjectStream(){
    val fis = FileInputStream("data2.dat")
    val ois = ObjectInputStream(fis)

    val t3 = ois.readObject() as TestClass1
    val t4 = ois.readObject() as TestClass1

    ois.close()
    fis.close()

    t3.printValue()
    t4.printValue()
}

자바는 try-catch를 필수적으로 작성해야 한다면 코틀린은 써도되고 안써도 된다. 하지만 어떤 오류가 발생할지 모르기 때문에 try-catch를 사용하는 것을 권장한다.

profile
성장하는 개발자

0개의 댓글

관련 채용 정보