생애 첫 회사생활을 보내며 허우적거리던 지난 자프링 개발자 세월..
어느날 갑자기 코프링을 하게됐다!
살아생전 코틀린의 ㅋ도 써본 적이 없는데!!
기본개념이고 뭐고 당장 만들 수 있을 만큼만 알아보자!
변수 선언하기
파라미터 이름 뒤에 타입을 쓴다.
var
(variable) : 수정 가능한 타입
val
(value) : 읽기 전용 타입 ( 수정 불가능 )
?
: null 허용
var name: String? // String 자료형의 수정 가능하고, null을 허용하는 변수
val name: Int // Int 자료형의 읽기 전용, null을 허용하지 않는 변수
함수 선언하기
- ( 자바와 달리 ) 꼭 클래스 안에 함수를 넣어야 할 필요가 없다.
- 중괄호를 없애고 더 간결하게 표현할 수도 있다.
- 이때 반환 타입은 생략이 가능하다. ( 컴파일 타임에 지정됨 )
- 중괄호 O ⇒ 블록이 본문인 함수
- 중괄호 X ⇒ 식이 본문인 함수
- 함수 호출 시에 파라미터를 지정할 수 있다.
⇒ 타입은 같지만 파라미터 순서가 달라 발생하는 버그를 방지할 수 있다.
fun a() { b(parameter1 = "parameter1", parameter2 = "parameter2") } fun b(parameter1: String, parameter2: String) { }
클래스 선언하기
class A(
// 필드
val aaa: String,
var bbb: Int? // null 가능
) {
// 메서드
fun a(){
}
}
- val 로 선언된 필드는 읽기 전용이기 때문에 Getter가 자동으로 생성된다.
- var로 선언된 필드는 쓰기도 가능하기 때문에 Getter, Setter가 자동으로 생성된다.
- is로 시작하는 필드의 getter는 필드명과 동일하게 생성된다.
- Getter, Setter를 외부에 노출하고싶지 않다면 private으로 선언하면 된다.
Enum 선언하기
enum class A(
val a:Int, val b:String // 필드 정의
){
// enum 값 정의
AAA(0,"AAA"),
BBB(1,"BBB");
// 메서드 정의
fun b() = return a+b;
}
Data Class
객체 내부 필드값이 동일하면 주소값이 달라도 같은 클래스로 인식한다.
data class A(
val a: String,
val b: Int,
)
생성자
- 기본 생성자
class A(a: String){ constructor(a: String){ this.a = a } }
- 정적 팩토리 메서드
class A(a: String){ // object 키워드로 인하여 of 메소드는 static 으로 생성된다. companion object { // 선언된 프로퍼티도 static으로 선언된다 fun of(a: String): A { return A(a) } } }
if 문
java와 동일하지만, 값을 return 받을 수 있다.
- 자바의 삼항 연산자처럼 사용할 수 있다.
var result = if (조건) "True 일 때 반환값" else "Fals 일 때 반환값"
when 문
java의 swith와 비슷한 개념이다.
- 값을 반환하거나, 특정 작업을 실행시킬 수 있다.
when (target) {
1 -> print("Hello") // 1이라면 Hello 출력
in 2...10 -> print(target) // 2~10 이라면 target 출력
else -> ("Bye") // 모두 해당되지 않는다면 Bye 출력
}
for문
- 1부터 N 까지 반복하기
for( i in 1..N ) { print(i) }
- 1부터 N-1 까지 반복하기
for( i in 1 until N ) { print(i) }
- 1부터 N 까지 M 씩 증가하면서 반복하기
for (i in 1..N step M) { }
- 1부터 N 까지 M 씩 감소하면서 반복하기
for (i in 1 downTo N step(M)) { }
List
- 선언
- 불변으로 선언하기
val items = listOf(1,2,3)
- 가변으로 선언하기
var items = mutableListOf(1,2,3) var items = mutableListOf<Int>()
- 불변으로 선언하기
- 반복문
- for문 사용하기
for ( item in items ){ print(item) }
- forEach문 사용하기
items.forEach{ item -> print(item) }
- for문 사용하기
- 값 꺼내기
자바와 달리
.get(index)
를 사용하지 않아도 된다.val index = items[index]
Map
- 선언
- 불변으로 선언하기
val items = mapOf("a" to 1, "b" to 2)
- 가변으로 선언하기
var items = mutableMapOf("a" to 1, "b" to 2) var items = mutableMapOf<String, Int>()
- 불변으로 선언하기
- 반복문
- for문 사용하기
for((key,value) in items) { println("$key 이고 $value 이다.") }
- forEach문 사용하기
items.forEach{ (key,value) -> println("$key 이고 $value 이다.") }
- for문 사용하기