const 같은 경우에는 inline 키워드와 동일한 역활을 한다.

단지, const 키워드는 inline과는 다르게 변수에만 사용 가능하다.

 

const 사용에 대한 간단한 예는 다음과 같다.

const val hello = "Hello" + " World!"

object Foo
{
  const val bar = "bar"
}

fun main(args: Array<String>)
{
  println(hello)
  println(Foo.bar)
}

위의 예제와 같이 선언하면, 결국 컴파일 시, 하기와 같이 변경된다.

fun main(args: Array<String>)
{
  println("Hello World!")
  println("bar")
  println("Hello World!")
  println("bar")
}

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

'Kotlin' 카테고리의 다른 글

[Kotlin] Class  (0) 2020.08.29
[Kotlin] lateinit  (0) 2020.08.29
[Kotlin] inline 함수  (0) 2020.08.29
[Kotlin] 객체 선언 및 동반자 객체  (0) 2020.08.29
[Kotlin] 기초 - 함수  (0) 2020.08.27

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제 라는 책을 기반으로 공부 내용을 정리하였습니다.

typealias 키워드를 이용하여, C와 C++ 언어의 typedef와 같이 type에 별명을 붙일 수 있다.

typealias csjungNumber = Int

fun main(args: Array<String>) {
    var a:csjungNumber = 10
    println(a)
}

if - else 문 같은 경우에는 다른 언어들과 동일하게 사용하고 있으며, Kotlin에서는 추가적으로 표현식에도 사용할 수 있다.

al value:Int = if(10 > 5) {
println("10은 5보다 크다.")
10
} else {
println("10은 5보다 크지 않다.")
5
}

when 문은 타 언어에서 switch문과 같은 역할을 한다.

when ({타깃 표현식}) {

    {타깃 표현식과 비교할 값} ->

        {

            ....

        }

}

// 일반적인 사용법
when(score / 10)
{
  6 -> {
	println("D")
  }

  7 -> {
  	println("C")
  }

  8 -> {
  	println("B")
  }

  9, 10 -> {
  	println("A")
  }

  else -> {
  	println("F")
  }
}

// 표현식으로 사용법
val grade: Char = when(score / 10)
{
  6 -> 'D'
  7 -> 'C'
  8 -> 'B'
  9, 10 -> 'A'
  else -> 'F'
}

while문 같은 경우에는 타 언어와 동일한 방식으로 사용되고 있다.

do {
  i += 1
  if(i >= 5) {
    ...
    break
  } else if(i == 2) {
    ...
    continue
  }
  ...
} while(true)

Label 은 중첩된 반복문의 흐름을 제어하기 위한 키워드 이다.

사용 방법은 다음과 같다.

- while 구문

{label name}@ while 구문

- break 구문

 break@{label name}

Label에 대한 사용 예제는 다음과 같다.

fun main(args: Array<String>) {
  var x = 0;
  var y = 0;
  var z = 0;

  outer@ while(x <= 20) {
    y = 0
    while(y <= 20) {
      z = 0
      while(z <= 20) {
        if(x+y+z == 15 && x - y - z == 5) {
            break@outer
        }
        z++
      }
      y++
    }
    x++
  }

  println("x:$x, y:$y, z:$z")
}

위의 예제를 보았을 때, "if(x+y+z == 15 && x - y - z == 5)" 라는 조건에 참이 된다면, "while(z <= 20)"의 흐름을 계속 타지 않고, "outer@while(x <= 20)" 의 흐름을 바로 탈출하게 된다.

 

만약 outer@ 가 "while(y <= 20)" 에 존재한다면, 해당 코드는 while(x <= 20) 의 흐름을 계속 타고 있을 것이다.

 

위의 label에 대한 예제 코드의 결과물은 다음과 같다.

결과 값

x:10, y:0, z:5

 

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

Kotlin에서 각 타입 및 크기는 다음과 같다.

 

정수 타입

- Byte      |        1 byte

- Short    |        2 byte

- Int         |        4 byte

- Long     |        8 byte

 

실수 타입

- Float     |        4 byte

- Double  |        8 byte

 

문자 타입

- Char    |      1 byte

 

문자열

- String

 

각 타입 별로 값을 정의 할 경우, "_" 를 이용하여, 숫자들의 자리를 구분할 수 있다. 이는 위치 및 갯수에 제약이 없다.

(하기의 예제 참고)

val a:Byte = 125
val b:Short = (100 + 200) * 100
var c:Int = 12_4354_6538	// 숫자 안에 _ 를 넣어주면, 숫자를 좀더 알아보기 쉽게 정의할 수 있다.
// _ 의 위치와 갯수는 마음대로 넣을 수 있으며, 실수 타입에서도 적용 가능.
var d:Int = 1243546538

c = 0xFF_88_88	// 0x로 시작하면, 16진수로 인식
c = 0b01010010_01100011_01110101_01000101 //0b로 시작하면, 2진수로 인식
var e:Long = -543_7847_3984_7238_4723

var f:Float = 67.6f
val g:Double = 658.456

f = (f+g).toFloat()

var ch:Char = 'A'
ch = '\uAC00' //<-- /u를 이용하여, Unicode를 직접 입력할 수 있다.
ch = '한'

var str:String = "Hello"
str = str+"\nKotlin!"

Kotlin에서는 Int Type보다 작은 정소들을 이용하여, 연산할 시, 반드시 Int로 전환이 되어 결과 값이 발생된다.

예) Byte + Byte = Int, Byte + Short = Int, Byte - Byte = Int, Byte * Short = Int,  Byte / Short = Int

 

※ Kotlin은 8진법을 지원하지 않는다.

 

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

변수

변수 선언 방식

var {변수 명}: {변수 Type}

예> var total:Int

 

변수 선언 및 초기화

var {변수 명}: {변수 Type} = {초기 값}

예> var total:Int = 100

 

변수 선언

var : 일반 변수

val : 불변 변수 (java에서 final 선언으로 생가하면 됨)

 

예제 코드는 다음과 같다.

var total: Int
total = 10

val a: Int = 10 + 53 - 7
println(a)

val b:Int = 43 + 75 + a
println(b)

total = a + b
println(total)

산술 연산자

산술 연산자의 종류 : +. -. *, /, %

val num:Int = 15 - 4 * 3
val num2:Int = 65 % 7
val num3:Double = 7.5 / 5 + 22.25
val num4:Double = num/num2 + 0.7
val num5:Double = num.toDouble()/num2 + 0.7

Int를 Double로 변경하는 방법은 다음과 같다.

1.  소숫점을 붙여서 변경하는 방법 : 15 -> 15.0

2. API 를 이용한 방법 : {변수 명}.toDouble()

 

Java 와 동일하게 a++ 또는 ++a 와 같이 동일하게 사용하고 있다.

var a:Int = 10
var b:Int = 20

println(a++ + b)
println(a)
println(--b)

비트 연산자

Kotlin은 비트 연산자를 기호가 아닌 문자로 구성된다.

AND 연산

- Java : 15 & 7

- Kotlin : 15 and 7

 

OR 연산

- Java : 15 | 7

- Kotlin : 15 or 7

 

XOR 연산

- Java : 15 ^ 7

- Kotlin : 15 xor 7

 

~연산

- Java : ~32767

- Kotlin : 32767.inv()

 

<< 연산

- Java : 1 << 3

- Kotlin : 1 shl 3

 

>> 연산

- Java : 1 >> 3

- Kotlin : 1 ser 3

 

>>> 연산 ( 부호를 유지한 채 Shift 연산 )

- Java : -17 >>> 2

- Kotlin : -17 user 2

 

비교/논리/참조 변수 비교 연산자

비교 연산자의 종류 : ==, !=, >, <, >=, <=

논리 연산자의 종류 : &&, ||, !

참조 변수 비교 연산자

- 두가지의 참조 변수가 하나의 같은 객체를 가리키는 지를 확인하는 연산자

=== : 같은 객체를 가르킬 경우

!== : 서로 다른 객체를 가르킬 경우

 

참조 변수 비교 연산자의 예제

var a = "one"
var b = "one"

println(a===b) // Result : True
// 컴파일러는 매번 새로운 문자열을 생성하지 않고, 하나의 문자열을 가리키도록 만듦.

b = "on"
b += "e"
println(a===b) // Result : False

b = a
println(a===b) // Result : True

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

기본 문자열 출력 하는 방법은 "println" 이라는 함수를 사용하면, 출력할 수 있다.

println("Hello, world!")

문자열 안에 표현식 넣는 방법은 다음과 같다.

큰 따음표 안에 [$]를 표기 후, 뒤에 변수명을 입력하면 된다.

예를 들면 다음과 같다.

var a:Int = 10

println(“ABC $a”)

표현식의 값을 문자열로 표기할 경우에는 [ $ ]다음에 [ { ], [ } ] 로 표현하면 된다.

예를 들면 다음과 같다.

var a:Int = 10

var b:Int = 20

println(“ABC ${a + b}")

위와 같이 사용하여, 문자열을 출력 할 수 있다.

 

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

+ Recent posts