Kotlin 기초 (4)

2023. 1. 1. 23:49교내활동/Programming GURU2

추가적인 문법

  • 패키지
    • 클래스와 인터페이스가 많아지면 관리하기 어려워 패키지단위로 묶어서 관리함
    • package 패키지명
    // 자바 프로젝트처럼 디렉토리와 매치되어야 하지는 않음
    package  com.example.edu
    class Person(val name: String, val age: Int)
    • 패키지를 지정하지 않으면 이름이 없는 기본(default) 패키지 포함
    • import 이름이 충돌하면 as 키워드를 이용해 로컬에서 사용할 이름을 변경하여 사용
    import com.example.edu.Person
    import com.example.edu.Person as User
    • import는 클래스 뿐만 아니라 다른 것도 불러올 수 있음
    • 최상위 레벨 함수와 property, object 선언의 함수와 property, 열거형 상수
    패키지 이름 설명
    kotlin.* Any, Int, Double 등 코어 함수와 자료 형
    kotlin.text.* 문자와 관련된 API
    kotlin.sequences.* 컬렉션 자료형의 하나로 반복이 허용되는 개체를 열거
    kotlin.ranges.* If문이나 for문에서 사용할 범위 관련 요소
    kotlin.io.* 입출력 관련 API
    kotlin.collections.* List, Set, Map 등의 컬렉션
    kotlin.annotation.* 어노테이션 관련 API
  • 제네릭스(Generics)
    • 데이터의 안전성을 보장
    • 제네릭스를 사용해 strList에 문자열만 들어가도록 설정할 수 있음
    • 다음 코드의 마지막 행은 컴파일 오류가 발생함
    var strList = ArrayList<String>(4)
    strList.add("첫번째")
    strList.add("두번째")
    strList.add(3)  //error
    • 제네릭스는 String분만 아니라 Int, Double 등을 사용할 수 있음
    • 사용자가 정의한 클래스 형에도 사용 가능
  • 예외(exception)
    • Kotlin 프로그램 실행 중에 발생하는 오류로 실행 도중의 잠재적인 오류까지 검사할 수 없어 비정상적으로 프로그램이 종료되는 경우
      • 운영체제의 문제: 잘못된 시스템 호출의 문제
      • 입력값의 문제: 존재하지 않는 파일, 숫자입력란에 문자 입력 등
      • 받아들일 수 없는 연산: 0으로 나누기 등
      • 메모리의 할당 실패 및 부족
      • 컴퓨터 기계 자체의 문제: 전원 문제, 망가진 기억장치 등
    try {
        // 예외 가능성있는 문장
    } catch(e: /*예외처리 클래스 명*/) {
        // 예외처리를 위한 문장
    } finally {
        //반드시 실행되어야 하는 문장
    }
  • 날짜 형식
    • DataFormat 클래스를 상속받은 SimpleDataFormat 사용
    • 년월일, 시분초와같은 일반적 표현이 가능
    import java.text.DateFormat
    import java.text.SimpleDateFormat
    import java.util.*
    
    fun main() {
        var now = Date
        var sFormat : SimpleDataFormat
    
        sFormat = SimpleDateFormat("yyyyMMdd")
        sFormat = SimpleDateFormat("HH:mm:ss")
        
        println(sFormat.format(now))
    }
  • 문자열 비교
    • String 클래스의 equals() 메소드 사용
    var str : String = "안녕하세요"
    if (str.equals("안녕하세요")) {
        // 문자열이 같다면 이곳을 수행
    }
  • let()
    • 블록에 자기 자신을 전달하고 수행된 결과를 반환하는 함수
    // fun <T, R> T.let(block: (T) -> R): R
    val result = str?.let {
        Integer.parseInt(it)  // parseInt: str을 int로 변환
    }
  • with()
    • parameter로 객체를 받고, 블록에서 수행된 결과를 반환하는 함수
    // fun <T, R> with(receiver: T, block T.() -> R): R
    with(str) {
        println(toUpperCase())
    }
  • apply()
    • 블록에 자기 자신을 전달하고 이 객체를 반환하는 함수
    // fun <T> T.apply(block: T.() -> Unit): T
    val result = car?.apply{
        car.setColor(Color.RED)
        car.setPrice(1000)
    }
  • run()
    • 익명함수처럼 사용하거나 블록에 자기 자신을 전달하고 수행된 결과를 반환하는 함수
    • 객체에서 호출하는 방법은 객체를 블록의 리시버 객체로 전달하고 블록의 결과를 반환함
    • 안전한 호출을 할 수 있다는 장점으로 with() 함수보다 유용함
    // fun <R> run(block: () -> R): R
    val avg = run {
        val korean = 100
        val english = 80
        val math = 50
        
        (korean + english + math) / 3.0
    }
  • 리스트
    • 배열 같은 자료형의 데이터들을 순서대로 가지고 있는 자료구조
    • 중복된 아이템을 가질 수 있고 추가, 삭제, 교체 등이 쉬움
    val foods: List<String> = listOf("라면", "갈비", "밥")
    // 요소를 변경할 수 없는 읽기 전용 리스트는 listOf() 메서드로 작성
    val foods = listOf("라면", "갈비", "밥")
    
    //요소를 변경하는 리스트를 작성할 때는 mutableListOf() 메서드 이용
    val foods = mutableListOf("라면", "갈비", "밥")
    foods.add("초밥")
    foods.removeAt(0)  // 0번째 인덱스 아이템 삭제
    foods[1] = "부대찌개"  // 인덱스 1번의 아이템을 부대찌개로 변경
  • map()
    • key와 value의 쌍으로 이루어져 있으며, key가 중복될 수 없는 자료구조
    // 읽기 전용 map
    val map = mapOf("a" to 1, "b" to 2, "c" to 3)
    
    // 변경 가능 map
    val citiesMap = mutableMapOf("Korea" to "Seoul",
                                "Japan" to "Tokyo",
                                "China" to "Beijing")
    // 요소 추가
    citiesMap["USA"] = "Washington"
    
    // map의 key와 value 탐색
    for ((k, v) in map) {
        println("$k -> $v")
    }
     
  • set
    • set은 중복되지 않는 요소들로 구성된 자료구조
    • setOf() 메서드로 읽기 전용집합을 만들고, mutableSetOf()메서드로 수정 가능한 집합을 만듬
    // 읽기 전용 집합
    val citySet = setOf("서울", "수원", "부산")
    
    // 수정 가능한 집합
    val citySet2 = mutableSetOf("서울", "수원", "부산")
    citySet2.add("안양")
    citySet2.remove("수원")
    
    // 집합의 크기
    println(citySet2.size)
    
    // "서울"이 집합에 포함되어 있는지
    println(citySet2.contains("서울"))

'교내활동 > Programming GURU2' 카테고리의 다른 글

Android layout 기초 (2)  (0) 2023.01.02
Android layout 기초 (1)  (0) 2023.01.02
Kotlin 기초 (3)  (0) 2023.01.01
Kotlin 기초 (2)  (0) 2023.01.01
Kotlin 기초 (1)  (0) 2023.01.01