본문 바로가기

Language17

[Kotlin IN ACTION] - Kotlin 문자열 다루기(split) 자바 개발자라면 String의 split 을 잘 알 것이다. 자바의 split 메소드는 점(.)을 사용해서 문자열 분리를 할 수가 없다. 그 이유는 split의 구분 문자열은 실제로는 정규식이기 때문이다. 따라서 마침표(.)는 모든 문자를 나타내는 정규식으로 해석된다. // Java String s = "12.345-6.A"; String[] sArr = s.split("."); for (String str : sArr) { System.out.print(str + ", "); } // 결과는 빈 배열을 반환한다. // Kotlin val str : String = "12.345-6.A" println(str.split("\\.|-".toRegex())) Kotlin 은 명시적으로 toRegex 확장함수.. 2022. 7. 21.
[Kotlin IN ACTION] - Kotlin 컬렉션 처리 컬렉션을 처리할 때 쓸 수 있는 코틀린 표준 라이브러리 함수 몇 가지를 설명하겠다. vararg 키워드를 사용하면 호출 시, 인자 개수가 달라질 수 있는 함수를 정의할 수 있다. 중위 함수 호출 구문을 사용하면 인자가 하나뿐인 메소드를 간편하게 호출할 수 있다. 구조 분해 선언을 사용하면 복합적인 값을 분해해서 여러 변수에 나눠 담을 수 있다. 자바 컬렉션 API 확장 코틀린 컬렉션은 자바와 같은 라이브러리 클래스를 사용하는 걸로 알고 있을 것이다. 그런데 코틀린 컬렉션은 어찌 더 확장된 API를 사용할수 있을까? ex) .last(), .maxOrNull() 그 이유는 확장함수이다. 코틀린은 확장함수가 있어 사용할 수 있고, 따라서 자바 라이브러리 클래스의 인스턴스인 컬렉션에 코틀린이 새로운 기능을 추.. 2022. 7. 21.
[Kotlin IN ACTION] - Kotlin 함수 정의와 호출(확장함수) 코틀린 컬렉션 (List, Set, Map) val list = arrayListOf(1, 7, 53) val set = hashSetOf(1, 7, 20) val map = hashMapOf(1 to "one", 2 to "seven", 3 to "fifty-three") 위와 같이 Java 라는 언어와 비슷한 방법으로 List, Set, Map을 만들 수 있다. Map 자료구조만 생김새가 좀 다르게 생겼다. 여기서 to 가 언어가 제공하는 특별한 키워드가 아니라 일반 함수라는 점에 유의해야 한다. 호출부분 println(list.javaClass) println(set.javaClass) println(map.javaClass) 출력부분 class java.util.ArrayList class jav.. 2022. 7. 18.
[Kotlin IN ACTION] - Kotlin Exception (예외처리) 코틀린의 예외처리는 자바나 다른 언어의 예외(exception) 처리와 비슷하다. 함수는 정상적으로 종료할 수 있지만 오류가 발생하면 예외를 던질(throw) 수 있다. 여기서 함수 호출하는 쪽에서는 그 예외를 잡아 처리할 수 있다. 만약, 발생한 예외를 함수 호출 단에서 처리(catch)하지 않으면 함수 호출 스택을 거슬러 올라가면서 예외를 처리하는 부분이 나올 때까지 예외를 다시 던진다(rethrow) fun percentageCheck(percent : Int): Int { if(percent !in 0..100) { throw IllegalArgumentException( "A percentage value must be between 0 and 100 : $percent") }else { ret.. 2022. 7. 14.
[Kotlin IN ACITON] - Kotlin while & for loop (반복문) 코틀린 특성 중 자바와 가장 비슷한 것이 이터레이션이다. 코틀린 while 루프는 자바와 동일하다. for 루프는 자바의 for-each 루프에 해당하는 형태만 존재한다. 코틀린의 for는 for in 형태를 취한다. 수에 대한 이터레이션 : 범위와 수열 자바 for 루프에는 초깃값, 증가값, 최종값이 존재한다. 하지만. 코틀린에서는 범위를 사용한다. [Java] for (int i = 1; i 2022. 7. 14.
[Kotlin IN ACTION] - Kotlin 스마트 캐스트 2.3.5 스마트 캐스트 : 타입 검사와 타입 캐스트를 조합 (1 + 2) + 4 라는 간단한 산술식을 계산하는 함수를 만들어보자. 식을 트리구조로 저장할 것이다. 노드는 합계(Sum) 나 수(Num) 중 하나다. Num은 항상 말단 노드지만, Sum 은 자식이 둘 있는 중간 노드다. Sum 노드의 두 자식은 덧셈의 두 인자다. Expr 인터페이스에는 두 가지 구현 클래스가 존재한다. 따라서 식을 평가하려면 두 가지 경우를 고려해야 한다. 어떤 식이 수라면 그 값을 반환한다. 어떤 식이 합계라면 좌항과 우항의 값을 계산한 다음에 그 두 값을 합한 값을 반환한다. [Java] // [Java] - 식을 표현하는 클래스 계층 interface Expr {} class Num implements Expr { .. 2022. 7. 9.
[Kotlin IN ACTION] - Kotlin 클래스와 프로퍼티 2.2 클래스와 프로퍼티 2.2.1 클래스 /* 자바 */ public class Person { private final String name; } /* 코틀린 (값 객체)*/ class Person(val name : String) 클래스에서 코틀린의 기본 가시성은 public 이므로 이런 경우 변경자를 생략해도 된다. 2.2.2 프로퍼티 class Person ( val name : String, // 읽기 전용 프로퍼티, // 코틀린은 (비공개)필드와 필드를 읽는 단순한(공개)게터를 만들어낸다. var isMarried : Boolean // 쓸 수 있는 프로퍼티, // 코틀린은 (비공개)필드, (공개)게터, (공개)세터를 만들어낸다. ) 자바에 있는 필드, 접근자를 한데 묶어 프로퍼티(prope.. 2022. 7. 5.
[Kotlin IN ACTION] - Kotlin 함수와 변수 2.2.1 Hello, World! 코틀린에서는 함수 하나로 Hello, World 를 찍는 프로그램을 만들 수 있다. fun main() { println("Hello World") } 함수를 선언할 때, fun 키워드를 사용한다 파라미터 이름 뒤에 그 파라미터의 타입을 쓴다. 함수를 최상위 수준에 정의할 수 있다. (굳이 클래스 안에 함수를 넣어야 할 필요가 없다.) 배열도 일반적인 클래스와 마찬가지다. 코틀린에는 자바와 달리 배열 처리를 위한 문법이 따로 존재하지 않는다. System.out.println() 대신에, println() 이라고 쓴다. 최신 프로그래밍 언어 경향과 마찬가지로 줄 끝에 세미콜론(;) 을 붙이지 않아도 된다. 2.1.2 함수 fun max(a : Int, b : Int) .. 2022. 7. 4.