전체 글 썸네일형 리스트형 [코틀린] 상속(Inheritance) 안드로이드 개발하는 kancho입니다. 이번 포스팅에서는 코틀린의 상속(Inheritance)에 대해 알아보고자 합니다. '코틀린 완벽 가이드' 책을 참고하였습니다. 상속 is-a 관계를 표현하기 위한 개념이다. 상위 클래스로부터 하위 클래스가 무엇인가를 물려받는 것이라고 생각할 수 있다. subclass는 superclass에 정의된 멤버와 확장을 얻게 된다. 코틀린 클래스는 단일 상속만 가능하다. 즉 클래스의 상위 클래스가 최대 하나라는 것이다. 상위 클래스를 명시하지 않으면 자동으로 Any를 상속하는 것으로 가정한다. 모든 클래스는 class hierarchy (클래스 계층)을 구성한다. 상속은 콜론(:)으로 표시한다. /* * open 변경자 : 상속 가능한 것을 의미. 해당 클래스를 상위 클래스.. 더보기 [코틀린] Inline 클래스 안드로이드 개발하는 kancho입니다. 이번 포스팅에서는 코틀린의 Inline(인라인) 클래스에 대해 알아보고자 합니다. '코틀린 완벽 가이드' 책을 참고하였습니다. 코드를 작성하다 보면 Wrapper(래퍼) 클래스를 만드는 일이 생길 수 있다. Wrapper 클래스는 런타임 부가 비용이 발생한다. 코틀린에서는 이러한 부가 비용을 줄이기 위해 Inline 클래스를 사용할 수 있다. Inline 클래스(값 클래스) 원시 타입의 값과 마찬가지로 부가 비용 없이 쓸 수 있기 때문에 value class(값 클래스)라고도 한다. 클래스 이름 앞에 value class를 붙여서 정의한다. 코틀린 1.3에서는 inline 키워드를 사용했지만 자바에 값 클래스가 생겨 코틀린 1.5에서 value로 키워드가 변경되었다.. 더보기 [코틀린] Data 클래스 안드로이드 개발하는 kancho입니다. 이번 포스팅에서는 코틀린의 Data 클래스에 대해 알아보고자 합니다. '코틀린 완벽 가이드' 책을 참고하였습니다. Data 클래스 주로 데이터를 저장하기 위한 목적으로 사용되며 equals 메서드(동등성 비교), toString 메서드 등의 구현을 자동으로 생성해준다. 구조 분해 선언 (destructuring declaration)을 활용할 수도 있다. 이는 클래스의 프로퍼티를 간단한 한 가지 언어 구성 요소를 사용해 여러 변수에 나눠 넣을 수 있다. 아래 User 클래스를 보면 user1, user2, user3 인스턴스들의 동등성 비교를 하고 있다. user1과 user2는 메모리에서 다른 위치(다른 객체)를 가리키고 있기에 동등하지 않다. user1과 use.. 더보기 [코틀린] Enum 클래스 안드로이드 개발하는 kancho입니다. 이번 포스팅에서는 코틀린의 Enum 클래스에 대해 알아보고자 합니다. '코틀린 완벽 가이드' 책을 참고하였습니다. Enum 클래스 미리 정의된 상수들로 이뤄진 제한된 집합을 표현하는 클래스 기본적인 구조는 아래와 같다. enum class 클래스명 { // 상수 // 멤버 변수, 멤버 함수 } enum 클래스를 코드로 알아보자. 아래는 요일을 나타내는 WeekDay enum 클래스이다. WeekDay의 확장 함수인 isWorkDay()는 일하는 요일을 판별하는 함수이다. enum 클래스는 정수, 문자열 등과 비교 시 어떤 값이 가능한 범위 안에 있는지 검사할 필요가 없고 정의한 상수들의 집합을 type-safe 하게 다룰 수 있다. /* 요일을 enum 클래스 안에.. 더보기 [코틀린] 람다와 고차함수 안드로이드 개발하는 kancho입니다. 이번 포스팅에서는 코틀린의 람다(lambda)와 고차 함수(high order function)에 대해 알아보고자 합니다. '코틀린 완벽 가이드' 책을 참고하였습니다. 람다와 고차 함수에 대해 알아보기 전에 먼저 함수형 프로그래밍에 대해 짧게 알아보자. 함수형 프로그래밍은 프로그래밍의 패러다임 중 하나이다. 불변 값을 변환하는 함수의 합성으로 구성할 수 있다는 아이디어를 바탕으로 한다. 즉, 자료처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 패러다임이다. 함수형 프로그래밍에서는 우리가 흔히 말하는 함수를 일급 시민(first class)으로 취급한다. 변수에 값을 set, get 할 수 있고 함수에 값을 전달하거나 함수가 값을 반환할 수 있다.. 더보기 [코틀린] Scope function (영역 함수) 안드로이드 개발하는 kancho입니다. 이번 포스팅에서는 코틀린의 영역 함수(Scope function)에 대해 알아보고자 합니다. '코틀린 완벽 가이드' 책을 참고하였습니다. 코틀린의 표준 라이브러리에는 식을 계산한 값을 임시로 문맥 내부에서 사용할 수 있도록 해주는 함수들이 있다. Scope function(영역 함수) 어떠한 식의 결과값이 들어있는 암시적인 영역을 정의해 코드 작성을 보다 단순하게 만드는 함수이다. 기본적으로 영역 함수는 람다를 간단하게 실행해주는 역할을 한다. 5가지 표준 영역 함수 run, let, with, apply, also run run 함수는 확장 람다를 받는 확장 함수이며 람다의 결과를 돌려준다. 지역 변수의 가시성을 세밀하게 제어할 수 있다. 구조 run 함수의 정의.. 더보기 [코틀린] 확장 (Extension) 안드로이드 개발하는 kancho입니다. 이번 포스팅에서는 코틀린의 확장 기능에 대해 알아보고자 합니다. '코틀린 완벽 가이드' 책을 참고하였습니다. 확장 (Extension) 확장은 말 그대로 기존의 것을 더 넓고 크게 사용한다는 것이다. 코드를 작성하다 보면 기존의 클래스를 확장시켜야 하는 경우가 생긴다. 내가 직접 만든 클래스에서는 쉽게 함수를 추가하거나 커스텀하게 원하는 동작을 추가할 수 있다. 하지만 자바나 코틀린에서 기본적으로 제공되는 라이브러리나 외부 라이브러리 같은 경우에는 이미 정의된 것 외에는 동작을 추가하기가 어렵다. 그래서 코틀린에서는 클래스 밖에서 함수나 프로퍼티를 선언할 수 있도록 확장이라는 기능을 제공한다. 확장을 사용하면 기존 클래스를 변경하지 않고 확장할 수 있어 OCP(개방.. 더보기 [코틀린] Lazy 초기화 안드로이드 개발하는 kancho입니다. 이번 포스팅에서는 코틀린의 Lazy 지연 초기화에 대해 알아보고자 합니다. lazy 초기화는 안드로이드 개발에 있어 중요한 개념이며 자주 사용하기도 합니다. User 클래스를 아래와 같이 정의해보자. 생성자 파라미터와 email 프로퍼티는 User 인스턴스 생성 시 메모리에 올라가게 된다. 이후 변수에 저장된 값을 빠르게 불러올 수 있게 된다. 아래 코드에서 User 인스턴스를 만들고 getFullName, getUserInfo 함수를 호출하면 순서대로 println()을 호출하게 된다. /* firstName, lastName -> 생성자 프로퍼티 email -> 프로퍼티 getFullName() -> User의 전체 이름 getUserInfo() -> User의.. 더보기 이전 1 2 3 4 5 6 다음