DataBinding 레이아웃의 UI 구성요소를 앱의 데이터 소스와 결합할 수 있는 지원 라이브러리 UI 프레임워크 호출이 필요없어지기 때문에 파일이 단순화되고 유지보수가 쉬워짐 앱 성능이 향상되며 메모리 누수 및 null 포인터 예외 방지 build.gradle에 라이브러리를 추가하여 사용 apply plugin: 'kotlin-kapt' android { ... dataBinding { enabled = true } } RecyclerView에 DataBinding 적용하기 item_news_list.xml DataBinding을 쓸 xml 코드를 layout으로 감싼 후 작성 ... data 태그 안에 만드는 레이아웃 내에서 사용할 속성들을 변수로 만듬 "@{}" 에 미리 선언한 data 변수를 이..
지난 스터디에 각자 공부한 내용을 바탕으로 만들어온 문제를 정리한다! Q1. jin, won, chan, sion 을 항목으로 가진 리스트를 만들고, map 함수를 이용하여 다음과 같이 출력하세요. 친구의 이름 -> JIN 친구의 이름 -> WON 친구의 이름 -> CHAN 친구의 이름 -> SION A1. val friends = listOf("jin", "won", "chan", "sion") friends.map{ friend -> "친구의 이름 -> " + friend.toUpperCase() }.forEach{ println(it) } Q2. getNum(a = true, success = { //a가 true일 때 실행 print(it) }, fail = { //a가 false일 때 실행 pr..
이번주 스터디에서는 MVVM패턴 공부를 시작했다 MVVM 패턴 구조 View : 사용자와 상호작용하는 UI, 데이터 변화 감지를 위한 옵저버를 가짐 (ex. Activity, Fragment) Model : 앱에서 사용하는 데이터와 그 데이터를 처리(통신)하는 역할 (ex. dataClass, Repository) Repository : 데이터 API를 가지는 클래스, 뷰모델은 DB에 직접 접근하지 않고 repository에 접근하여 앱의 데이터를 관리 View Model : 뷰와 모델 사이의 인터페이스, 데이터바인딩을 전달하며 뷰를 그리기 위한 데이터를 처리하는 역할 Live Data : 관찰이 가능한(Observable) 데이터 홀더 클래스, 데이터가 변경될때마다 내부적으로 자동으로 알려줌 동작 Vi..
스트림 함수 컬렉션에 포함된 자료의 타입 변경 또는 새로운 자료 추가 생성을 쉽게 구현하기 위해 제공되는 함수 변환 map() : 컬렉션 내 인자를 함수에 정의된 규칙에 따라 다른 값 혹은 타입으로 변환할 때 사용 val cities = listOf("Seoul", "Tokyo", "Mountain View") //도시 이름을 대문자로 변환 //출력 결과 : SEOUL TOKYO MOUNTAIN VIEW cities.map{ city -> city.toUpperCase() } .forEach{ println(it) } //도시 이름을 받아, 원소를 각 도시 이름의 문자열 길이로 변환 //출력 결과 : length=5 length=5 length=13 cities.map{ city -> city.lengt..
4개의 글로 커니의 코틀린 2장, 3장 정리를 모두 마쳤다 오늘은 커니의 코틀린 4장 내용인, 개발을 할 때 유용하게 사용할 수 있는 코틀린 표준 라이브러리를 정리해보려고 한다! 조건 확인 함수 특정 값의 일치 여부 확인 : check, require check(), require() : 함수 혹은 생성자의 인자로 받은 표현식이 참이 아닌 경우 예외를 발생시키는 함수 //인자로 받은 value 값이 참이 아니라면 IllegalStateException 발생 fun check(value: Boolean) //인자로 받은 value 값이 참이 아니라면 IllegalArgumentException 발생 fun require(value: Boolean) //인자로 받은 value 값이 참이 아니라면 Illega..
안드(로이드 얼리)버디가 벌써 두번째 스터디를 마쳤다 각자 블로그에 글을 쓰면서 공부를 해오고 만나서는 서로 퀴즈를 내고 맞추면서 복습하는데 난 대충 넘어갔던 부분들까지 퀴즈를 맞추면서 다시 공부할 수 있어서 정말 좋은 것 같다>.=5 //getter를 커스텀으로 지정, boolean값을 반환 var address: String? = null //null로 초기화 set(value){ //value는 인자로 들어올 새로 지정될 주소값을 가지고 있음 field = value?.substring(0..9) //field는 address 프로퍼티 } } //사용 예시 val family: Family = Family(5, "kim") println("isBig: ${family.isBig}") //true 출..
함수 명명된 인자 : 매개변수의 이름과 함께 인자를 대입 //원을 그리는 함수 fun drawCircle(x: Int, y: Int, radius: Int) {...} //명명된 인자를 사용해 함수 호출 drawCircle(x=10, y=5, radius=25) drawCircle(10, 5, radius=25) 기본 매개변수 : 함수의 매개변수에 기본값 지정 가능 //반지름의 기본값을 25로 갖는 함수 fun drawCircle(x: Int, y: Int, radius: Int = 25) {...} //반지름을 지정하지 않았으므로 원의 반지름은 25 drawCircle(10, 5) 단일 표현식 표기 : Unit 타입을 제외한 타입을 반환하는 함수라면, 메소드 내용을 중괄호로 감싸지 않고 함수 정의 가능..
함수 값을 반환하지 않는 함수는 Unit타입을 반환하며 생략 가능 (Java의 void와 같음) class Foo{ fun foo(): Unit{ //반환값이 없는 함수, Unit 생략 가능 //함수 구현 } fun bar(): Int{ //정수형을 반환하는 함수 return 0 } } 상속 및 인터페이스 구현 코틀린에서는 상속과 구현 상관없이 세미콜론(:) 뒤에 부모 클래스와 인터페이스를 표기 클래스를 상속받는 경우 반드시 부모 클래스의 생성자를 호출해야함 상속받거나 구현한 함수의 앞에 반드시 override 키워드를 붙혀야함 class MainActivity: AppCompatActivity(), View.OnClickListener{ //부모 클래스의 생성자 호출 //AppCompatActivity..