본문 바로가기

전체 글256

[Android] 코루틴(Coroutine)의 개념 코루틴(coroutine) 개념앞서 코루틴을 이해하기 위한 두 번의 발악이 있었지만, 이번에는 더 원론적인 코루틴에 대해서 알아보려 한다. 코루틴의 개념이 정확하게 서야 응용도 가능하기에 이번 포스팅으로 개념을 확실하게 알아갔으면 좋겠다.인트로코루틴은 코틀린만의 것이 아니다. 이름이 비슷해서 코틀린의 것이라고 생각할 수 있지만 파이썬, C#, Go, Javascript 등 여러 언어에서 지원하고 있는 개념이다. Javascript를 사용하고 있으면서 async await를 사용하고 있다면 이미 코루틴을 사용해본 경험이 있는것이다. 아무튼 코루틴은 새로운 개념, 새로운 기술이 아니라 프로그래밍이 세상에 나온 초창기 부터 존재하던 개념이다.우리가 코틀린 코루틴을 공부해볼 가치가 있는 이유앱이든 웹이든 비동기.. 2024. 11. 8.
[Kotlin] 불변성(Immutable)과 가변성(Mutable) 불변성(Immutability)과 가변성(Mutability)불변성이란 무엇일까?본질적으로 함수형 프로그래밍은 스레드 안전(thread-safe)입니다. 그리고 함수형 프로그래밍에서는 불변성을 중요하게 생각하며, 불변성은 스레드를 안전하게 만드는 데 큰 역할을 합니다. 사전적인 정의로 불변성은 무언가가 변할 수 없다는 것을 의미합니다.(상태를 변경하지 않는 것) 따라서 불변 변수는 변경될 수 없는 변수를 말합니다.주의해야할 점은 불변성을 클래스를 생성하고 모든 변수를 읽기 전용으로 만드는 것 정도로 생각하면 안 됩니다. Clojure, Haskell, F# 등과는 달리 코틀린은 불변성이 강제되는 순수 함수형 프로그래밍 언어가 아닙니다. 코틀린은 함수평 프로그래밍과 객체지향 프로그래밍(OOP) 언어의 조화.. 2024. 11. 7.
[OOP] 정적 바인딩 vs 동적 바인딩 바인딩(binding)이란? 네이버 지식백과에서 찾아보면 바인딩은 '컴퓨터 프로그래밍에서 각종 값들이 확정되어 더 이상 변경할 수 없는 구속(bind) 상태가 되는 것' 으로 설명되어있다. 즉, 프로그래머가 ​코딩을 해서 컴파일을 하게 되면 각각의 코드가 메모리 어딘가에 저장되고, 함수를 호출하는 부분에는 그 함수가 저장된 메모리의 주소값이 저장되며 프로그래머가 값을 변경할 수 없는 상태가 된다.여기서 함수를 호출하는 부분(호출부)에 함수가 위치한 메모리 번지(정의부)로 연결시킨 것을 바인딩이라고 한다!  즉, 아래와 같이 정리해볼 수 있겠다. * 함수의 바인딩- 함수를 만들어 컴파일을 하면 각각의 코드가 메모리 어딘가에 저장된다.그리고 함수를 호출하는 부분에는 그 함수가 저장된 메모리 번지수(주소값)이.. 2024. 11. 6.
[Kotlin] 확장(Extension) 함수 1. 요약🧑‍💻: Kotlin Extension을 아시나요?👨🏻‍🦱: 네. 상속이나 디자인 패턴 없이 클래스를 간단하게 확장할 수 있는 방법입니다.실제로 클래스 내부에 메서드나 프로퍼티가 생성되는 것은 아니며,정적 바인딩 된다는 특징이 있습니다. (정적바인딩 vs 동적바인딩)https://jtm0609.tistory.com/215 2. 확장(Extension)내가 만든 클래스에 새로운 기능을 추가하고 싶을 때 어떻게 해야 할까??클래스 안에 새로운 메서드를 구현하거나 아니면 상속을 받아서 사용하는 등 여러 방법이 있을 것입니다. 그렇다면 남이 만든 클래스에 새로운 기능을 추가하고 싶으면 어떻게 해야 할까요??예를 들어 외부 라이브러리의 경우 메서드를 추가하는 것은 매우 까다롭고 어렵습니다.또, .. 2024. 11. 6.
[Kotlin] 코틀린에서의 Null 처리 방법 Nullability적어도 자바 개발자라면, NullPointerException로 고통받아 null에 대한 부정적인 시선이 있을 수도 있습니다.코틀린 개발자의 입장으로는 null과 type에 대해 다시 한 번 생각해볼 필요가 있습니다. 자바에서는 의도치 않은 null 값을 고려하여 코드를 작성해야 했다면,코틀린에서는 의도적으로 사용할 null 값만 고려하면 됩니다. 코틀린은 의도치 않은 null, 정확히는 NullPointerException 을 위해 타입 체크를 컴파일 시점으로 옮깁니다.컴파일러가 컴파일 시 오류를 미리 감지해서,실행 시점에 발생 할 수 있는 예외의 가능성을 줄일 수 있습니다. 즉, 코틀린은 널이 될 수 있는 타입을 지원해 NullPointerException 오류를 컴파일 시점에 감.. 2024. 11. 5.
[Kotlin] 컬렉션(Collection) 함수 컬렉션(Collection) 함수컬렉션의 요소들을 순회할 때 for 문을 쓰면 편리하지만, 함수형 프로그래밍을 지향하는 코틀린은 컬렉션을 다룰 때 필요한 여러 가지 유용한 함수들을 지원한다. 컬렉션 함수는 list나 set, map, 또는 배열 (array) 에 일반 함수 또는 람다 함수 형태를 사용하여 for 문 없이도 아이템을 순회하며 참조하거나 조건을 걸고, 구조의 변경까지 가능한 여러 함수를 지칭한다. forEach아래 예시와 같이 사용하며, it이라는 키워드로 각각의 요소에 대응하여 안에 들어있는 함수를 실행한다. forEachIndexed() 라는 고차함수 역시 제공하는데, 이는 각 요소들의 값 뿐만 아니라 인덱스도 함께 사용할 수 있도록 해주는 녀석이다. 예시fun main() { va.. 2024. 11. 4.