전체 글(70)
-
onCreate() -> setContent() -> 구성 가능한 함수
onCreate() 함수는 Activity가 실행되면, 즉 앱이 실행되면 가장 먼저 실행되는 함수라고 합니다.😮 그럼 앱의 실행과 동시에 수행되어야 할 작업들을(ex:초기화) 내부에 정의하여 사용할 수 있다는 것을 알고 있으면 도움이 되겠죠?!✏️📖 setContent() 함수는 구성 가능한 함수를 인자로 받아 레이아웃으로 정의하는데 사용되는 함수라고 합니다. 즉, 화면에 출력될 레이아웃을 설정하는 함수라는 건데요.📱👀 우리가 앱을 실행하면 가장 먼저 무엇을 볼까요?🤔 기능들을 포함하고 있는 화면을 보겠죠? 그럼 앱을 실행과 동시에 화면을 띄워야 하겠네요! onCreate() 함수 내부에 setContent()를 정의하면 앱을 실행하면서 화면을 볼 수 있지 않을까요?✏️📖 class BlurActivit..
2024.01.09 -
람다의 무명 클래스 객체 생성
코틀린에서 작성된 고차 함수, 특히 라이브러리의 인자로 람다를 전달하면 모두가 신경 쓸 것 없이 행복하다. 하지만 코틀린은 자바를 개선한 언어.. 심지어 JVM(자바 가상 머신) 위에서 돌아간다. 따라서 프로그램을 짜다보면 자바의 메서드를 쓰지 않을 수가 없다. 근데 이게 정말 귀찮게 하는 요소가 많다. //자바 메서드 정의. Runnable은 함수형 인터페이스. void postponeComputation(int delay, Runnable computation); //코틀린에서 인자로 람다를 전달하여 호출. fun handleComputation(id: String) { postponeComputation(1000) { println(id) } } 다행히 자바 메서드의 함수형 인터페이스 타입 파라미터..
2023.10.26 -
변경 가능한 외부 로컬 변수를 포획한 람다, 클로저
코틀린 람다 안에서는 파이널 변수가 아닌 변수에 접근할 수 있다. fun createClosure(): () -> Unit { var x = 10 return { println(x++) } } fun main() { val myClosure = createClosure() myClosure() myClosure() myClosure() } 사실이다. 그러나 내부 구현에는 약간의 속임수가 존재한다. 변경 가능한(var) 외부 로컬 변수를 포획한 람다를 저장할 때, 람다 내부에서는 래퍼 클래스 객체 하나를 생성하고 이 객체를 변경 불가능한(val) 변수로 받는다. 이렇게 생성된 래퍼 클래스 객체의 프로퍼티를 var로 선언하여 포획된 로컬 변수의 주솟값을 저장한다. 따라서 함수가 반환되어 로컬 변수가 소멸되어..
2023.10.25 -
안드로이드 스튜디오 Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.8.0, expected version is 1.6.0. 문제 해결
step.1 안드로이드 스튜디오를 최신 버전으로 다운로드. step.2 Tools - APG Upgrade Assistent - 최신 버전으로 업그레이드. step.3 Gradle Scripts - build.gradle에서 아래의 코드 부분만 변경. id 'org.jetbrains.kotlin.android' version '1.8.10'
2023.10.12