Kotlin/Kotlin Language 16

[Kotlin] zip - 배열을 묶어서 써보자

알고리즘 문제를 풀다보면 리스트 두개가 나올 때가 있다. 그 두개의 같은 Index를 참조해서 문제를 푸는 경우가 더러 있다. 그때마다 for문으로 같은 index를 참조해서 문제를 자주 풀었었다. 하지만, kotlin에는 zip이라는 함수가 있고, 이를 활용하면 편하게 해결할 수 있다. 그래서 zip함수를 소개하고자 한다. zip은 무슨 기능을 할까? 제목에 있는 것 처럼 두개의 배열을 묶어서 Pair타입의 배열을 리턴해주는 것이다. array나 list 둘다 사용 가능하다. 두개의 배열을 묶어서 하나의 배열처럼 사용 가능하게 해주는 함수로, 같은 index에 접근할 때 유용하다. 그럼 어떻게 쓸까? var list1 = listOf(1,2,3,4,5) var list2 = listOf(1,2,3,4,..

[Kotlin] toInt(), digitToInt() 뭐가 다를까?

코틀린으로 알고리즘 문제를 풀거나, 코딩을 하다보면 어떨때는 toInt, 어떨때는 digitToInt를 사용한다. 어떨때 해당 함수를 사용할까? 먼저 toInt()를 보자. 그러고 digitToInt()를 보면 내부 코드가 이렇게 돼있다. 이것만 보고는 잘 이해가 안갈 것이다. 간단하게 설명을 하면 toInt()는 String에서 호출할 때와 Char에서 호출할 때 기능이 다르다. String에서 호출한다면 숫자로된 문자열을 숫자 그자체로 바꿔주지만 Char에서 호출한다면 해당 문자의 아스키코드값을 준다. "123".toInt() // -> 123 '1'.toInt() // -> 49 그래서 필요한게 digitToInt()이다. 이게 우리가 원하는 Char의 toInt()역할을 수행해준다. '1'.dig..

[Kotlin] StringBuilder

StringBuilder가 뭘까? StringBuilder 는 코틀린에서 동적으로 문자열을 조작할 수 있는 객체다. 그럼 다른건 동적이지 않나? String의 경우 연산 방식이 다르다. var text = "abc" text += "def" println(text) //abcdef 이게 우리가 아는 일반적인 방식일거다. 봐라 "abc"에 "def"가 추가돼서 동적으로 "abcdef"가 되지 않았나! 라고 생각할 수도 있다. 하지만 실상은 다르다 text -> "abc" 위와 같은 모양으로 text라는 변수가 "abc"라는 값을 가리키고(담고) 있었다고 가정하자. "def"를 더할 경우 아래와 같은 모양이 된다. "abc" text -> "abcdef" 이게 뭘 의미할까. text라는 변수에 "def"를 ..

[Kotlin] companion object

코틀린에는 static이 없다. 자바를 쓰던 사람들에게는 놀라운 소리일 것이다. 나 또한 그랬고. 그럼 어떻게 static을 쓸까? companion object를 활용해서 static을 사용한다. companion object의 블럭 내부에 값을 넣어준다면 해당 값들이 static처럼 사용된다. class Test { companion object{ var age = 10 val number = 20 const val num = 30 fun sayHi() = println("hi") } } 이와 같이 사용할 수 있다. 각각의 값들은 static으로 선언되고, 어디에서나 사용할 수 있다. 일종의 싱글톤이 되는 것이다. 그렇기 때문에 하나의 클래스에는 하나의 companion object만이 생성될 수 있..

[Udacity] Kotlin Bootcamp for Programmers - Functional Manipulation

1번 문제 Practice Time In this practice, you are going to write the the first part of a higher-order functions game. You will implement everything, except the higher-order functions. Let’s get started. Create a new file. Create an enum class, Directions, that has the directions NORTH, SOUTH, EAST and WEST, as well as START, and END. Create a class Game. Inside Game, declare a var, path, that is a m..

[Kotlin] 람다 lambda

람다는 익명함수 라고도 부른다. 이름은 많이 들어봤는데 람다가 뭘까? "익명함수"라는 이름이 힌트다. 이름 없이 함수 역할을 하는 형태를 "람다"라고 부른다. 람다는 화살표 표기법을 사용한다. 그럼 어떻게 쓸까? val lambdaExample: (Int, Int) -> Int = {x: Int, y: Int -> x + y} 자료형 변수명: (선언자료형) {람다식의 매개변수 -> 처리내용} 이러한 형식으로 사용한다. 이때 코틀린은 자료형을 추론할 수 있다는 성질로 인해 몇몇가지를 생략할 수 있다. val lambdaExample: (Int, Int) -> Int = {x: Int, y: Int -> x + y} // 기본형 val lambdaExample = {x: Int, y: Int -> x + y..

[Udacity] Kotlin Bootcamp for Programmers - Kotlin Essentials: Beyond the Basics

1번문제 Practice Time Let's go through an example of getting information about a book in the format of a Pair. Generally, you want information about both the title and the author, and perhaps also the year. Let’s create a basic book class, with a title, author, and year. Of course, you could get each of the properties separately. Create a method that returns both the title and the author as a Pair...

[Kotlin] 엘비스 연산자 (Elvis Operation)

코틀린에는 엘비스 연산자가 있다. null을 체크하고, 결과를 리턴해준다. var birthday = readLine()?.toIntOrNull()?:1 이렇게 ?: 를 활용해서 값을 리턴하는 방식이다. ?:의 왼쪽 값이 null일 경우 ?:의 오른쪽에 있는 값을 리턴해준다. 위의 코드를 예시로 들면 readLine()?.toIntOrNull의 값, 즉 입력받은 값이 null일 경우 1을 리턴하고 null이 아닐경우 원래 값을 리턴한다. 아래와 같은 예시가 있다. fun main(){ var nullTest: Int? = 3 if (nullTest == null){ println(0) }else{ println(nullTest+1) } } if와 else를 사용하여 입력값이 null일 경우를 체크해준다...