1. 변수 선언 : var , val
- var : 선언 후 수정 가능
- val: 선언 후 수정 불가능 (Java에서 final과 같은 역할을 한다.)
또한 변수타입을 지정 할 수 있다.
// 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") // ""에 변수 출력을 위한 표현식: $
}
}
}
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
'개발 지식 > Kotlin' 카테고리의 다른 글
[Coroutine] Coroutine Basic (0) | 2022.08.23 |
---|---|
[Kotlin] Kotlin 기초 - 05 (문자열) (0) | 2022.08.21 |
[Kotlin] Kotlin 기초 - 04 (스코프 함수) (0) | 2022.07.17 |
[Kotlin] Kotlin 기초 - 03 (스코프 /고차 람다 함수) (0) | 2022.05.16 |
[Kotlin] Kotlin 기초 - 02 (클래스/인터페이스) (0) | 2022.04.27 |
댓글