목록분류 전체보기 (29)
Jisoo’s devlog
데이터 바인딩(DataBinding) "데이터 묶기" -> 데이터를 UI에 연결하기 위해 선언적 형식으로 결합할 수 있게 도와줌 선언적 형식으로 데이터와 언어를 묶으면 기존의 프로그램적 방식보다 코드를 최소화할 수 있다. 또한, MVP 또는 MVVM 패턴을 구현할 때 유용하게 사용된다. -> 학습 필요 예시) MainActivity에서 btn1의 이미지뷰를 클릭하면 변수의 "data"가 "1"로 넘어감. ImageInsideActivity에서 변수를 하나 만들어서 MainActivity에서 넘어온 "data"를 받는다. ImageInsideActiviy의 코드를 if문을 작성해서 변수의 "data"가 무엇인지에 따라 다른 이미지뷰를 볼 수 있게 한다.
고차 함수 정의 고차 함수 : 다른 함수를 인자로 받거나 함수를 반환하는 함수 => 코틀린에서는 람다나 함수 참조를 사용해 함수를 값으로 표현할 수 있다. 함수 타입 람다를 인자로 받는 함수를 정의하려면 -> 람다 인자의 타입을 어떻게 선언? =>변수 타입을 지정하지 않아도 람다를 변수에 대입할 수 있기 때문에 함수 타입 정의: 함수 파라미터의 타입을 괄호 안에 넣고, 그 뒤에 화살표(->) 추가, 함수의 반환 타입 지정. => 변수 타입을 함수 타입으로 지정하면 -> 파라미터로부터 람다의 파라미터 타입을 유추할 수 있다. 인자로 받은 함수 호출 //인자로 받은 함수를 호출 fun twoAndThree(operation: (Int, Int) -> Int) { val result = operation(2,..
코틀린 동등성 연산자(equals,==,===) 자바(==) : 원시 타입일 때는 값을 비교, 참조 타입일 때는 주소 값을 비교 코틀린(===) : 자바 == 의 주소 값 비교할 때와 동일 구조 분해 선언 (데이터클래스, 일반클래스) q. 구조 분해 선언과 관련해서 operator? ⇒ 일반 클래스일 때는 componentN으로 operator 키워드를 붙여 구조 분해 선언을 한다. 반면, 데이터 클래스일 때는 구조분해 선언을 지원하기 때문에 (동등성을 보장) = 왼쪽에 ()로 묶어서 나타낸다. += 연산이 원래 객체의 내부 상태를 변경하게 만들고 싶을 때 그냥 a+=1 의 예시를 생각. ⇒ 되도록 원서로 읽자..^^ 도우미 프로퍼티 부분 (Delegate 패턴) ⇒ 복습: 위임을 하는 이유 어떤 인터페..
let 함수란? let 함수는 타입 T의 확장함수이다. 모든 타입의 객체에 대해 .으로 이어나가는 방식으로 사용할 수 있다. null일 수 있는 어떤 변수가 null이 아닐 경우에만 코드를 실행하고 싶은 경우 사용한다. 특징 let함수는 람다식으로 중괄호를 채워서 이용한다. let함수는 스스로의 객체를 인자로 받아 사용한다. 또한 중괄호 내부에서 해당 객체를 it 키워드로 호출 가능하다. 왜 사용하는가 코드의 길이가 길어지거나 중복 호출될 때 let메서드를 사용하여 코드를 간결하게 할 수 있다. 플랫폼 타입이란? 플랫폼 타입이란 코틀린이 null 관련 정보를 알 수 없는 타입을 말한다. → 이 경우 모든 연산에 대한 책임은 개발자에게 있다. 코틀린에 반해 자바는 null-safety 메커니즘이 없다. 자..
현재 영역에 있는 변수에 접근 람다를 함수 안에서 정의하면 함수의 매개변수와 람다 정의 앞에 정의된 로컬 변수까지 람다에서 모두 사용 가능하다. 파이널 변수를 포회한 경우 : 람다 코드를 변수값과 함께 저장 파이널이 아닌 변수를 포획한 경우: 변수를 특별한 래퍼로 감싸서 래퍼에 대한 참조를 람다 코드와 함께 저장한다. wrapper? wrapper는 기본형 값들을 객체로 취급한다. 핸들러 핸들러를 사용하는 이유는 비동기적(asynchronous)으로 어떤 일을 처리하기 위해서이다. 그래서 함수가 순차적으로 실행되지 않는다. 비동기 호출이란 요청에 대한 결과가 동시에 일어나지 않으 상태에서 요청을 한 번에 다 받고 응답을 나중에 하는 호출이다. 멤버 참조 멤버 참조 시 : : 를 사용한다. 메소드, 생성자..
산술 연산자 오버로딩 자바에서는 원시 타입에 대해서만 산술 연산자를 사용하거나 String에 대해 +연산자를 사용할 수 있다. 코틀린은 이외의 클래스에서도 산술 연산자를 사용하는 것을 허용하고 있다. 어떻게 클래스에 대해 일반 산술 연산자를 정의할 수 있을까. 이항 산술 연산 오버로딩 Point 클래스에서 두 점을 더하는 연산. x 좌표와 y 좌표를 각각 더한다. data class Point(val x: Int, val y: Int) { operator fun plus(other: Point): Point { return Point(x + other.x, y + other.y) } } >>> val p1 = Point(10, 20) >>> val p2 = Point(30, 40) >>> println(..
splash 화면이란 모바일 앱 실행 시, 애플리케이션의 첫 화면이다. 1~3초 정도 사용자에게 보여주다가 서비스로 넘어간다. 1. SplashActivity를 만든다. 2. 앱을 실행하고 첫 화면으로 splash화면을 설정하려면, AndroidManifest.xml 창에서 첫 번째 사이에 를 옮겨 넣는다. 3. splash 화면에 사진 삽입 java > res > layout > activity_splash.xml 의 ImageView를 하나 만든다.
널 가능성 널이 될 수 있는 타입 코틀린은 널이 될 수 있는 타입을 명시적으로 지원한다는 점이 특징이다. 널이 될 수 있는 타입 == 프로퍼티나 변수에 null을 허용 null을 허용하는 인자를 받을 수 있게 하려면 타입 이름 뒤에 ?를 명시한다. String은 문자열만 인자로 받을 수 있는 타입이지만, Sring? 은 null 또는 문자열을 인자로 받을 수 있는 타입이 된다는 것이다. fun strLenSafe(s: String?): Int = if (s != null) s.length else 0 >>> val x: String? = null >>> println(strLenSafe(x)) 0 >>> println(strLenSafe("abc")) 3 타입의 의미 자바의 타입 시스템은 null을 잘 ..
람다 식? 기본적으로 다른 함수에 넘길 수 있는 작은 코드 조각을 뜻한다. 람다 식과 멤버 참조 람다 소개: 코드 블록을 하수 인자로 넘기기 람다식을 사용하면 함수를 선언할 필요가 없고 코드 블록을 직접 함수의 인자로 전달할 수 있다. 코드가 더욱 간결해지는 것이다. 자바에서 무명 내부 클래스로 리스너를 구현하는 코드이다. /* Java */ button.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { /* 클릭 시 수행할 동작 */ } }); 아래는 코틀린에서 람다로 리스너를 구현하는 코드이다. button.setOnClickListener { /* 클릭 시 수행할 동작 */ } 람다와 컬렉션 자바..
중첩 클래스와 내부 클래스 자바에서는 A클래스 안에 B클래스를 선언하면 내부 클래스이지만 코틀린에서는 A클래스 안에 B클래스를 선언하면 중첩 클래스이다. A클래스 안의 B클래스 앞에 Inner. 키워드를 붙이면 내부 클래스가 된다. 내부 클래스에서는 B클래스가 A클래스의 인스턴스에 대해 접근할 수 있는 권한이 생기고, 중첩 클래스는 바깥 클래스에 대해 접근할 수 없다. Inner 키워드를 붙여 내부 클래스를 사용하는 것이 더 편리해 보이긴 하지만 간혹 누수가 생길 수 있기 때문에 중첩 클래스를 사용하는 것을 지향해야 한다. ✨ 그렇다면 중첩 클래스를 왜 사용해야 하는가? 중첩 클래스는 바깥 클래스와 그 안의 클래스 간의 높은 연계성을 보여주기 위해 사용한다. 주 생성자와 부 생성자 주 생성자는 초기화 블..