코틀린 & Java 44

[Kotlin] 코틀린이란 무엇이며, 왜 필요한가?

코틀린이란? 자바 플랫폼에서 돌아가는 프로그래밍 언어 자바와의 상호운용성에 초점을 맞춘 실용적이고 간결하며 안전한 언어 대상 플랫폼 서버 (backend) 안드로이드 모바일 애플리케이션 등등 (iOS, 자바스크립트…) 코틀린은 정적 타입(statically typed) 지정 언어 정적 타입 지정 언어? : 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고, 필드나 메소드 사용 시 컴파일러가 타입을 검증해준다. 동적 타입 지정 언어? : 타입 관계없이 모든 값을 변수에 넣을 수 있고, 실행 시점에 필드나 메소드에 대한 검증한다. (Groovy, JRuby 등) 정적 타입 지정 언어 장점 성능 : 컴파일 시점에 메소드 호출 여부를 알고 있어서 빠르다. 신뢰성 : 컴파일러가 컴파일 시점에 프로그램의 정확..

[Kotlin] 기본 요소 함수와 변수에 대해 알아보자 (1)

코틀린에서 타입 선언을 생략해도 된다. # 코틀린 특징 코틀린 표준 라이브러리는 여러가지 표준 자바 라이브러리 함수를 간결하게 사용할 수 있게 감싼 래퍼(wrapper)를 제공 줄 끝에 세미콜론(;)을 붙이지 않아도 된다. if는(값을 만들어내지 못하는 문장이 아니고 결과를 만드는 식) 문(statement)과 식(expression) 식은 값을 만들어 내며 다른 식의 하위 요소로 계산에 참여할 수 있다. 문은 가장 안쪽 블록의 최상위 요소로 존재, 아무런 값을 만들어내지 않는다. 코틀린은 루프를 제외한 대부분의 제어 구조가 식이다 자바는 모든 제어 구조가 문이다 반면 대입문은 자바에서는 식이었으나, 코틀린에서는 문이 됐다. # 함수 fun max(a: Int, b: Int): Int { } 함수를 선언..

[Kotlin] 기본 요소 함수와 변수에 대해 알아보자 (2)

함수와 변수 #While 루프 while (조건) { /*...*/ //조건이 참인 동안 본문을 반복 실행한다. } do { /*...*/ } while (조건) //맨 처음에 무조건 본문을 한 번 실행한 다음, 조건이 참인 동안 본문을 반복 실행한다. #범위와 수열 자바의 for 루프(어떤 변수를 초기화하고 그 변수를 루프가 한 번 실행할 때마다 갱신하고 루프 조건이 거짓이 될 때 반복을 마치는 형태의 루프)에 해당하는 요소가 없다. 이를 대신하기 위해 코틀린에서는 **범위(range)**를 이용한다. fun fizzBuzz(i: Int) = when { i % 15 == 0 -> "FizzBuzz" i % 3 == 0 -> "Fizz" i % 5 == 0 -> "Buzz" else -> "$i" } ..

[Kotlin] 코틀린 함수 정의와 호출

코틀린 함수 정의와 호출 코틀린이 자체 컬렉션을 제공하지 않는 이유? - 자바 코드와 상호작용하기가 훨씬 더 쉽다. # 이름 붙인 인자 함수 호출 부분의 가독성 함수에 전달하는 인자 중 일부(또는 전부)의 이름을 명시할 수 있다. 하나라도 이름을 명시하면 뒤에 오는 모든 인자는 이름을 명시 해야 한다. # 디폴트 파라미터 값 함수 선언에서 파라미터의 디폴트 값을 지정할 수 있으므로 이런 오버로드 중 상당수를 피할 수 있다. # 최상위 프로퍼티 함수와 마찬가지로 프로퍼티도 파일의 최상위 수준에 놓을 수 있다. 이런 프로퍼티의 값은 정적 필드에 저장 된다. 더 자연스럽게 사용하려면 이 상수를 public static final 필드로 컴파일해야 한다. const변경자를 추가하면 된다. # 확장 함수와 확장 ..

[Kotlin] 클래스, 객체, 인터페이스에 대해 알아보자(1)

코틀린의 클래스와 인터페이스는 자바와는 약간 다르다 인터페이스에 프로퍼티 선언이 들어갈 수 있다. 코틀린 선언은 기본적으로 final이며 public이다. 중첩 클래스는 내부 클래스가 아니다. 즉, 코틀린 중첩 클래스에는 외부 클래스에 대한 참조가 없다. 코틀린 컴파일러는 유용한 메서드를 자동으로 만들어 준다. 클래스를 data로 선언하면 일부 표준 메서드를 생성해준다. object키워드 : 클래스와 인스턴스를 동시에 선언 싱글턴 클래스, 동반객체(companion object), 객체 식(object expression(자바의 무명클래스) 코틀린 언어가 제공하는 위임(delegation)을 사용하면 준비 메서드를 직접 작성할 필요가 없다. Delegation 이란? by 키워드를 활용한 Properti..

[Kotlin] 클래스, 객체, 인터페이스에 대해 알아보자 (2)

Kotlin 클래스, 객체, 인터페이스 Any class The root of the Kotlin class hierarchy. Every Kotlin class has Any as a superclass. open function으로 equals, hashCode, toString을 제공 equals, hashCode, toString 코틀린 컴파일러가 보이지 않는 곳에서 생성해 준다. 문자열 표현: toString() 인스턴스의 문자열 표현 제공 디버깅과 로깅 시 사용 객체의 동등성: equals() 자바 equals 객체의 동등성 자바 ‘==’ 원시 타입 에서는 값 비교 참조 타입 에서는 주소 비교 코틀린 ‘==’ 내부적으로 equals를 호출 객체의 동등성 값 비교 코틀린 ‘===’ 주소 비교 참..

컴포즈(compose) 상호 운용 API 자세히 알아보기

대부분의 커스텀 컴포넌트를 제공하는 서드파티 라이브러리는 뷰로 작성되었고 컴포즈를 사용하면서 이를 재사용 할 수 있어야합니다. 예를들어 이미지피커, 색상선택, QR리더 등 뷰로 작성된 컴포넌트를 컴포즈에서 임베디드 해서 사용해야합니다. 컴포즈앱에서 뷰를 사용하는 방법을 알아봅니다 또한 임베디드한 뷰와 컴포즈 간에 데이터를 공유해야하기 때문에 ViewModel을 사용해 구현하는 방법을 알아봅니다. 그리고 뷰기반 앱에서 컴포즈 계층구조를 추가하는 방법도 알아봅니다. 주요 키워드 AndroidView AndroidViewBinding ComposeView 컴포즈 앱에서 뷰 나타내기 컴포즈 앱에 이미지피커, 색상선택, QR리더와 같은 서드파티 라이브러리를 포함한다고 가정해봅니다. 컴포저블 함수에 뷰를 추가해야하..

컴포즈(compose) 컴포저블 함수 상태 관리

컴포저블 함수 상태 관리 7장에서는 초기화 후에 객체를 ViewModel에 전달하는 방법 객체를 사용해 데이터를 불러오고 저장하는 방법을 알아본다. 상태 유지와 검색 이전에 배운것 컴포즈 앱에서는 상태를 State나 MutableState의 인스턴스로 나타낸다. 상태가 변경됨에 따라 재구성 동작을 유발한다. 상태를 전달 받아 호출한곳으로 상태를 옮기는 것을 상태 호이스팅이라 부른다. 이러한 상태는 종종 사용하는 부모 컴포저블 중 하나에서 기억되는 경우도 있다. → 다른 대안으로 ViewModel 패턴으로 구현하는 방법이 있다. ViewModel 인스턴스는 데이터 초깃값을 어디서 가져오고, 데이터가 변경되면 무슨일을 하게 되는가? 안드로이드에서는 리포지터리 패턴 제안(책에서) 생성 class ViewMod..

컴포즈(compose) 앱 스타일링

컴포즈 앱 스타일링 1 색상, 모양, 텍스트 스타일의 정의 대부분의 컴포즈 UI는 android.compose.material 패키지에 내장된 컴포저블 함수를 사용할 것이다. 브랜드나 회사들은 그들의 정체성을 반영하는 색상, 모양, 텍스트 컬러를 정의하곤 한다. 그렇기 때문에 기본적으로 제공되는 머터리얼 컴포저블 함수의 모양을 수정할 필요가 있다. 머터리얼 테마의 메인 진입점은 MeterialTheme()이다. 이 컴포저블은 커스텀 색상, 모양, 텍스트 스타일을 매개변수로 전달받는다. 값을 설정하지 않으면 그에 상응하는 기본값이 사용된다. @Composable fun ComposeUnitConverterTheme( darkTheme: Boolean = isSystemInDarkTheme(), //isSy..

컴포즈(compose) 컴포저블 함수 상태 관리

컴포저블 함수 상태 관리 상태를 갖지 않는 컴포저블과 상태를 갖는 컴포저블 간의 차이점 이해 언제 어떠한 것을 선택할지 살펴본다. 상태를 갖거나 갖지 않는 컴포저블 함수 이해 상태 : 시간이 흐름에 따라 변하는 데이터 UI는 항상 현재 데이터를 보여줘야만 한다는 것이 중요 따라서 값이 변경되면 반드시 UI에 알려야 함. 옵저버블 타입을 사용 State는 기본 인터페이스로, value라는 이름을 갖는 프로퍼티에 특정 타입의 값을 저장하는 객체인 값 홀더(value holder)를 정의 컴포저블 함수가 실행되는 동안 value가 변경될 때마다 재구성될 것이다. 내부적으로 RecomposeScope 인터페이스가 값의 변경 사항을 구독하고 있을 것이기 때문 값이 변경될 수 있게 하려면 MutableState의 ..