목록[Study]/Kotlin (25)
기록
코틀린이 지원하는 컬렉션 클래스인 Set과 Map을 알아보자. 1. Set List와 달리 순서가 정렬되지 않으며 중복이 허용되지 않는 컬렉션이다. 따라서 인덱스로 위치를 지정하여 객체를 참조할 수는 없으며, contains로 객체가 set 안에 존재하는지 확인하는 식으로만 사용한다. Set 역시 MutableSet이 존재하여 객체의 추가, 삭제 가능 여부에 따라 사용한다. 요소의 추가 삭제 add(데이터) remove(데이터) 객체의 확인 contains(데이터) fun main() { val a = mutableSetOf("귤", "바나나", "키위") for(item in a) { println("${item}") } a.add("자몽") println(a) a.remove("바나나") printl..
특별한 기능이나 형태를 가진 클래스들을 알아보자. 1. Data Class Data class는 데이터를 다루는 데 최적화 된 클래스로 '5가지 기능'을 내부적으로 자동으로 생성한다. 1. 내용의 동일성을 판단하는 equals() 자동 구현 2. 객체의 내용에서 고유한 코드를 생성하는 hashcode() 자동 구현 3. 포함된 속성을 보기 쉽게 나타내는 toString() 자동 구현 4. 객체를 복사해 새 객체를 만드는 copy() 자동 구현 val a = Data("A", 7) //파라미터가 없으면 똑같은 내용 객체 생성 val b = a.copy() //생성자와 똑같은 형태의 파라미터를 넘겨 일부 속성 변경 val c = a.copy("C") 5. 속성을 순서대로 반환하는 component 함수 자동..
코틀린에서 지원하는 클래스 유형 중 클래스가 중첩되는 두 가지 유형을 알아보자. 기본적으로 클래스 안에 클래스를 하나 더 넣을 수 있는 중첩 클래스(Nested Class)를 지원한다. 중첩 클래스는 하나의 클래스가 다른 클래스의 기능과 강하게 연관되어 있다는 의미를 전달하기 위해 만들어진 형식으로, 사용 할 때는 외부클래스.중첩클래스 형식으로 사용한다. 이때 중첩클래스 대신 내부 클래스(Inner Class)라는 것을 사용할 수도 있다. 중첩클래스에 inner 라는 키워드를 붙인 내부 클래스는 혼자서 객체를 만들 수는 없고 외부 클래스의 객체가 있어야만 생성과 사용이 가능한 클래스이다. 중첩클래스는 형태만 내부에 존재할 뿐 실질적으로는 서로 내용을 직접 공유할 수 없는 별개의 클래스이다. 내부클래스는 ..
함수를 더 다양한 방법으로 사용할 수 있는 여러 기능들을 알아보자. 코틀린에서도 대부분의 언어에서 지원하는 함수의 overloading이 지원된다. 이것은 '같은 스코프 안'에서 같은 이름의 함수를 여러개 만들 수 있는 기능이다. 이름이 같더라도 파라미터의 자료형이 다르거나, 파라미터의 개수가 다르면 서로 다른 함수로 동작할 수 있다. fun main() { read(7) read("감사합니다") } fun read(x: Int) { println("숫자 $x 입니다") } fun read(x: String) { print(x) } 함수 이름은 같지만 자료형을 구분하여 함수가 매칭되는 것을 볼 수 있다. 1. default arguments 파라미터를 받아야 하는 함수이지만 별다른 파라미터가 없더라도 기..
nullable 변수에서 null을 처리하는 법과 변수 간에 동일성을 확인하는 법을 알아보자. 1. Null 처리 연산자 코틀린에서 nullable 변수를 만들어 null 상태를 담을 수 있다. 하지만 null 상태로 속성이나 함수를 쓰려고 하면 *null pointer exception 이 발생하기 때문에 nullable 변수를 사용할 때에는 null check가 없이는 코드가 컴파일 되지 않는다. (* null인 객체를 참조하면 발생하는 오류) null체크를 위해 일일히 if문으로 조건을 체크하는 대신 더 편리한 방법을 제공한다. ?. (null safe operator) 참조연산자를 실행하기 전에, 먼저 객체가 null인지 확인하고 객체가 null이라면 뒤따라오는 구문을 실행하지 않는 연산자이다. ..
String 클래스와 관련한 여러 속성과 함수가 있다. 그 중 자주 쓰이는 것들을 알아보자. fun main() { val test1 = "Test.Kotlin.String" println(test1.length) println(test1.toLowerCase()) println(test1.toUpperCase()) //특정 문자열을 기준으로 문자열을 여러개로 나눠 배열에 담는다. val test2 = test1.split(".") println(test2) //문자열이 들어가 있는 배열을 다시 하나의 문자열로 합친다. println(test2.joinToString()) println(test2.joinToString("-")) print(test1.substring(5..10)) } fun main(..
데이터를 코드에서 지정한 순서대로 저장하는 List애 대해 알아보자. List는 데이터를 모아 관리하는 Collection class를 상속받는 서브 클래스(List, Set, Map) 중 가장 단순한 형태로, 여러개의 데이터를 원하는 순서로 넣어 관리하는 형태이다. 리스트에는 List와 MutableList 두 가지가 있다. List MutableList List는 생성시에 넣은 객체를 대체, 추가, 삭제 할 수 없으며 MutableList는 이것이 가능하다. (*mutable : 변할 수 있는) 따라서 상황에 맞춰 선택해 사용하면 된다. 리스트를 만들 때는 전용 함수인 listOf나 mutableListOf를 쓰고, 괄호 안에 리스트에 담을 데이터 요소를 나열한다. listOf(1,2,3) mutab..
클래스나 함수에서 사용하는 자료형을 외부에서 지정할 수 있는 기능인 제너릭에 대해 알아보자. 클래스 A와 A 클래스를 상속바는 클래스 B가 있다고 해보자. 이 두 클래스의 인스턴스를 공용으로 사용하는 하나의 함수에 파라미터로 담으려면 어떻게 해야할까? fun castingExam(var a: A) 지난 강의에서 보았듯 수퍼클래스인 A의 자료형으로 받으면 B를 넣어도 A로 캐스팅 되어, 두 클래스 모두 함수의 파라미터로 사용할 수 있다. 하지만, 캐스팅 연산을 사용하는 것은 프로그램의 속도를 저하시킬 수 있다는 단점이 있다. 그래서 나온 것이 제너릭이라는 개념이다. 제너릭은 함수나 클래스를 선언할 때 고정적인 자료형 대신 실제 자료형으로 대체되는 타입 파라미터를 받아 사용하는 방법이다. 타입 파라미터에 특..
'클래스의 상속'을 통해 클래스를 '확장'하는 법을 배운 바 있다. 클래스를 다형성의 관점에서 살펴보면 어떨까? 목이 말라서 아무 음료나 마셔도 좋을 때도 있지만 기호에 맞춰 콜라, 커피 등 원하는 음료를 선택할 때도 있다. 이때 콜라를 콜라 자체로도 볼 수 있지만, 음료라는 특성으로도 볼 수 있도록 만드는 것이 다형성의 개념이다. 음료 클래스와 이를 상속받는 콜라 클래스가 있다면, 콜라 인스턴스를 만들 때는 상속관계의 수퍼 클래스인 음료의 내용을 담는 공간에 콜라의 내용을 담는 공간이 추가되어 생성된다. 이렇게 만들어진 콜라 인스턴스는 음료 자료형 변수에 저장하면 음료의 기능만 사용하게 되고, 콜라 자료형 변수에 저장하면 콜라의 기능까지 모두 사용할 수 있다. 이때 콜라 인스턴스를 음료 변수에 담는 행..
1. Object 기존에 배웠던 클래스는 단지 인스턴스 객체를 만들기 위한 '틀'이기 때문에, 내부에 있는 속성이나 함수를 사용하려면 실체가 되는 인스턴스 객체를 만들어야 했다. var a = Person("박보영", 1990) 여러개의 인스턴스가 필요하지 않고 단 하나의 객체만으로 공통적인 속성과 함수를 사용해야 하는 코드에서는 굳이 Class를 쓸 필요없이 object를 사용하면 된다. object는 생성자 없이 객체를 만들어내며, Singleton Pattern을 언어차원에서 지원하는 것이다. (Singleton Pattern : 클래스의 인스턴스를 단 하나만 만들어 사용하도록 하는 코딩 아키텍처 패턴) object는 인스턴스를 생성하지 않고 그 자체로 객체이기 때문에 생성자는 사용하지 않는다. 별..