[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 진영에서 만들어진 문화는, 결국 개발자에게 반복적인 노동을 요구하게 된다. 특히 객체의 내부 상태를 직접 노출하지 않고 캡슐화하기 위..
[동시성 제어 - 1] Java가 제공하는 Lock
·
Language/Java
1. 동시성 제어 왜 필요한 것일까?한정된 자원을 가장 효과적으로 사용해 낭비를 줄이는 경제적 효율성의 원리는 어김없이 서버에도 적용된다. 수 백, 수 천만에 이르는 사용자들의 요청을 1:1로 순차적으로 대응하는 것은 극히 비효율적이고 생산성이 떨어지기 때문에, 요청에 유연하게 대응하기 위해서는 '동시성'은 필연적으로 수반되어야 한다. 요청에 최적의 응답시간을 보장하기 위해 클라이언트 요청마다 스레드를 할당하거나 비동기 / 논블로킹 IO를 사용할 수 있는데, 이 때 공유자원(shared resource)에 대하여 서로 다른 두 스레드가 동시에 조회, 수정하는 일이 발생할 수 있다. 만약 공유 자원에 대한 접근을 제대로 제어하지 않는다면 API의 멱등성이 깨지고, 원치 않는 결과와 장애를 만들어낼 수 있기..
Rust를 시작하면서
·
Language/Rust
들어가며 회사 사내스터디를 통해서 Rust 라는 언어에 대해 알게되었고, 올해의 목표 중 하나로 Rust 언어에 대한 기본기를 익히고 가벼운 프로젝트를 만들어 보는 것을 계획하게 되었다(회고록은 이번주 주말에 마무리하는 걸로). 구체적인 새 언어를 시작하고자 하는 배경은 회고록에서 기재하는 것으로 하고 그렇다면 왜 Rust를 공부해야겠다고 다짐했는지를 적어보고자 한다. 우선 긴 말 필요없이 StackOverflow 설문조사 자료를 통해 확인할 수 있었던 것은 Rust가 7년 연속 가장 개발자들에게 사랑받는 언어라는 것이다. 7년 그것도 무려 7년이나!🤨 작년 말 드넓은 개발세계를 맛본 뒤로 굉장히 스스로를 우물 안 개구리라고 생각하게 되었고, 현실에 안주하는 삶을 살아오고 있었다는 것을 느끼게 되었었다...