본문 바로가기
Kotlin

Kotlin 문법 벼락치기⚡️

by 아리❣️ 2024. 1. 7.

생애 첫 회사생활을 보내며 허우적거리던 지난 자프링 개발자 세월..

어느날 갑자기 코프링을 하게됐다!

살아생전 코틀린의 ㅋ도 써본 적이 없는데!!

기본개념이고 뭐고 당장 만들 수 있을 만큼만 알아보자!

변수 선언하기

파라미터 이름 뒤에 타입을 쓴다.
  • 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)
      }
  • 값 꺼내기
    자바와 달리 .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 이다.")
      }