2023/08/30 4

코루틴이란 무엇인가? (루틴과 코루틴)

이번 시간에는 ‘코루틴’을 간단히 사용해 보면서 코루틴이 무엇인지~ 감을 잡아보도록 하자 도대체 코루틴이란 무엇일까? 코루틴을 영어로 살펴보면 co-routine 으로 여기서 접미어 co 는 ‘협력하는’ 이라는 의미가 있다. 뒤에 있는 routine 은 컴퓨터 공학에서 이야기하는 루틴으로 간단히 ‘함수’라고 생각해도 좋다. 그렇다면 co-routine 은 협력하는 루틴, 협력하는 함수라는 의미이다. 잠깐, 우리가 생각하는 그냥 루틴(함수)도 서로 호출과 반환을 주고받으며 협력을 한다. 그런데 협력하는 루틴이라니 도대체 그냥 루틴과 협력하는 루틴은 어떤 차이가 있길래 ‘협력하는’ 이라는 의미가 있을까? 다음 코드를 살펴보자. fun main() { println("START") newRoutine() pr..

코틀린 제네릭 - 배열과 리스트, 제네릭과 무공변

지난 시간의 문제를 정리해 보면, 우리는 금붕어 Cage에서 금붕어를 꺼내 물고기 Cage에 옮길 수 없었다. 하지만 사실은, 그냥 금붕어를 물고기 Cage에 넣는 것은 아무 문제가 없다. val cage = Cage2() cage.put(GoldFish("금붕어")) 물고기 Cage에 금붕어가 들어가는 것은 문제가 아니라는 의미이다. 그렇다면 도대체 왜 이런 차이가 발생하는 것일까??! 근본적인 이유를 알기 위해 우리는 상속관계의 의미를 살펴보아야 한다. 여기 상속 관계인 두 클래스가 있다. Number와 Int라고 해보자. Number는 Int의 상위 타입이고 Int는 Number의 하위 타입이다. 이때 다음과 같은 코드는 정상 동작할 수 있다. fun doSomething(num: Number) {..

코틀린 제네릭 - 제네릭과 타입 파라미터

제네릭은 추상화를 하는데 있어 굉장히 필수적인 기능이고, 정말 잘 활용되는 언어적 특징이다. 제네릭을 이해하기 위해 Cage 클래스를 만들어 보자. Cage 에는 여러 동물을 넣거나 꺼낼 수 있다. 가장 간단한 Cage 클래스는 다음과 같다. class Cage { private val animals: MutableList = mutableListOf() fun getFirst(): Animal { return animals.first() } fun put(animal: Animal) { this.animals.add(animal) } fun moveFrom(cage: Cage) { this.animals.addAll(cage.animals) } } 당연히 Animal 클래스도 필요하니 간단하게 다음과 ..

[css] 넘쳐 흐르는 텍스트 처리 주요 속성 정리

overflow 자식이 부모의 범위를 벗어날 경우 어떻게 할 것인지 제어하는 css overlfow: visible | hidden | scroll | auto visible : 그냥 그대로 둔다. 넘치면 넘치는 대로 존재한다. hidden : 넘친 부분은 보이지 않는다. scroll : 스크롤이 생긴다. (가로 / 세로 모두 생긴다.) auto : 넘친 경우, 자동으로 스크롤이 생긴다. text-overflow 넘치는 텍스트 표기를 제어하는 css text-overflow: clip | ellipsis; text-overflow 속성은 overflow 속성이 hidden / scroll / auto 이면서 white-space: nowrap일 경우만 적용된다. clip : 넘치는 텍스트를 자른다. el..