TIL

코틀린/문법및 라이브러리

[Kotlin] Contract 로 스마트 케스팅

오늘은 함수들을 열어보다 처음 보는 예약어를 발견했습니다. contract { returns() implies value } 그렇기에 오늘은 이 예약어들을 알아볼까 합니다. Contract의 기능 fun String?.isNotNull(): Boolean = this != null fun foo(s: String?) { if (s != null) s.length if (s.isNotNull()) s?.length // No smartcast :( } 공식문서에서는 contact가 기존의 스마트케스팅을 할 때 해당 스코프를 나가게 될 경우 스마트 캐스팅이 되지 않았던 점이 있었습니다. 그래서 코틀린은 1.3 버전부터 해당기능을 지원하는 contract 함수를 이용할 수 있게 되었습니다. 이 함수의 장점은 ..

코틀린/Effective Kotlin

[Effective Kotlin] 4. 안정성 - inferred 타입으로 리턴하지 말라

책에서는 타입추론(type interference)으로 리턴하지 말라합니다. 잠시 타입추론을 설명하자면.. val name = "John" // 변수 name은 String 타입으로 추론됨 val age = 25 // 변수 age는 Int 타입으로 추론됨 fun calculateSum(a: Int, b: Int): Int { return a + b } val result = calculateSum(5, 10) // 변수 result는 Int 타입으로 추론됨 위 코드처럼 코틀린은 타입을 지정하지 않아도 위의 코드처럼 처음 초기화될 때의 값에 따라 타입추론 하여 해당 변수나 상수의 타입을 지정해 줍니다. 이러다 보니 해당값에 착가하고 다른 것을 넣게 될 경우 당연히 Type mismatch오류가 발생합니다...

코틀린/Effective Kotlin

[Effective Kotlin] 3. 안정성 - 최대한 플랫폼 타입을 사용하지 말라

코틀린은 자바를 기반으로 만들어졌기 때문에 자바로 만든 코드들은 코틀린에서도 사용할 수 있게 됩니다. 그러다 보니 그 과정에서 어노테이션으로 nullable이 지정되지 않은 타입 즉 플랫폼 타입들을 쓰게 될 경우 코틀린에서는 매번 널 관련된 검사를 해야 합니다. 그렇지 않는다면 해당 부분을 사용할 때 NPE가 발생할 수도 있는 위험을 감수해야 합니다. 그렇기 때문에 이 책에서는 이러한 nullable이 지정되지 않은 플랫폼 타입을 사용을 자제하라고 말합니다. // 자바 public class UserRepo{ public List getUsers() { //... } } 위처럼 자바의 경우 NotNull 이필수가아닙니다. 자바에는 여러 자료형이 있고 어떤 자료형에서는 null을 허용하기도 하고 막기도 합..

코틀린/문법및 라이브러리

[Kotlin] 시퀀스(Sequence) 파보기

오늘을 코틀린의 시퀀스(Sequence)를 알아볼까 합니다. 시퀀스 한국말로 해석하면 수열입니다. 수열은 수가 나열된 것을 말합니다. 코틀린에서도 이와 비슷하게 리스트처럼 수들을 가지고 있을 수 있습니다. 그렇다면 코틀린은 리스트도 있는데 왜 시퀀스를 만들었을까요. 그것은 시퀀스만의 장점이 있기 때문입니다. 시퀀스의 특징에 대한 설명에 앞서 하나의 코드를 보여주겠습니다. //1번 val list = "it is a test code".split(" ") val conversionList = list.filter { it.length > 1 }.map { "[$it]" }.take(2) println(conversionList.joinToString(" "))//[it] [is] println() //2번..

코틀린/문법및 라이브러리

[Kotlin] 콜렉션(Collection) 파보기

언어마다 필수적으로 리스트나 맵 셋 같은 자료형들을 모아놓은 자료구조들을 지원합니다. 이러한 용소들은 대부분의 언어에서 필수적입니다. 오늘은 그 많은 자료구조 중 Kotlin의 Collection을 알아볼까 합니다. 구조로는 기본적으로 mutable이 붙지 않은 List, Set, Map과 Mutable이 붙은 MutableList, MutableSet, MutableMap이 있습니다. 기본적인 이 List나 Set,Map같은 경우에는 한번 정의하게 되면 값을 추가하거나 삭제할 수 없습니다. 그렇지만 MutableCollection과 List,Set,Map을 상속받은 MutableList, MutableSet, MutableMap 같은 경우 중간에 값을 추가할 수 있습니다. val list = listO..

코틀린/Effective Kotlin

[Effective Kotlin] 1. 안전성 - 가변성을 제한하라

- 시작하며 - 만약 잘 넘어지는 아이가 뛰어놀고 있다면 가장 간단하게 넘어져 다치지 않게 만들 수 있는 방법이 무엇일까요? 저는 우선 아이를 우선 멈춰 새 울 것 같습니다. 멈춰 새운다면 돌아다니지 않으니 다치지 않을 것입니다. 코드도 이와 비슷한 점이 있습니다. 첫 Chapter인 안정성에서는 안정성이 있는 코드를 짜서 잠재적 오류를 배제하라고 합니다. 코드 또한 안전하게 만들기 위해서는 가장 간단하게 가변성을 제한한다면 예측가능한 상황으로 만들 수 있을 것입니다. - 본문 - 코틀린의 요소 중 일부는 var 또는 mutable을 사용하여 상태를 가질 수 있습니다. 이 요소가 작다면 예측가능한 패턴만 있겠지만 그 수가 많다면 생길 수 있는 패턴이 기하급수적으로 늘어날 것입니다. 패턴이 많으면 무슨 문..

Flutter/Dart

[Dart] 비동기 작업 클래스, Future

- 시작하며 - 오랜 시간이 걸리는 작업이나 외부 리소스와의 상호작용을 효율적으로 처리하는 데에는 비동기 작업이 필수적입니다. 이번 포스팅에서는 다트에서 비동기 작업을 어떻게 처리하는지, 그리고 어떤 기능들을 사용하는지 알아보도록 하겠습니다. - 본문 - 다트에서 비동기 작업을 처리하기 위해 async와 await 키워드를 사용합니다. async 키워드는 함수 선언 앞에 붙여 비동기 함수임을 나타내고, await 키워드는 비동기 작업의 완료를 기다릴 때 사용됩니다. 이를 통해 코드를 보다 직관적이고 동기적으로 작성할 수 있습니다. 다트에서 비동기 작업은 Future와 Stream을 사용하여 처리됩니다. Future는 비동기 작업의 결과를 나타내는 객체이며, await 키워드와 함께 사용하여 비동기 작업의..

Flutter/Dart

[Dart] Cascade Operator 와 Spread Operator

- 시작하며 - 다트(Dart) 프로그래밍에서는 코드를 간결하고 효율적으로 작성하기 위해 다양한 기능과 문법을 활용할 수 있습니다. 이 중에서도 캐스케이드 연산자와 스프레드 연산자는 많은 개발자들에게 유용한 도구로 인정받고 있습니다. 이번 포스팅에서는 캐스케이드 연산자와 스프레드 연산자에 대해 자세히 알아보고, 실제 코드를 통해 그 활용 방법을 살펴보겠습니다. - 본문 - 캐스케이드 연산자 (Cascade Operator) 캐스케이드( .., ?.. )를 사용하면 동일한 개체에 대해 일련의 작업을 수행할 수 있습니다. 인스턴스 멤버에 액세스 하는 것 외에도 동일한 개체에서 인스턴스 메서드를 호출할 수도 있습니다. 이렇게 하면 종종 임시 변수를 만드는 단계가 줄어들고 더 유동적인 코드를 작성할 수 있습니다..

Flutter/Dart

[Dart] Collection과 Iterable 데이터들을 다루기

-시작하며- 필자는 코틀린을 주로 사용했기 때문인지 이렇게 언어들을 배울 때 기본적인 변수생성이나 클래스 같은 여러 규칙들을 보고 나면 코틀린의 map이나 groupBy, forEach 같은 Collection과 Iterable을 다루는 데 도움을 주는 여러 함수들을 찾아보곤 합니다. 그러므로 오늘은 Dart의 고차 함수들에 대해서 알아봅시다. Collection과 Iterable을 사용하는 함수들은 여러 연속적이거나 set이나 map 같은 연속적이지 않더라도 여러 데이터 묶음들이 담긴 Collection들을 다루는 함수들입니다. 대부분의 앱이나 프로그램의 특성상 많은 종류의 데이터들을 다루게 됩니다. 이런 데이터들은 Collection에 넣어 관리를 하는데 이렇게 Collection들을 관리를 하는데 ..

Flutter/Dart

[Dart] Dart를 알아봅시다

- 시작하며 - Flutter를 사용하기에 앞서 Flutter가 사용하는 언어인 Dart에 대해서 알아봅시다. 다트(Dart)는 구글이 디자인한 멀티 플랫폼 프로그래밍 언어이다. 이는 2011년 10월 10일~12일까지 열렸던 "GOTO 콘퍼런스"에서 공개되었다. 다트는 자바스크립트를 대체가능하며 크로스 플랫폼 프로그래밍 언어를 목표로 설계되었다. 출처 : 위키피디아 이처럼 Flutter의 언어인 Dart는 구글의 안드로이드 OS와 애플사의 IOS에서의 하이브리드 앱을 재작 하기 위해서 구글에서 고안한 언어입니다. 또한 Dart는 기본적으로 C언어의 문법과 거의 같으며 Java, C#, Javascript와 같은 기능적 스트럭처를 추가한 언어로, 언급된 언어보다 간결하고 강력한 기능을 지원합니다 - 본문..

감자씨앗
'TIL' 태그의 글 목록 (4 Page)