Kotlin13 [Kotlin] 불변성(Immutable)과 가변성(Mutable) 불변성(Immutability)과 가변성(Mutability)불변성이란 무엇일까?본질적으로 함수형 프로그래밍은 스레드 안전(thread-safe)입니다. 그리고 함수형 프로그래밍에서는 불변성을 중요하게 생각하며, 불변성은 스레드를 안전하게 만드는 데 큰 역할을 합니다. 사전적인 정의로 불변성은 무언가가 변할 수 없다는 것을 의미합니다.(상태를 변경하지 않는 것) 따라서 불변 변수는 변경될 수 없는 변수를 말합니다.주의해야할 점은 불변성을 클래스를 생성하고 모든 변수를 읽기 전용으로 만드는 것 정도로 생각하면 안 됩니다. Clojure, Haskell, F# 등과는 달리 코틀린은 불변성이 강제되는 순수 함수형 프로그래밍 언어가 아닙니다. 코틀린은 함수평 프로그래밍과 객체지향 프로그래밍(OOP) 언어의 조화.. 2024. 11. 7. [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. [Kotlin] by란? by란?특정 처리를 다른 객체에게 넘기는 것을 의미한다. 코틀린에서 by의 사용은 주로 두가지로 나누어 진다.첫번째는 프로퍼티 접근자(Property Accessors)의 구현을 다른 객체에 위임(Delegate)하는 것이다. 주로 안드로이드 개발을 하면서 흔히 사용되는 by lazy, by inject(), by mutableStateOf()등 있다. private val viewModel: SomeViewModel by lazy { ViewModelProvider(requireActivity())[SomeViewModel::class.java]} private val viewModel: SomeViewModel by viewModels() var someState by remember { mu.. 2024. 11. 2. [Kotlin] open class와 abstract class 코틀린에서의 final자바에서는 final 로 명시적으로 상속을 금지하지 않는 모든 클래스를 다른 클래스가 상속할 수 있다. 이렇게 기본적으로 상속이 가능하면 편리한 경우도 많지만 문제가 생기는 경우도 많다.취약한 기반 클래스(fragile base class)하위 클래스가 기반 클래스에 대해 가졌던 가정이 기반 클래스를 변경함으로써 깨져버린 경우에 생긴다.어떤 클래스가 자신을 상속하는 방법에 대해 정확한 규칙을 제공하지 않는다면 그 클래스의 클라이언트는 기반 클래스를 작성한 사람의 의도와 다른 방식으로 메서드를 오버라이드할 위험이 있다.모든 하위 클래스를 분석하는 것은 불가능 하므로 기반 클래스를 변경하는 경우 하위 클래스의 동작이 예키지않게 바뀔 수도 있다는 면에서 기반 클래스는 취약하다."상속을 위.. 2024. 11. 2. 이전 1 2 3 다음