일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Gateway
- spirng
- 톰캣
- Spring Batch
- oauth
- 우테코 5기
- 테스트코드
- 트랜잭션
- Thread
- 최종 합격
- 우아한 테크 코스
- AOP
- 우테코
- Transactio
- redis
- Elk
- Spring cloud gateway
- 동시성문제
- 오어스
- Kotlin
- HikariCP
- tomcat
- resilience4j
- JWT
- MDC
- 우아한테크코스
- 커넥션 풀
- 살아남았다.
- DispatcherServlet
- circuitbreaker
- Today
- Total
코딩은 내일부터
자동차게임으로 알아보는 Kotlin 본문
Kotlin을 배우기 위해 다음 미션을 포크하고 자동차 게임을 구현해 보았습니다.
https://github.com/ingpyo/kotlin-racingcar
Kotlin이 뭐예요?
Kotlin은 JetBrains에서 개발한 언어이다.
당시 java가 불편한 점이 많고 업데이트 주기가 너무 느려서 JetBrains팀에서 자체적으로 개발을 하였다.
또한 Kotlin이 이렇게 관심을 받고 있는 이유 중에 하나는 멀티 플랫폼 언어라는 것이다.
위에 사진과 같이 코틀린의 코드를 짜 놓으면 JVM,Native,JS,안드로이드 이렇게 여러 환경에서 코드가 실행될 수 있다.
Kotlin이란 무엇인지 간단하게 알아봤고 이제 코틀린의 문법을 알아보겠다.
변수 선언 val, var
Kotlin을 처음 접해보고 많이 헷갈렸던 게 타입 추론이다.
java에서는 String name= "전인표";와 같이 타입을 지정해 주고 코드를 작성하는데
Kotlin에서는 타입추론을 해주는 변수인 val, var만으로 타입을 지정한다.
val는 불변 변수(상수)이고 var는 가변 변수이다.
Property
java에서 알고 있는 클래스라는 개념의 목적은, 데이터를 캡슐화하고, 캡슐화한 데이터를 다루는 코드를 한 객체로 나타내는 거다.
java에서는, 데이터를 필드에 저장하고, 멤버 필드의 접근자는 거의 비공개(private)로 선언한다.
클래스는 자신을 사용하는 클라이언트가 그 데이터에 접근하는 통로로 쓸 수 있도록, 접근자 메서드를 제공하는데,
이는 보통 데이터를 읽기 위한 getter, 데이터를 변경하게 허용하는 setter를 말한다.
자바에서는 이러한 필드와 접근자를 프로퍼티(property)라고 부른다.
코틀린은 프로퍼티를 언어 기본 기능으로 제공하며, 코틀린 프로퍼티는 자바의 필드와 접근자 메소드를 완전히 대신한다.
즉, java에서 필드로 데이터를 접근했지만 Kotlin에서는 getter와 setter로 데이터에 접근한다는 것이다.
Date class???
위에 val와 var을 설명한 사진을 보면 data class CarName이라고 정의된 걸 볼 수 있다.
그러면 date class는 뭘까?
kotlin에서는 date라는 키워드를 붙여주면 getter, setter 뿐만 아니라 생성자, equals, hashcode, toString함수까지 자동으로 만들어준다.
이 말은 즉, DTO, VO와 같은 목적의 class를 만들고 싶다면 data라는 키워드를 사용하면 된다.
init과 예외 처리
java에서 생성할 때 처리할 로직을 생성자 내부에 두었는데 Kotlin에서는 init이라는 키워드를 사용하면
인스턴스 객체를 생성할 때 원하는 작업을 중괄호 내부에 있는 코트를 실행한다.
또한 예외를 처리할 때 java에선 if문으로 검증하고 만족하지 않을 경우 throw new IllegalArgumentException()와 같은 방식으로 작성했다면, 코틀린은 require문과 같이 간편하게 작성할 수 있다.
require(조건)으로 내부에 조건문이 만족하지 못한 경우 IllegalArgumentException 발생시킨다.
하지만 IllegalArgumentException이 아닌 커스텀한 Exception을 발생시키고 싶을 때는 위에 사진처럼 require대신
매소드를 만들어 throw 시키면 된다.
Kotest??
코틀린 환경에서도 junit문법, AssertJ 문법을 사용할 수 있다.
하지만 junit, AssertJ를 사용할 경우 Mocking이나 Assertion 과정에서 코틀린 DSL을 활용할 수 없다고 한다.
그래서 이러한 테스트를 진행하기 위해서는 kotest를 사용한다고 한다.
또한 kotest는 다양한 테스트 레이아웃(String Spec, Describe Spec, Behavior Spec 등) 제공한다.
build.gradle.kts
dependencies {
testImplementation("io.kotest", "kotest-runner-junit5", "5.3.1")
}
tasks {
test {
useJUnitPlatform()
}
}
Kotest Describe Spec
Kotest는 Describe Spec을 통해 DCI(Describe, Context, It) 패턴 형태의 레이아웃을 제공한다.
Kotest Describe Spec
@Test, fun키워드를 붙이지 않아도 되고, 바로 테스트명을 String으로 지을 수 있다는 장점이 있다.
이렇게 자동차 게임 구현을 통해 Kotlin을 학습해 보았습니다!!