티스토리 뷰

728x90

   

문자열

 

  1. 문자열 템플릿
import java.util.Date
fun main() {
    val name = readLine()
    println("Hello, $name!\n, Today is ${Date()}")
}
${}의 중괄호 사이에 코틀린 식을 넣으면 문자열에 식을 넣을 수 있다.

간단한 변수 참조인 경우 중괄호의 생략이 가능하다.

 

 

    2.  로우 문자열

val message = """
    Hello, &name!
    Today is ${Date()}
  """.trimIndent()
큰따옴표 세 개로 둘러싸여 있는 로우 문자열을 사용하면 이스케이프 시퀀스를 사용하지 않고 문자열을 작성할 수 있다.

 

 

    3.  문자열 비교

자바 코틀린
==와  != 연산자는 참조 동등성을 비교한다.
실제 문자열 내용을 비교하려면 equals() 메소드를 사용한다.
==를 사용하면 직접 equals()를 호출한다.
참조 동등성을 위해서는 ===와 !== 연산자를 사용한다.

 

 

    4.  프로퍼티

  • length: 문자열 길이
  • lastIndex: 마지막 문자 인덱스

 

배열

 

  1. 배열 정의하기
val a = emptyArray<String>()
val b = arrayOf("hello", "world!")
val c = Array(5) { (it + 1) * (it + 1) }
  • it: 인덱스를 표현하는, 자동으로 선언되는 변수

 

  • Array<T>처럼 사용하는 배열은 모든 수를 박싱하기 때문에,

ByteArray, ShortArray, IntArray, FloatArray 등의 배열 타입을 사용하는 것이 효율적이다.

 

  • 배열 원소를 명시적으로 초기화해야 한다.

 

  • 자바와 동일하게 배열에는 실제 데이터에 대한 참조를 저장한다.

배열의 깊은 복사를 위해서는 copyOf() 함수를 사용한다.

 

 

    2.  배열 추가

val a = intArrayOf(1, 2, 3) + 4                 // 1, 2, 3, 4
val b = intArrayOf(1, 2, 3) + intArrayOf(5, 6)  // 1, 2, 3, 5, 6
+ 연산을 사용해 원소를 추가한 새로운 배열을 만들 수 있다.

 

 

    3.  배열 비교

문자열과 달리 배열에 대한 ==와 != 연산자는 참조를 비교한다.

배열 내용에 대한 비교는 contentEquals()를 사용한다.

 

 

    4.  프로퍼티

  • size: 배열의 길이
  • lastIndex: 마지막 배열 인덱스

 

 

함수

 

  1. 함수 정의하기
fun circleArea(radius: Double): Double {
    return PI * radius * radius
}
 
  • fun 키워드: 함수를 정의한다고 컴파일러에게 알려준다.
  • 파라미터: val, var 키워드를 사용할 수 없으며 불변 변수다.
  • 값에 의한 호출을 기반으로 한다.
  • 항상 파라미터와 반환 타입을 지정해야 한다.

 

 

    2.  반환 타입을 생략할 수 있는 두 가지 경우

  • Unit 타입을 반환하는 경우
fun prompt(name: String) {
    println("Hello, $name")
}

fun prompt(name: String): Unit {
    println("Hello, &name")
}
Unit은 자바의 void에 해당하는 타입으로, 반환값이 없다는 의미다.
위 두 함수의 정의는 서로 동일하다.

 

  • 식이 본문인 함수인 경우
fun circleArea(radius: Double): Double = PI * radius * radius
fun circleArea(radius: Double) = PI * radius * radius
어떤 함수가 단일 식으로 구현될 수 있다면,return 키워드와 {}를 생략하고 위와 같이 함수를 작성할 수 있다.

 

 

    3.  위치 기반 인자, 이름 붙은 인자

fun rectangleArea(width: Double, height: Double): Double {
    return width * height
}

fun main() {
    println("Rectangle area: ${rectangleArea(10, 4)}"}
}
  • 위치 기반 인자(positional argument)

위의 예시처럼 첫 번째 인자는 첫 번째 파라미터, 두 번째 인자는 두 번째 파라미터로 전달되는 방식

 

 

rectangleArea(width = 10, height = 4)
rectangleArea(height = 4, width = 10)
  • 이름 붙은 인자(named argument)

위치가 아니라 파라미터의 이름을 명시함으로써 인자를 전달하는 방식

 

 

    4. 디폴트 값

fun readInt(radix: Int = 10) = readLine()!!.toInt(radix)

fun main() {
    val decimalInt = readInt()
    val decimalInt2 = readInt(10)
    val hexInt = readInt(16)
}
함수를 정의할 때 파라미터의 디폴트 값을 설정할 수 있다.

→ 오버로딩이 많아지는 경우를 피할 수 있다. 

 

 

    5.  vararg

인자의 개수가 정해지지 않은 파라미터를 정의할 때 사용하는 키워드

fun printSorted(vararg items: Int) {
    items.sort()
    println(items.contentToString())
}

fun main() {
    printSorted(6, 2, 10, 1) // 1
   
    val numbers = intArrayOf(6, 2, 10, 1)
    printSorted(*numbers) // 2
}
 
  • vararg를 사용하는 함수 내에서는 Array 타입으로 사용된다.
  • 예시 2번처럼 배열 나열을 위한 스프레드 연산자 *를 사용하면, 배열을 인자로 넘길 수 있다.
  • 가변 인자 이후의 파라미터는 이름 붙은 인자로만 전달할 수 있다.

 

 

가변 인자 파라미터의 순서

  • vararg 파라미터 앞에 파라미터가 있는 경우, 앞에 오는 파라미터의 개수를 제외한 나머지가 vararg 파라미터로 전달된다.
  • 가변 인자 이후의 파라미터는 이름 붙은 인자로만 전달할 수 있다.

 

cf) vararg는 이름 붙은 인자로 전달할 수 없다.

스프레드 연산자로 배열을 전달하는 경우만 이름 붙은 인자를 사용할 수 있다.

(함수 내부에서 vararg 인자는 <T> 배열로 사용되기 때문에 원시 타입의 배열을 전달하려면 toTypedArray() 사용해서 일반 배열로 변환해야 함.)

 

 

 

    6.  접근 제한자

  • public: 프로젝트 어디서나 접근 가능
  • private: 클래스 내부에서만 접근 가능
  • protected: 클래스 내부와 자식 클래스에서만 접근 가능
  • internal: 프로젝트 모듈 내에서 접근 가능

cf) module: 함께 컴파일 되는 파일의 집합. 프로젝트의 하위개념. 프로젝트 내에서 기능을 구분. (프로젝트-모듈-패키지-파일)

728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함