[Kotlin] 인라인 함수(inline function)
·
Language/Kotlin
1. 시작'성능 최적화'라는 말은 개발자에게 언제나 매력적이면서도 조심스러운 단어다. 특히 코틀린에서 고차 함수(Higher-order function)를 자유자재로 사용하다 보면, 우리가 작성한 간결한 람다식이 내부적으로는 어떻게 돌아가는지에 대해서는 크게 고민을 하지 않고 사용하곤 한다. 하지만 람다의 구현 방식을 고려하면 약간의 비용이 발생 한다는 것을 알 수 있는데, 오늘은 이 람다의 유연함은 유지하면서 실행 시점의 오버헤드를 줄여주는 인라인 함수(Inline function)에 대해 알아본다. 2. 인라인 함수(inline function)2.1 람다에서 무슨 비용이?함수형 프로그래밍은 기본적으로 '함수를 객체처럼 사용한다'에 뿌리를 두고 있다. 다시 말해, 코드 가독성을 획기적으로 높여주는 ..
[Kotlin] 봉인된 클래스(Sealed Class)와 봉인에 대하여
·
Language/Kotlin
1. 시작모두가 잘 알고 사용하고 있는 클래스와 상속을 이용한 다형성은 Open-Closed Principal의 기본이자 단순한 구현에서 벗어나 각 클래스들에 명확하고 분명한 책임을 부여하는데 이점이 있다. 하지만 높은 확장성은 인터페이스나 추상 클래스를 사용해 결과로 받은 객체가 내가 정의한 서브타입임을 보장할 수 없음을 의미하기도 하다. 이러한 구조를 '제한 없는 계층구조(non-restricted hierarchy)'라고 하며, 아래와 같이 작성할 경우 else 구문이 강제된다.abstract class Resultclass Success(val data: String) : Result()class Failure(val exception: Throwable) : Result()// 'when' ex..
[Kotlin] 다양한 형태의 객체(object, companion, data, constant)
·
Language/Kotlin
1. 시작'클래스의 인스턴스(instance)'라는 간단명료한 정의에서 시작하여, '상태를 가지고 행동을 수행하며, 책임을 지고 다른 객체와 협력하는 프로그램의 구성 단위'라는 보다 능동적인 정의까지. 개발자들에게 객체에 대한 개념은 이제는 조금 친숙해지기도 했지만 여전히 그 개념을 충분히 이해하고 살려서 프로그래밍하는데는 어려움을 겪고 있다고 생각한다. 클래스와 객체를 '설계도-실체'의 관점으로 바라봤을 때, 객체를 생성할 수 있는 가장 간단한 방법은 다음과 같다.class DaFaNew// Hi~ 데페뉴~val a = DaFaNew() 하지만 다양하고 복잡한 현실과 마찬가지로, 객체 역시 다양한 목적과 용도로 만들어질 필요성을 갖고 있으며 오늘은 이를 지원하는 몇 가지 수단들을 알아본다. 2. 누구냐..
[Kotlin] 데이터 묶음을 표현하는 Data Class
·
Language/Kotlin
1. 시작클래스 명칭에서 드러나듯이 '데이터 자체'를 표현하기 위해 만들어진, 그리고 그렇게 사용하는 Data class에 대해서 알아본다. 2. 누구냐 넌클래스 명 앞에 data 제어자를 사용해 정의하는 코틀린의 Class 중 하나로, 코틀린의 철학 중 하나인 실용성(Pragmatic)이 강하게 반영된 결과물 중 하나다. 다시 말하면, 어떤 점에서 실용성을 만족시키고 있는가를 이해하는 것이 'data class'를 이해하는 가장 중요한 키라고 생각한다. 대규모 시스템의 안정적인 운영과 용이한 유지보수를 위해 활성화된 ‘객체지향’이라는 하나의 규약을 지켜내기 위해 Java 진영에서 만들어진 문화는, 결국 개발자에게 반복적인 노동을 요구하게 된다. 특히 객체의 내부 상태를 직접 노출하지 않고 캡슐화하기 위..