일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 개인블로그 hugo
- https 서버 구현
- Convariance
- 돌연변이 테스팅
- 코틀린 out
- https 실습
- standard input
- standard output
- 자바
- JPA
- https implement
- Mutation testing
- ruby
- InnoDB
- output stream
- resize image with go
- cli 만들기
- IntelliJ
- 코틀린
- https go
- Pitest
- 공짜블로그
- 코틀린 in
- kotlin
- Java
- Test
- resizer 구현
- MySQL
- 객체지향
- image resizer with go
- Today
- Total
목록Kotlin (48)
Rlog
Generic 코틀린에서 Generic 은 왜 있을까요? 왜 무공변, 공변, 반공변 등의 개념이 필요할까요? 이러한 질문을 코틀린을 공부하는 사람이나 저 역시도 코틀린을 공부했을때 많이 들어왔습니다. 그래서 오늘은 코틀린 'Generic' 에 관해 파헤쳐보도록 하겠습니다. Generic 에 대해 우리가 반드시 알아야 하는 몇가지 컨셉이 있습니다. 일단 우리가 들어가기전에 반드시 알아야 하는 개념들이 있는데요. Derived Type 입니다. Derived Type Derived Type 은 많은 의미가 있지만 여기서는 부모클래스 부터 속성들을 상속받는 클래스라고 이야기 하겠습니다. open class OriginalClass( val name: String, val age: Int, ) { open fu..
What is Kotlin Notebook? Kotlin Notebook 은 Intellij 에서 Jupyter Notebook 의 Python 과 비슷한 형태로 코틀린을 쉽게 실행시킬 수 있도록 만든 것인데요. 조금 더 간편하고 쉽게 코틀린을 실행시켜야 하는 상황에서 사용하기 좋을거 같습니다. 생성하는 방법 1. Python 설치 일단 코틀린 Notebook 플러그인 을 실행시키기 위해서는 위와 같이 Python 을 요구하게 됩니다. 따라서 Python 을 Settings - Plugin 에 검색하여 다운받아 주도록 합시다. (이미 다운 받으셨다면 별도로 다운로드 하지 않으셔도 좋습니다.) 2. 코틀린 노트북(Kotlin Notebook) 설치 이제 위와 같이 코틀린 노트북 또한 Plugins 에서 검..
동기식 프로그래밍 초기 컴퓨터의 문제 초기 컴퓨터는 하나의 프로그램만을 실행시키는 역할을 했다. 그래서 초기 시분할 시스템에서는 각 프로세스가 가상적인 폰 노이만 컴퓨터 였다. 폰 노이만 컴퓨터 답게 각각 명령어와 데이터를 저장하는 메모리 공간을 가지고 기계어로 된 명령어를 순차적으로 수행하며, 운영체제가 제공하는 I/O 수단을 통해 외부와 교류했다. 위와 같은 이유로 초기 컴퓨터의 문제점은 다양했다. 하나의 문제를 뽑자면, 외부 입출력과 같은 작업이 지속되면 프로그램이 블락(Block)되어 시간적으로 비효율적일 수 밖에 없었다. 스레드의 등장 위와 같은 문제점을 해결하기 위한 방법론 중 하나로 스레드 가 등장하게 되었다. 스레드는 PC(프로그램 카운터), 스택, 지역 변수등을 가지고, 공유해야 할 변수..
Kotlin Sequence Kotlin 에는 Collection 과 함께 Sequence 라는 스펙이 존재한다. 공식문서에 따르면 Collection 처럼 Element 를 저장하는 방식이 아니고, Iterator 에 가깝다. 정확히는 순회하면서 Element 를 생산(Produce) 한다. Lazily Evaluation Sequence 의 가장 큰 장점은 지연 평가가 가능하다는 것이다. 즉, 우리가 Collection 을 사용하여 map, filter, ... 와 같은 연산을 수행하게 될 경우 그 즉시 값을 계산하게 된다. 예를 들면 listOf(1,2,3,4,5).map {it * 2} 와 같이 될 경우 5개 Element 를 그 즉시 계산하게 된다는 것이다. 당연하게도 위와 같이 즉시 연산이 필..
Dispatcher Dispatcher 는 코루틴에서 중요한 기능적 역할을 한다. 코루틴의 Task 가 어떤 Thread 에서 실행할지 결정하는 역할을 해준다. 앞서 봤듯이, 코틀린에서 우리가 코루틴을 이용하여 코드를 작성하면, 아래와 같이 분기가 쳐지는 것을 확인할 수 있다. fun originalFunction(continuation: Continuation): Any { continuation as OriginalFunctionContination if (continuation.label == 0) { continuation.thisLocalVariable = 10 continuation.thisLocalVariable2 = "Local Value" println("Start!!") continua..
Coroutine Scope 코루틴에서 영역(Scope) 는 코루틴 컨텍스트와 코루틴의 생명주기(LifeCycle) 을 관리하기 위해 사용된다. 따라서 코루틴은, 앞서 배웠던 구조화된 동시성(Structured Concurrency) 를 위해서, 자신만의 Job 을 보유하게 된다. GlobalScope 를 왠만해서 사용하지 말라고 하는 이유 또한, 코루틴의 시작과 종료를 관리하기 어려운 상태로 빠져들 수 있으므로 Memory Leak 현상을 초래할 수 있게 된다. coroutineScope 함수 coroutineScope(block) 함수는 새롭게 코루틴을 만드는 역할을 한다. coroutineScope 의 특이한 특성은 새로운 코루틴이 끝나기전까지, 이전 코루틴을 일시중단시키게 된다. 예를 들기 위한 ..
Kotlin 을 사용하다 보면 유용한 확장함수들을 많이 만들어서 사용하게 되는데요. 이 확장함수를 사용하다 보면 "스마트 캐스트" 와의 문제에 부딪히고는 합니다. 한번 코드를 통해 Smart Cast 를 알아보도록 합시다. Smartcast 위에서 설명한 예시를 코드로 보여주자면, 아래와 같은 상황인데요. 분명 isNotNull 이라는 제가만든 커스텀 확장함수로 NullCheck 를 함에도 불구하고 아래와 같이 `?(safe-null)` 을 써야만 하는 상황입니다. 이 상황은 왜 발생할까요? Kotlin 의 SmartCast 는 쉽게 얘기해서 컴파일러(Compiler) 가 Programmer 대신에 Casting 을 Smart 해주게 하는 기능을 뜻합니다. 즉, 위 코드가 SmartCasting 이 안되..
Kotlin JSR-303 Issue Kotlin Spring 을 통해 개발하다보면 생각보다 Spring 에서 Kotlin 스럽게 사용하기 위해 몇가지 Custom 을 해줘야 하는 상황들이 생깁니다. 아래와 같이 Kotlin Coroutines 는 Spring 5.3 부터 지원되는 Spec 으로 Controller 에서 suspend method 를 이용하는것을 가능하게 해줍니다. suspend modifier 와 hibernate validation Issue 따라서 기존의 Validation 들을 그대로 내비둔채 suspend modifier 를 붙여주게 되면 실제로 테스트 해볼때 아래와 같은 에러를 마주하게 됩니다. 이유는 hibernate-validation 이 Coroutines 를 Suppor..