본문 바로가기

분류 전체보기254

[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.
[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.