Back End/Kotlin, Android

코틀린 개요

DevHam94 2023. 9. 22. 03:30

intellij를 만든 jetbrain사에서 만든 언어다. 자바에 비해서 문법이 간결해 가독성과 생산성이 높고 오류 가능성이 낮다.

자바에서 복잡하게 구현해야되는 것들을 코틀린에서는 쉽게 제공한다. 

 data class Person(
 	val name: String,
    val age: Int,
    val email: String
 ) // equals(), hashCode(), toString()등 유용한 함수를 자동 생성
 
 object MyCompany { // 싱글턴 객체
 	const val name: String = "MyCompany"
 }
 
 // 탑-레벨 함수로 클래스 외부에서 함수 작성 가능
 fun main() {
 	// `new` 키워드 없이 객체 생성
    val person = Person("이상훈", 35, "digimon1740@gmail.com")
    println(person)
 }

자바를 몰라도 학습가능하며 자바와 상호 운용이 가능해 기존 자바 프로젝트에 쉽게 적용이 가능하고 자바로 작성된 오픈소스를 그대로 사용할 수 있다.

// 자바로 작성된 스프링 부트를 코틀린에서 사용
@SpringBootApplicatoin
class MyApplication

fun main(args: Array<String>) {
	runApplication<MyApplication>(*args)
}

@RestController
class MyController {

	@GetMapping("/hello")
    fun sayHello() = "Hello"
  
}

멀티 플랫폼 언어여서 서버, IOS, Android와같은 모바일앱, 프론트(JS) 등 모든 분야에서 사용 가능

// 아래 코틀린으로 작성된 코드는 자바스크립트로 컴파일되어 브라우저에서 작동한다.
import kotlinx.browser.window

fun main() {

	fun main() {
    	val body = window.document.body
        
        body?.innerHTML = "<b>Hello, <i>Kotlin</i></b>"
        
        window.setInterval({
        	body?.innerHTML += "!
        }, 1000)
    }
}

구글 홈팀은 코틀린을 도입하고 제일 많은 비정상 종료를 일으킨 NullPointerException을 33%나 절감시켰다. 

 

코틀린은 자바처럼 체크드 익셉션을 강제하지 않는다. 하지만 원하면 try-catch를 사용할 수 있다. 

 

자바는 원시 자료형을 지원하고 객체로된 래퍼런스 타입도 지원하지만. 코틀린은 래퍼런스 타입만 지원한다. 

 

자바는 static 키워드로 정적 멤버를 선언할 수 있지만. 코틀린은 companion object로 선언한다. 

 

자바는 삼항연산자가 있지만 코틀린은 if-else 구문으로 대신한다. 

val animalSound: String = if ("호랑이" == animal) "어흥" else "야옹"

 

자바에서는 라인을 마칠때 무조건 세미콜론으로 끝내야하지만. 코틀린은 필수가 아니다.

 

- 코틀린에서는 객체의 함수나 프로퍼티를 확장해서 사용할 수 있다.

MyStringExtentions.kt

fun String.first(): Char {
	return this[0]
}

fun String.addFirst(char: Char): String {
	return char + this.substring(0)
}

fun main() {
	println("ABCD".first())	// 출력 : A
    
    println("ABCD".addFirst('Z'))	// 출력 : ZABCD
}

 

- 데이터 클래스: 데이터를 보관하거나 전달하는 목적을 가진 불편 객체로 사용한다.(eg. DTO)

기본 자바에서는 주로 Lombok을 사용했다. JDK 15에서는 record로 추가되었다.

// kotlin
data class Person(val name: String, val: age: Int)
// hashCode(), equals(), toString() 자동 생성 됨
// 이 외에도 copy(), componentN()도 유용함

// JAVA
@Data
public class Person {
	private final String name;
	private final int age;
}

// JDK 15
public record Person(String name, int age) {
}