inline 함수는 C의 전처리기에서 define과 같은 역확을 한다.

다음의 예제를 보고 설명하겠다.

inline fun hello()
{
  println("Hello")
  println("Kotlin")
}

fun main(args: Array<String>)
{
  hello()
  hello()
  hello()
}

위와 같이 inline 키워드를 사용하여, 함수를 선언해 놓으면, 컴파일 후에는 결국은 다음과 같이 변경된다.

fun main(args: Array<String>)
{
  println("Hello")
  println("Kotlin")
  println("Hello")
  println("Kotlin")
  println("Hello")
  println("Kotlin")
}

참고 : 초보자를 위한 Kotlin 200제 라는 책을 기반으로 공부 내용을 정리하였습니다.

'Kotlin' 카테고리의 다른 글

[Kotlin] lateinit  (0) 2020.08.29
[Kotlin] const  (0) 2020.08.29
[Kotlin] 객체 선언 및 동반자 객체  (0) 2020.08.29
[Kotlin] 기초 - 함수  (0) 2020.08.27
[Kotlin] 기초 - typealias, 제어문  (0) 2020.08.27

Kotlin에서는 하기와 같이 객체를 선언 할 수 있다.

object TestObject
{
  var tempStr: String = ""
  var tempInt: Int = 0
  fun print()
  {
    println(tempStr)
    println(tempInt)
  }
}

fun main(args: Array<String>)
{
  // 식별자 Person으로 객체에 바로 접근 가능
  TestObject.tempStr = "Test Object"
  TestObject.tempInt = 100
  TestObject.print()
}

위의 예제와 같이 new로 생성하지 않고, java의 singletone을 사용하는 것과 같이 사용 할 수 있다.

 

동반자 객체는 클래스 안에 포함되는 이름 없는 객체를 뜻한다.

다시 말하면, kotlin에서는 static 키워드가 존재하지 않는다. 하지만 동반자 객체를 이용하면, class내에서 java의 static 과 같은 함수를 만들 수 있다.

예를 들면 다음과 같다.

class TestClass private constructor()
{
  companion object
  {
    fun create(): TestClass
    {
      countCreated += 1
      return TestClass()
    }

    var countCreated = 0
    private set
  }
}

fun main(args: Array<String>)
{
  val a = TestClass.create()
  val b = TestClass.create()
  println(TestClass.countCreated)
}

자세한 설명은 하기의 블로그를 참고하면 더욱 도움이 된다.

참조 사이트 : https://medium.com/@lunay0ung/kotlin-object-declaration-%EA%B7%B8%EB%A6%AC%EA%B3%A0-companion-object-feat-static-d5c97c21168

 

Kotlin: Object Declaration, 그리고 Companion Object (feat.static)

먼저, Object(객체)란 무엇일까?

medium.com

참고 : 초보자를 위한 Kotlin 200제 라는 책을 기반으로 공부 내용을 정리하였습니다.

'Kotlin' 카테고리의 다른 글

[Kotlin] const  (0) 2020.08.29
[Kotlin] inline 함수  (0) 2020.08.29
[Kotlin] 기초 - 함수  (0) 2020.08.27
[Kotlin] 기초 - typealias, 제어문  (0) 2020.08.27
[Kotlin] 기초 - 정수/실수/문자 타입과 문자열  (0) 2020.08.27

Kotlin에서는 다음과 같은 방식으로 함수를 선언한다.

fun {식별자}({인자}:{type} ...):{반환타입}

{

}

 

또한 함수 선언을 간략화 할 수 있다.

fun {식별자}({인자}:{type} ...):{반환타입} = ...

 

fun function(a:Double):Double
{
    return 3.0 + 7 + a
}

// 함수 선언 간략화
fun function(a:Double):Double = 3.0 + 7 + a
fun function(a:Double) = 3.0 + 7 + a

Unit type은 Java나 C에서 사용하는 문법 중 void와 같은 역활을 한다.

fun myFunction(a:Int, b:Int):Unit
{
    println("a: " + a + ", b: " + b)
}

// return type 을 생략 가능
fun myFunction(a:Int, b:Int)
{
    println("a: " + a + ", b: " + b)
}

// 함수를 다음과 같이 간략화도 가능
fun myFunction(a:Int, b:Int) = println("a: " + a + ", b: " + b)

Default 인수를 C/C++과 같이 초기 값을 선언할 수 있다.

그리고 함수를 실질적으로 사용할 시, 값만 선언하여 사용할 수 있으나, 파라메터 이름을 이용하여, 값을 설정할 수 있다.

예제는 다음과 같다.

funDefaultTest(89, 96)
funDefaultTest(89, 96, true)
funDefaultTest(90)
funDefaultTest(66, print = true)
funDefaultTest(print = true)
funDefaultTest(print = true, a = 10, b = 23)

// 함수 인자 값 초기과
fun funDefaultTest(a:Int = 0, b:Int = 0, print:Boolean = false) : Double
{
    var result = (a + b) / 2.0
    if(print)
    	println(result)
    return result
}

N개의 인수를 받는 함수를 선언할 수 있다. (가변 인수)

사용 방법은 vararg라는 키워드를 사용하여, 가능하다.

또한 가변 인수에 대해서 선언하지 않는다고 하더라도 가변 인수의 size 값이 0으로 받아오기 때문에 정상적으로 처리할 수 있다.

해당 내용에 대한 예제는 다음과 같다.

fun main(args: Array<String>) {
  testVarargFun(1,2,3,4,5,6,7)
  testVarargFun(32, 57,12)
  testVarargFun()
}

fun testVarargFun(vararg numbers:Int) : Int
{
  var count:Int = numbers.size
  var i:Int = 0; var sum:Int = 0

  while(i < count)
  {
    sum += numbers[i]
    i++
  }

  return sum
}

// 가변 인수는 일반 인수와 같이 병행하여 사용이 가능
fun testVarargFun(something:Char, vararg numbers:Int) : Int
fun testVarargFun(vararg numbers:Int, something:Char) : Int

참고 : 초보자를 위한 Kotlin 200제 라는 책을 기반으로 공부 내용을 정리하였습니다.

+ Recent posts