본문 바로가기

전체 글167

조건문 기본적으로 많이 사용하는 조건문 var data = 1 if(data > 1) { println('data > 1') } else if (data > 0 && data 0) { println('success') true } else { println('fail') false } println(result) } // 결과 // success // true When 조건문 스위치 구문과 비슷한데 왜 만드건지? 소괄호 ( ) 안에 넣은 데이터가 조건이 되고 이값에 따라 각 구문을 실행한다. - 정수가 아닌 다른 타입의 데이터를 지정도 가능하다. - 조건문을 생략해서 사용도 가능하다 - else문을 생략도 가능하다. var data = 1 when(data) { 1 -> println('it is 1') 2 -.. 2021. 12. 14.
컬렉션 타입 여러 개의 데이터를 표현하는 방법이며 Array, List, Set, Map이 있음 fun main() { val data: Array = Array(3, {0}) // 람다함수 초기값 0 3개 만들기 data[0] = 10 data[1] = 20 data.set(2, 30) // 3번째 인덱스 데이터 30으로 설정 println (""" size: ${data.size} data: ${data[0]}, ${data[1]}, ${data.get(2)} """) } // 결과 // size : 3 // data: 10, 20, 30 fun main() { val data: arrayOf(10, 20, 30) // 크기가 3인 Int 배열 선언 및 할당 println (""" size: ${data.size.. 2021. 12. 13.
데이터 타입 코틀린의 모든 변수는 객체 기초 데이터 타입 아니라 클래스 이다 fun fun() { var data1: Int = 1 var data2: Int? = null // null 가능 data1 = data.plus(1) // 객체의 멕서드 이용 가능 } val a: Byte = 0b00123456 val a: Short = 1 val a: Long = 10L val a: Double = 10.0 val a: Float = 10.0f val a: Boolean = true val a: Char = 'a' // 문자는 작은 따옴표 val a: "hello \n hell " // 문자열은 쌍따옴표 val a: """ hello hell """ // 삼중따옴표 .trimIndent()함수가 자동 추가되어 문자열 .. 2021. 12. 13.
초기화 미루기 변수를 선언할 때 초깃갑을 할당할 수 없는 경우가 있다 이때 값을 이후에 할당할 것이라고 컴파일러에게 알려주어야 한다. lateinit나 lazy 키워드를 이용한다. lateinit (늦은 초기화?) 선언한 변수는 선언과 동시에 초깃값을 할당하지 않아도 되지만 모든 유형의 변수 선언에 사용할수 없는 2가지 규칙이 있다. - lateinit은 var 키워드로 선언한 변수에만 사용 가능 - Int, Long, Short, Double, Float, Boolean, Byte 타입에는 사용 불가 lateinit val data1:String // error!!! lateinit var data1:String // success !!! lazy (게으른?) 변수 선언문 뒤에 by lazy { } 형식으로 선언 소.. 2021. 12. 13.
코틀린 이란? 코틀린은 젯브레인에서 오픈소스 그룹을 만들어 개발한 프로그래밍 언어이다. 2011년 처음 공개되어 2017년 구글에서 안드로이드 공식언어로 지정하면서 유명해졌다. 자바(Java)가 인도네시아 섬 이름을 따서 사용했든 코틀린(Kotlin)도 러시아 섬 이름을에서 따왔다 ?? 섬에 무슨 사연이 있나?? 코틀린도 자바의 가상 머신(JVM)기반을 둔 언어기에 안드로이드 앱 개발이 가능하다. 코틀린은 .kt 확장자를 사용하며 코틀린 컴파일러(kotlinc)가 .kt 파일을 컴파일하면 자바 바이트 코드가 만들어진다. 자바보다 나은점? 1. 열라 간결하다. 2. Null 허용과 Null 불허용으로 구분 널안정성을 안정성 확보한다. 객체지향 프로그래밍에서 객체는 Null 상태가 가능해서 런타임 오류인 널 포인트 예외가.. 2021. 12. 13.
ES6 구조 분해와 구조 할당 기본값 할당 ES5 예제 const list = [0,1]; const item1 = list[0]; const item2 = list[1]; // 기본값 할당 const item3 = list[2] || -1; ES6 예제 const list = [0, 1]; const [ item1, item2, // 기본값 할당 item3 = -1, ] = list; 변수를 교차하여 배열의 두값을 치환 ES5 예제 var temp = item2; item2= item1; item1 = temp; ES6 예제 [item2, item1] = [item1, item2]; 객체 기본값 할당 ES5 예제 const key1 = obj.key1; const key2 = obj.key2; const key3 = obj.key3.. 2021. 12. 9.
ES6 화살표 함수 // 함수 표현식 function add(num) { return function (value) { return num + value; }; } // 화살표 함수 표현식 const add = num => value => num + value; 가장중요!! 화살표 함수는 콜백 함수의 this 범위로 생기는 오류를 피하기 위해 bind() 하수를 사용하여 this 객체를 전달하는 과정을 포함한다. class test { val = 10; constructor() { const add1 = function(one, two) { return this.val + one + two }.bind(this) const add2 = (one, two) => this.val + one + two } } 2021. 12. 9.
가변 변수와 불변 변수 const를 사용하면 불변변수로 인해 값을 변경할수 없지만 push, splice, pop 함수를 사용하면 변경이 가능하다 이를 무결성 제약 조건에 위배되었다고 한다. 그래서 무결성을 유지하면서 무결성 변수를 수정하는 방법은 값을 추가시 : push 함수 대신 concat() 함수를 삭제시: pop(), shift()함수 대신 slice(), concat() 함수에 전개 연산자를 조합하여 사용하면 된다. const arr3 = []; const arr4 = arr3.concat(1); // arr4 = [1] const arr5 = [...arr4, 2, 3]; // arr5 = [1, 2, 3] const arr6 = arr5.slice(0, 1); // arr6 = [1], arr5 = [1, 2, .. 2021. 12. 9.
전개 연산자 배열로 const array1 = ['1', '2'] const array2 = ['3', '4'] const combined = [array1[0], array1[1], array2[0], array2[1]]; // 1, 2, 3, 4 const combined = array1.concat(array2); // 1, 2, 3, 4 const combined = [].concat(array1, array2); const first = array1[0]; // 1 const second = array1[1]; // 2 const three = array1[2] || 'empty'; // 3 또는 'empty' function func() { const args = Array.prototype.slice.c.. 2021. 12. 7.
모듈 구성 요소 그래들 빌드 설정 파일 (build.gradle) : 그래들은 안드로이드 앱의 빌드 도구로 앱을 빌드하는 데 필요한 설정을 등록한다. 그래들 파일은 2개가 있다 - Project: AndroidLab - Module: Android.app 대부분의 빌드 설정은 모듈 그래들 파일에 작성한다. // 플러그인 선언 필요에 따라 추가 가능 plugins { id 'com.android.application' id 'kotlin-android' } // 컴파일 및 빌드 버전 설정 compiledSdkVersion 30 buildToolsVersion "30.0.2" // 앱의 식별자를 설정 // 고유한 문자열로 지정해야 한다. // 만약 구글플레이 스토어에 똑같은 식별자가 있다면 플레이 스토어에 등록되지 않는다... 2021. 12. 5.
고차함수 (Currying) 커링은 반환값이 함수인 디자인 패턴을 말하며, 중복된 코드를 반복적으로 입력하지 않고 원하는 기능을 조합하여 적재적소에 사용한다는 장점이 있다 커링은 쉽게 말하면 ' 함수를 반환하는 함수' 라고 생각하면 된다. 커링을 사용하는 이유는 '함수의 재활용' 이다. 인자 함수당 넣어 반환 하여 외부 함수를 하나 벗는다는다고 생각 하면 편하다. 인자의 순서, 개수에 따라 비슷한 함수를 반복해서 작성해야 하는 부분을 커링을 이용하면 커링 패턴으로 묶인 함수들을 쉽게 유지, 보수할 수 있으므로 유용하다. 2021. 12. 4.
컴포넌트 애플리케이션의 구성하는 단위 즉 하나의 애플리케이션은 여러 컴포넌트로 구성 컴포넌트파일은 JAR, DLL 파일이 있다. 안드로이드 에서는 클래스로 컴포넌트를 개발한다. 앱이 실행될 때 클래스의 객체 생성부터 소멸 까지 생명주기 관리를 개발자 코드에서 한다면 일반 클래스 개발자가 만들기는 했지만 생명주기를 안드로이드 시스템에서 관리한다면 컴포넌트 클래스이다. 액티비티(Activity): 화면을 구성하는 컴포넌트 앱의 화면을 안드로이드폰에 출력하려면 액티비티를 만들어야 한다. 서비스(Service): 백그라운드 작업을 하는 컴포넌트이다. 화면에 상관없이 백그라운드에서 장시간 실행해야 한다. 콘텐츠 프로바이더(ContentProvider): 앱의 데이터를 공유하는 컴포넌트 즉 하나의 앱이 자신의 데이터를 다른.. 2021. 12. 2.