Programming/Kotlin26 코틀린(Kotlin) - 코틀린의 원시 타입 코틀린에서는 자바와 달리 원시 타입과 래퍼 타입을 구분하지 않는다. * 원시 타입 : 원시 타입의 변수에는 값이 직접 들어간다. * 참조 타입(reference type): 참조 타입의 변수에는 메모리 상의 객체 위치가 들어간다. 원시 타입 원시 타입은 참조 타입보다 값을 더 효율적으로 저장하고 이곳저곳으로 전달할 수 있다. 하지만 이 값에 대해 메소드를 호출하거나 컬렉션에 원시 타입 값을 담을 수는 없다. 자바에서는 참조 타입이 필요한 경우 특별한 래퍼 타입으로 원시 타입 값을 감싸 사용한다. 이 때문에 정수의 컬렉션을 정의하려면 Collection가 아닌 Collection를 사용해야 한다. 코틀린은 원시 타입과 참조 타입을 구분하지 않으므로 항상 같은 타입을 사용한다. val i: Int = 1 v.. Programming/Kotlin 2021. 10. 21. 코틀린(Kotlin) - 널(NULL) 가능성 자바에 비해 코틀린의 타입 시스템은 코드의 가독성을 향상하는 데 도움이 되는 몇 가지 특성을 제공한다. 대표적으로는 널이 될 수 있는 타입(nullalbe type), 읽기 전용 컬렉션, 배열지원이 있다. 널 가능성 널 가능성은 NPE오류(NullPointerException 오류)를 피할 수 있게 도와주는 코틀린 타입 시스템의 특성이다. 널이 될 수 있는지의 여부를 타입 시스템에 추가함으로써 컴파일러가 컴파일 시 오류를 미리 감지해서 실행 시점에 발생할 수 있는 예외 가능성을 줄일 수 있다. 널이 될 수 있는 타입 코틀린과 자바의 가장 중요한 차이는 코틀린 타입 시스템이 널이 될 수 있는 타입을 명시적으로 지원한다는 것이다. 자바에서 다음과 같은 코드가 있다 하자. int strLen(String s).. Programming/Kotlin 2021. 10. 20. 코틀린(Kotlin) - 컬렉션 API 함수형 프로그래밍 스타일을 사용하면 컬렉션을 다룰 때 편리하다. 대부분의 작업에 라이브러리 함수를 활용할 수 있어 코드를 아주 간결하게 만들 수 있다. 컬렉션을 다루는 코틀린 표준 라이브러리를 알아보도록 하자. filter와 map 이 두 함수는 컬렉션을 활용할 때 기반이 되는 함수다. 대부분의 컬렉션 연산을 이 두 함수를 통해 표현할 수 있다. filter 함수는 컬렉션을 이터레이션 하면서 주어진 람다에 각 원소를 넘겨 람다가 true를 반환하는 원소만 모은다. val list = istOf(1, 2, 3, 4) println(list.filter{ it % 2 == 0 }) [2, 4] 결과는 입력 컬렉션의 원소 중 주어진 술어를 만족하는 원소만으로 이뤄진 새로운 컬렉션이다. filter 함수는 컬렉.. Programming/Kotlin 2021. 10. 17. 코틀린(Kotlin) - 람다식과 멤버 참조 람다식 또는 람다는 기본적으로 다른 함수에 넘길 수 있는 작은 코드 조각을 뜻한다. 이를 사용하면 쉽게 공통 코드 구조를 라이브러리 함수로 뽑아낼 수 있다. 코드 블록을 함수 인자로 넘기기 "이벤트가 발생하면 이 리스너를 실행하자" 또는 데이터 구조의 모든 원소에 이 연산을 적용하자"와 같은 생각을 코드로 표현하기 위해 일련의 동작을 변수에 저장하거나 다른 함수에 넘겨야 하는 경우가 종종 있다. button.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { /* 클릭 시 수행할 동작 */ } }); 이처럼 자바에서는 무명 내부 클래스를 선언하여 코드가 번잡스러워진다. 이와 비슷한 작업을 많이 수행해야 .. Programming/Kotlin 2021. 10. 16. 코틀린(Kotlin) - 오브젝트(object): 객체 선언, 동반 객체, 객체 식 객체 선언: 싱글톤 객체 선언은 클래스 선언과, 클래스에 속한 단일 인스턴스의 생성, 변수에 인스턴스 저장을 동시에 처리해주기 때문에 싱글톤에 사용하기 적합하다. object Payroll { val allEmployees = arraylistOf() fun calculateSalary() { for(person in allEmployees) { . . . . } } } payroll.allEmployees.add(Person(. . . .)) payroll.calculateSalary() 싱글톤은 객체 선언 키워드인 object로 시작하면 된다. 객체 선언 객체 선언의 특징은 다음과 같다. 프로퍼티, 메서드, 초기화 블록이 가능하다. 생성자는 객체 선언에 사용할 수 없다.(주 생성자, 부 생성자 모두 .. Programming/Kotlin 2021. 10. 10. 코틀린(Kotlin) - 데이터 클래스와 위임 데이터 클래스(data class) 데이터 클래스는 data라는 수식어를 사용하며 다음과 같은 조건이 충적되어야 한다. 주요 생성자에는 적어도 하나의 파라미터가 필요하다. 주요 생성자의 파라미터는 val, var로 지정해야 한다. 데이터 클래스는 abstract, open, sealed, inner와 같은 수식어를 사용할 수 없다. data Class Client(val name: String, val nation: String) 다음 메서드는 컴파일러가 자동으로 생성한다. 인스턴스 간 비교를 위한 equals 해시 기반 컨테이너에서 키로 사용할 수 있는 hashCode 각 필드를 선언 순서대로 표시하는 문자열 표현을 만들어주는 toString 객체 복사를 편하게 해주는 copy 프로퍼티 선언 순서에 따.. Programming/Kotlin 2021. 10. 10. 코틀린(Kotlin) - 클래스 계층(인터페이스, open, final, abstract, 중첩 클래스, sealed 클래스) 인터페이스 코틀린의 인터페이스는 자바에서의 인터페이스와 유사하다. interface로 시작을 하며, 메서드를 구현할 때 override 변경자를 사용한다.(자바의 @override를 대체) interface Clickable { fun click() } class Button: Clickable { override fun click() = println("I was clicked!") } 인터페이스와 클래스 확장은 클래스: 인터페이스 클래스명 형식으로 구현한다. 여러 인터페이스를 구현 가능하지만, 클래스는 한 개만 상속 가능하다. 또한 override된 함수 이름과 다른 함수의 이름이 중복되서는 안 된다. 디폴트 구현 자바에서는 디폴트를 구현할 때 앞에 default 키워드를 붙여야 하지만, 코틀린에서는.. Programming/Kotlin 2021. 10. 3. 코틀린(Kotlin) - 생성자와 프로퍼티를 갖는 클래스 선언 클래스 생성자 클래스 생성자는 객체를 생성할 때 초기화 블록 다음으로 실행이 된다. 생성자는 주 생성자(Prime Constructor)와 부 생성자(Secondary Constructor) 이 두 가지로 나뉘게 된다. 주 생성자(Prime Constructor) 주 생성자는 클래스 이름 뒤에 constructor 키워드를 사용하여 지정한다. class User construntor(_nickname: String) { val nickname: String init { nickname = _nickname } } 생성자에 private, internal와 같은 가시성 수식어가 없다면 constructor 키워드는 생략이 가능하다. init 블록이나 프로퍼티 초기화 식에서만 주 생성자의 파라미터 참조가 가.. Programming/Kotlin 2021. 10. 3. 코틀린(Kotlin) - 문자열과 정규식 문자열 분리 자바에서의 split과는 달리 코틀린에서는 여러 개의 다른 조합의 파라미터를 받는 split 확장 함수를 제공한다. 정규식을 파라미터로 받는 함수는 String이 아닌 Regex 타입이다. //문자열 구분자 "12.345-6.A".split(".") "12.345-6.A".split(".", "-") "12.345-6.A".split('.', '-') //구분자를 정규표현식으로 지정 "12.345-6.A".split("\\.|-".toRegex()) 3중 따옴표 문자열 3중 따옴표 문자열에서는 역슬래쉬("\")를 포함하여 따로 이스케이프 할 필요가 없다. 예를 들어 온점(.)기호를 이스케이프 하려면 \\.이라고 해야 하지만 3중 따옴표 문자열에서는 \.이라고 사용한다. """(.+)/(.|).. Programming/Kotlin 2021. 9. 25. 코틀린(Kotlin) - 함수 정의와 호출 컬렉션(Collection) 생성 Kotlin에서는 자체 Collection이 아닌 Java Collection을 사용하여 Java 코드와 상호 작용이 용이하다. val array = arrayOf("ONE", "TWO", "THREE") val set = hashSetOf(1, 2, 3) val list = arrayListOf(1, 2, 3) val map = hashMapOf(1 to "one", 2 to "two") 이와 같이 배열을 생성하기 위해서는 arrayOf() 함수를, 집합을 생성하기 위해서는 hashSetOf() 함수, 배열 리스트를 생성하기 위해서는 ArrayListOf() 함수, 맵을 생성하기 위해서는 hashMapOf() 함수를 사용한다. 이름 붙인 인자 이름붙인 인자를 사용하면 .. Programming/Kotlin 2021. 9. 25. 코틀린(Kotlin) - 예외 처리 Kotlin에서 예외 처리하는 방법은 Java와 비슷하다. 예외 처리하는 방법에는 두 가지가 있다. throw로 예외를 던지는 방식과, try, catch로 예외를 잡아서 처리하는 방식이다. throw 예외를 던질 때 throw 키워드를 사용한다. 이 때 발생한 예외를 잡아주지 않으면 함수를 호출 스택을 거슬러 올라가 예외를 처리해주는 부분까지 다시 예외를 던진다. - Java달리 Kotlin에서는 throw가 식으로 쓰여 다른 식에 포함될 수 있다. fun main() { var n = 10 if(n !in 0..5) { throw IllegalArgumentException("A percentage value must be between 0 and 5: $percentage") } else print.. Programming/Kotlin 2021. 9. 19. 코틀린(Kotlin) - enum, 제어문(if, when, while, for) enum enum 키워드는 Enumerated Type으로 서로 연관된 상수 값들의 집합이다. Java에서는 enum을 사용하지만 Kotlin에서는 enum class를 사용한다. enum class Subject { MATH, KOREAN, ENGLISH, SCIENCE } 여기서 enum은 혼자 사용할 수 없는 소프트 키워드이다. 또한 class 앞에 붙어야만 의미를 가지게 된다. *class 앞에 붙지 않을 시 변수명으로 사용 가능하다. enum의 장점 인스턴스 생성을 안 해도 되어 값에 대한 안정성이 보장된다. 코드가 간단해져 가독성이 좋다. 프로퍼티와 메서드가 있는 enum class 선언 enum에서도 class와 같이 프로퍼티, 메서드를 선언할 수 있다. 여기서 특이한 점은 Kotlin에서는.. Programming/Kotlin 2021. 9. 19. 이전 1 2 3 다음 728x90