본문 바로가기
개발 지식/Kotlin

[Kotlin] Kotlin 기초 -01

by 에르주 2022. 4. 24.
반응형

1. 변수 선언 : var , val

- var : 선언 후 수정 가능

- val: 선언 후 수정 불가능 (Java에서 final과 같은 역할을 한다.)

val 변수 설정

 

 

 

 

 

 

또한 변수타입을 지정 할 수 있다.

 

// null인 값으로 선언
var c: Int? = null								   		

var intValue: Int = 1234		// Int                          			
var LongValue: Long = 1234L		// Long
var intValueByHex: Int = 0x1af		 // 16진수
	
//UTF-16 BE 인코딩 관리하므로 한글자당 2bytes
var charValue: Char = 'a'		// char
var booleanExp: Boolean = true		// Boolean
var introduceStr: String = "블로그에 오신 여러분 환영합니다."		// String

 

Kotlin은 Int 또는 Long과 같은 선언을 하지 않아도 타입 추론이 가능하다.

// 타입 추론 : 변수나 함수들을 선언 할 때나 연산이 이루어질때 자료형을 코드에 명시하지 않아도 코틀린이 자료형을 설정해준다.
var stringValue = "안녕하세요"

 

2. 명시적 형변환

 

Java에서 toString(), Interger.parInt(..)와 같은 형변환은 Kotlin은 다음과 같은 메소드로 변환이 가능하다.

toByte()		// byte 형변환
toShort()		// short 형변환
toInt()			// int 형변환
toLong()		// Long 형변환
toFloat()		// Float 형변환
toDouble()		// Double 형변환

 

3. 배열

 

Java에서의 배열 선언은 다음과 같이 할 수 있었다.

 

Java : 

int[] intArray = new int[3];		// size가 3인 int Array
String[] stringArray = new String[1231];		// size가 1231인 String Array

 

kotlin에서는 다음과 같이 배열 선언을 할 수 있으며 배열 Index에 대입하는 것은 자바와 같다.

 

 

Kotlin : 

// 배열
var intArr = arrayOf(1, 3, 4, 5)		// 배열 선언
var nullArry = arrayOfNulls<Int>(5)		// 배열 할당 (size : 5, 배열 내부 값은 null)

intArr[2] = 8		// 배열 Index 설정
println(intArr[2])		// 8 출력

 

4. 함수

 

Int형 파라미터가 세개인 값을 받아 합을 반환하는 메서드 구현을 하고자 한다.

Java에서는 다음과 같이 나타 낼 수 있다.

 

Java : 

public int add(int a, int b, int c) {
	return a + b + c;
}

 

같은 결과를 나타내는 함수를 Kotlin은 다음과 같이 2가지 방법으로 나타 낼 수 있다. 

addfun 함수로 보면 Kotlin에서는 함수 자체를 변수 계산식이라고 생각하는 것을 볼 수 있다.

 

Kotlin : 

// 함수 선언 매개변수 a,b,c  | Return Int, Int 선언 없으면 void return
fun add(a: Int, b: Int, c: Int): Int {
    return a + b + c
}

// 단일 표현식 함수 : single Expression Funciton 마치 변수에 결과값을 할당하는 식으로 만들 수 있다.
// 반환형의 타입추론이 가능하므로 반환형을 생략할 수 있다.
fun addfun(a: Int, b: Int, c: Int) = a + b + c

 

5. 조건문 (IF, Switch(When))

- IF :

조건문 중 IF는 Java의 문법과 동일하다.

if (num > 10) {
    println("num은 10보다 크다.")
} else {
    println("num은 10보다 작다.")
}

 

 

- Switch(When)

자바에서 제공하는 Switch문을 Kotlin에서는 When으로 표현한다.

같은 기능을 하고 있는 Java의 Switch 와 Kotlin의 When을 비교해보자.

 

Java : 

// when : java로 생각하면 switch문과 같다.

public static <T> void dowhen(T t) {

    switch(t.getClass().getName()) {
        case "java.lang.Integer" : {
            if ((Integer) t == 1) System.out.println("점수 1입니다.");
            break;
        }
        case "java.lang.String": {
            if("erjuer".equals((String) t)) {
                System.out.println("코틀린 간단히 연습하기");
            }
            break;
        }
        case "java.lang.Long" : {
            System.out.println("Long 타입 입니다.");
            break;
        }
        default : System.out.println("어떠한 조건도 만족하지 않습니다.");

    }
}

 

추가로 !is 값을 통해 해당 조건의 boolean값을 판별하여 로직을 실행 시킬 수도 있다.

 

Kotlin : 

// Any : 어떤 자료형이든 상관없이 호환되는 코틀린의 최상위 자료형
// when : java로 생각하면 switch문과 같다.
fun dowhen(a: Any) {
    when (a) {
        1 -> println("점수 1입니다.")
        "erjuer" -> println("코틀린 간단히 연습하기")
        is Long -> println("Long 타입 입니다.")              // is : long 여부 판단
        !is String -> println("String 타입이 아닙니다.")     // !is : String 여부 판단 (not)
        else -> println("어떤한 조건도 만족하지 않습니다.")  // Java (default)
    }
}

 

또한 해당 값을 추출 할 수도 있다. Java에서는 전역변수나 지역변수를 통해서 그 값을 받아 올 수 있었지만 

Kotlin에서는 var 변수에 직접 결과값을 할당 할 수 있다.

fun dowhenResult(a: Any) {
    val result = when (a) {
        1 -> "점수 1입니다."
        "erjuer" -> "코틀린 간단히 연습하기"
        is Long -> "Long 타입 입니다."              // is : long 여부 판단
        !is String -> "String 타입이 아닙니다."     // !is : String 여부 판단 (not
        else -> "어떤한 조건도 만족하지 않습니다."  // Java (default
    }

    println(result)

}

 

6. 반복문 (While, For)

 

- While :

반복문 While은 자바의 While과 동일하게 작성한다.

fun whilefun() {
    var a = 5
    while (a > 10) {
        println(a++)
    }

    do {
        println(a++)
    } while (a > 10)
}

 

- For:

For문은 Java와 상이하게 나타난다. step을 '..' 로 나타낸다. 또한 step 설정을 통해 조건을 바꿀 수도 있다.

같은 기능을 하고 있는 Java의 For 와 Kotlin의 For을 비교해보자.

 

Java : 

// 범위형 반복분 (for 문) a = 0
public void forFun(int a) {
    for (int i = a; i < 9; i+3) { // 0부터 9까지(..), step 3은 3씩 증가
        print(i)
    }
}

 

또한 Kotlin에서는 char 형을 반복문 형태로 나타 낼 수 있다.

 

Kotiln :

// 범위형 반복분 (for 문) a = 0
fun forFun(a: Any) {
    for (i in 0..9 step 3) {  // 0부터 9까지(..), step 3은 3씩 증가
        print(i)
        // 0 3 6 
    }

    for (i in 'a'..'e') {
        print(i)
        // a b c d 
    }
}

 

7. 흐름 제어 (break, continue)

 i 값이 1 , j값이 2일 경우 break 되는 기능을 구현하였다.

 

Java에서 이중 for문을 완벽히 빠져나오기 위해서는 for문안에서 continue와 break문을 선언으로 다소 복잡하게 구현할 수 밖에 없는데

Kotlin에서는 레이블이 달린 지점에서 즉시 break하여 이중 for문을 빠져나오수 있다.

 

break나 continue가 적용되는 반복문을 레이블을 통해 지정할 수 있다.

erjuer@과 @erjuer은 해당 레이블이 달린 기준으로 즉시 break를 걸어 준다.

 

 Java :

public static void breakFun(){

    for(int i = 0; i < 10; i++ ){
        boolean breakflag =  false;
        if(i == 0) continue;
        for(int j = 0; j < 10; j++) {
            if( j == 0) continue;
            if(i == 1 && j == 2) {
                breakflag = true;
                break;
            }
            System.out.println("i : " + i + " j : " + j);

        }

        if(breakflag) break;
    }
}

 

Kotlin :

fun breakFun() {
    erjuer@ for (i in 1..10) {
        for (j in 1..10) {
            // i가 1이고 j가 2일 때 반복문 종료
            if (i == 1 && j == 2) break@erjuer 
            // kotlin 표현식, 레이블 이름과 @기호
            // 레이블이 달린 반복문을 기준으로 즉시 break, 레이블 이름은 임의로 표기 가능
            println("i : $i, j : $j")     // ""에 변수 출력을 위한 표현식: $
        }
    }
}

i가 1, j가 1

8. Class, Method

 

Java :

class Person {

  private String name;
  private Integer birthYear;

  public Person() {
    System.out.println("init 생성자 생성");
  }

  public Person(String name) {

    this.name = name;
    this.birthYear = 1993;
    System.out.printf("보조생성자 - 안녕하세요 %d년생 %s입니다", name, birthYear);

  }

  public void introduce() {
    System.out.printf("보조생성자 - 안녕하세요 %d년생 %s입니다", name, birthYear);
  }

}

 

Kotiln에서는 기본생성자를 init 으로 선언한다. constructor 는 보조 생성자로 기본생성자 this(name, 1993) 를 통해 속성을 초기화 해야한다.

 

 

Kotlin :

 

class Person(var name: String, val birthYear: Int) {

    init {
        println("init 생성자 생성")
    }

    // 보조 생성자, 반드시 기본생성자를 통해 속성을 초기화 해야한다.
    constructor(name: String) : this(name, 1993) {
        println("보조 생성자 - 안녕하세요 ${birthYear}년생 ${name}입니다.")
    }

    fun introdcue() {
        println("Introduce - 안녕하세요 ${birthYear}년생 ${name}입니다.")
    }
}

 

// main
var ms = Person("채수빈", 1994)
println("main - 안녕하세요, ${ms.birthYear}년생 ${ms.name}입니다.")
ms.introdcue()

var er = Person("아이유")

 

연예인이다!!

console창에 확인해보면 다음과 같이 실행이 된다.

 

1. init 생성자 생성

var ms = Person("채수빈", 1994)

 

2. main - 안녕하세요, 1994년생 채수빈입니다.

- main 함수 내 실행 : println("main - 안녕하세요, ${ms.birthYear}년생 ${ms.name}입니다.")

 

3. Introduce - 안녕하세요 1994년생 채수빈입니다.

- Person 클래스 내 introduce 메서드 실행 : ms.introdcue()

 


4. init 생성자 생성
5. 보조 생성자 - 안녕하세요 1993년생 아이유입니다.

- Person 보조 생성자 생성  : var er = Person("아이유")

 

 

 

01  끝!


 

참고 자료

https://www.youtube.com/channel/UCVqKQvma-Cr-eQ4hgxETAFQ

 

테크과학! DiMo

개발자가 얘기하는 생활 속 IT기술에 대한 과학! 여러분이 몰랐던, 혹은 정확히 알지 못했던 IT 테크놀러지를 파드립니다! 좋은 영상을 위한 채널 후원, 투네이션을 통해서 해주세요! 후원링크 htt

www.youtube.com

 

 

반응형

댓글