kotlin 33

[TIL] Kotlin - 람다식의 이해(1)

※ 람다식의 이해 - 함수의 내용을 할당하거나 인자 혹은 반환값을 자유롭게 넘기려면 호출 방법을 이해해야 하는데 기본현 변수로 할당된 값은 스택에 있고 다른 함수에 인자로 전달되는 경우는 값이 복사가 되어 전달이 된다. 참조형 변수로 할당된 객체는 참조 주소가 스택에 있고 객체는 힙에 있다. 참조형 객체는 함수에 전달할 때 참조된 주소가 복사되어 전달된다. - 람다식과 고차함수 호출하기 : 함수가 인자로 전달되는 경우는 람다식 함수는 값으로 처리가 되며 그 즉시 함수가 수행된 후 값을 전달한다 ○ 값에 의한 호출 - 값에 의한 호출은 함수가 인자로 전달될 경우 람다식 함수는 값으로 처리되어 함수가 수행된 후 값을 전달하는 형식 fun main() { val result = callByValue(lambd..

[TIL] Kotlin - 람다

※ 람다(Lambda) fun main() { var result: Int //일반 변수에 람다식 할당 val multi = {x: Int, y: Int -> x * y} //람다식 할당 변수는 함수처럼 이용 가능 result = multi(10, 20) println(result) } 람다식의 매개변수에 자료형이 지정되어 있을 경우 변수의 자료형은 생략이 가능한데 예시는 다음과 같다. val multi: (Int, Int) -> Int = {x: Int, y: Int -> x*y} // 생략되지 않은 전체 표현 val multi = {x: Int, y: Int -> x * y} // 선언 자료형 생략 val multi: (Int, Int) -> Int = {x,y -> x * y} // 람다식 매개변수..

[TIL] Kotlin - 패러다임(1)

※ 패러다임 - 코틀린은 함수형 프로그래밍(FP: Functional Programming)과 객체 지향 프로그래밍(OOP: Object-Oriented Programming)을 모두 지원하는 다중 패러다임 언어이다. 함수형과 객체 지향 프로그래밍 기법의 장점은 코드를 간략하게 만들 수 있다는 점인데 특징을 꼽아보자면 함수형 프로그래밍은 코드가 간략화 되고 테스트나 재사용성이 더 좋아져 개발 생산성이 늘어난다는 특징이 있다. ○ 함수형 프로그래밍: 람다식, 고차 함수 사용하여 구성. 순수 함수임 ○ 순수 함수(pure function) 이해 - 부작용(side-effect)이 없는 함수로 동일한 입력 인자에 대해 항상 같은 결과를 출력하거나 반환한다. - 값이 예측이 가능하여 결정적(determinist..

[TIL] Kotlin - 함수선언/호출(2)

※ 함수선언 및 호출 - 매개변수의 기본값을 지정하면 인자를 전달하지 않아도 함수를 실행할 수 있다. fun add(name: String, email: String = "default"){ //name 과 email을 회원목록에 저장 } ... add("Youngdeok")//이메일 인자 생략해 호출(name에만 "Youngdeok" 전달) ※ 매개변수 이름과 함께 함수 호출하기 - 매개변수가 많은 경우 호출할때 헷갈리는 경우가 있는데 매개변수의 이름과 함께 인자를 전달하는 방법이 있다. ... fun namedParam(x: Int=100, y:Int=200, z:Int){ println(x+y+z) } ... namedParam(x = 200, z = 100)//x,z의 이름과 함께 함수 호출(y는..

[TIL] Kotlin - 함수선언/호출(1)

※ 함수 fun 함수 이름([변수 이름: 자료형, 변수이름: 자료형...]) : [반환값의 자료형] { 표현식... [return 반환값] } # 일반적인 함수의 예 fun sum(a: Int, b: Int): Int{ return a + b } # 간략화된 함수 fun sum(a: Int, b: Int): Int = a + b 모든 함수는 fun이라는 키워드로 시작한다. 함수의 이름은 함수가 실행하는 역할에 맞게 자유롭게 지으면 되는데 매개변수는 콤마(,)를 이용해 여러개를 지정할 수 있고 반드시 콜론(:)과 함께 자료형을 명시해 주어야 한다. 또한, 함수의 반환값은 생략이 될 수 있지만 반환값의 자료형을 Unit 으로 지정하거나 생략해야 한다.

[TIL] Kotlin - 비트연산자

※ 비트연산자 - 비트연산은 임베디드 시스템에서 많이 사용되는데 흔히 우리가 이해하기 쉽고 사용하기 쉬운 10진법은 기계가 처리하는 단위인 0과 1로 이루어진 2진법 체계가 아니다. 두개의 진법은 각자에게 유리하고 이해하기 용이한 체계이기 때문에 적절한 진법인 16진법을 주로 사용한다. 16진법의 한자리는 2진법의 4자리 단위와 알맞기 때문에 이를 이해하고 사용하면 매우 좋을 것이다. 비트와 비트 연산 이해하기 - 1010(2) = 2^1+2^3 = 10(10) -> 2진법을 10진법으로 변경한 예시 - 가장 좌측에 있는 비트는 양(+)과 음(-)을 판단하는데 사용함 ○ 비트 연산을 위한 비트 메서드 표현식 설명 x.shl(bits) x를 표현하는 비트를 bits만큼 좌측으로 이동(부호 있음) x.shr..

[TIL] Kotlin - 기본연산자

※ 기본 연산자 - 기본 연산자의 종류로는 산술, 대입, 증가, 감소, 비교, 논리 연산자 등이 있다. 대입 연산자 = : 우측 항의 내용을 좌측 항에 대입 += : 두 항을 더한후 좌측 항에 대입 -= : 좌측항 - 우측항 을 좌측 항에 대입 *= : 두 항을 곱한 후 좌측 항에 대입 /= : 좌측항/우측항 을 좌측 항에 대입 %= : 좌측항/우측항을 연산한 뒤 남는 나머지를 좌측항에 대입 증가 연산자와 감소 연산자 ++ : 항의 값에 1 증가 [예시: ++num 혹은 num++] -- : 항의 값에 1 감소 [예시: --num 혹은 num--] fun main(){ var a: Int = 10 var b: Int = 10 var result1 = ++a var result2 = b++ println(..

[TIL] Kotlin - 자료형 변환

※ 자료형 변환 - 기본형을 사용하지 않고 참조형만 사용, 서로 다른 자료형은 변환 과정을 거친 뒤 비교를 해 본다. val a: Int = 1 // 정수형 변수 a를 선언하고 1 할당 val b: Double = a // 자료형 불일치 오류 발생 val c: Int = 1.1 // 자료형 불일치 오류 발생 val b: Double = a.toDouble() // 변환 메서드 사용 val result = 1L + 3 // Long + Int -> result는 Long ○ 기본형과 참조형 자료형의 비교 원리 - 이중 등호(==) : 값만 비교하는 경우 - 삼중 등호(===): 값과 참조 주소를 비교할 때 val a: Int = 128 val b: Int = 128 println(a==b) // true ..

[TIL] Kotlin - Null

※ Null(널)? - 코틀린은 변수에 값이 반드시 할당이 되어야 한다는 규칙이 있다. 값이 할당되지 않은 변수를 사용하려고 하면 오류가 발생하는데 값이 없는 상태를 Null 이라고 부른다. 하지만 null 이 가능한 선언문이 있는데 그 예시는 다음과 같다. val a: Int? = null var b: String? = null 하지만 NPE(NullPointerException) 을 주의하여야 하는데 이는 사용할 수 없는 null인 변수에 접근하며 발생하는 예외이다. 기본적으로 코틀린에서는 NotNull이고 Nullable 표현에만 '?' 가 사용이 된다. Nullable 표현과 관련된 기호로는 세이프 콜(Safe-call): str1?.length 와 non-null 단정 기호 str1!!.leng..

[TIL] Kotlin - 크기 범위와 기타 자료형

※ 2의 보수 - 음수는 2의 보수 표현을 사용해 연산이 된다. 절댓값의 이진수에 값을 뒤집고 1을 더하면 음수가 된다. ○ 논리 자료형 - Boolean(1비트) : 값의 범위는 true 혹은 false만 존재 ○ 문자 자료형 - Char(2바이트/16비트) : 값의 범위는 0~(2^15)-1(\u0000 ~ \uffff) 문자 자료형(Char)은 문자를 표현하기 위해 사용하며 문자 자료형의 값은 작은따옴표로 감싸 표현한다. 또한, 컴퓨터는 문자 자료형의 값을 저장할 때 문자 세트(아스키 코드, 유니코드)를 참고해 번호로 저장을 하는데 예시를 들자면 문자 a를 저장하려고 했을때 a를 저장하는것이 아닌 65로 저장이 된다. 하지만, 코트린에서 문자 자료형을 선언할때는 문자값으로 선언해야 한다. 이러한 특..