본문 바로가기

Language/Kotlin

(30)
[Kotlin] 함수의 다양한 기능 오버로딩 : 같은 스코프 안에서 같은 이름의 함수를 여러 개 만들 수 있는 기능. 함수의 이름이 같더라도 파라미터의 타입이나 개수가 다르면 서로 다른 함수로 동작한다. * 파라미터의 이름만 다르고 자료형과 개수가 동일하다면 오버로딩을 할 수 없다. fun same(a: Int, b: Int) fun same(x: Int, y: Int) fun main(){ read(7) // 숫자 7 입니다 read("감사합니다") // 감사합니다 } fun read(x: Int){ println("숫자 $x 입니다") } fun read(x: String){ println(x) } default arguments : 파라미터를 받아야 하는 함수이지만 별다른 파라미터가 없더라도 기본값으로 동작 fun main(){ de..
[Kotlin] null 처리와 동일성의 확인 null check null 상태로 속성이나 함수를 쓰려고 하면 null pointer exception이 발생하기 때문에 nullable 변수를 사용할 때 null 체크 없이 코드가 컴파일 되지 않는다. var sample: String? = null if(sample != null) println(sample.toUpperCase()) null 체크를 하기 위해 일일히 if문으로 조건을 체크하는 대신 좀 더 편리한 방법? ?. (null safe operator) : 참조연산자를 실행하기 전에 먼저 객체가 null인지 확인부터 하고 객체가 null이라면 뒤따라오는 구문을 실행하지 않는다. sample?.toUpperCase() ?: (elvis operator) : 객체가 null이 아니라면 그대로 ..
[Kotlin] 문자열 함수 val test1 = "Test.Kotlin.String" // 문자열 길이 println(test1.length) // 18 // 대소문자 변환 println(test1.toLowerCase()) // test.kotlin.string println(test1.toUpperCase()) // TEST.KOTLIN.STRING // 특정 문자열을 기준으로 문자열 분할 // * Java와 달리 정규식이 아닌 일반 문자열을 넣어도 동작 val test2 = test1.split(".") println(test2) // [Test, Kotlin, String] // 문자열이 들어가 있는 배열을 다시 하나의 문자열로 합침 println(test2.joinToString()) // Test, Kotlin, Str..
[Kotlin] 컬렉션(1) 리스트 리스트는 데이터를 모아 관리하는 컬렉션 클래스를 상속받는 서브 클래스 중 가장 단순한 형태로, 여러 개의 데이터를 원하는 순서로 넣어 관리하는 형태이다. 리스트에는 두 가지가 있다. List : 생성 시에 넣은 객체를 대체, 추가, 삭제 할 수 없음 MutableList : 생성 시에 넣은 객체를 대체, 추가, 삭제가 가능 리스트 생성 listOf(1, 2, 3) mutableListOf("A", "B", "C") MutableList에서는 요소의 추가, 변경, 삭제, 무작위 섞기, 정렬 가능 요소의 추가 : add(데이터) / add(인덱스, 데이터) 변경 : list[인덱스] = 데이터 삭제 : remove(데이터) / removeAt(인덱스) 무작위 섞기 : shuffle() 정렬 : sort() ..
[Kotlin] 제너릭 클래스 A와 A를 상속받은 클래스 B가 있을 때, 이 두 클래스의 인스턴스를 공용으로 사용하는 하나의 함수에 파라미터로 받으려면? fun castingExam(var a: A) 수퍼클래스인 A의 자료형으로 받으면 B를 넣어도 A로 캐스팅 되어, 두 클래스 모두 함수의 파라미터로 사용할 수 있다. 하지만 캐스팅 연산을 거치는 것은 프로그램의 속도를 저하시킬 수 있다는 단점이 있다 → 제너릭을 사용하면 성능 높일 수 있다!! 제너릭: 클래스나 함수를 선언할 때 고정적인 자료형 대신 실제 자료형으로 대체되는 타입 파라미터를 받아 사용하는 방법 (클래스나 함수에서 사용하는 자료형을 외부에서 지정) 타입 파라미터의 이름은 클래스 이름과 규칙이 같지만 일반적으로 ‘Type’의 이니셜인 ‘T’를 사용하는 것이 관례이..
[Kotlin] 클래스의 다형성 Drink 클래스와 이를 상속받은 Cola 클래스가 있다면 Cola의 인스턴스를 만들 때는 Drink의 내용을 담는 공간에 Cola의 내용을 담는 공간이 추가되어 생성된다. var a: Drink = Cola() Drink를 담는 변수에 저장하면 Drink의 기능만 사용하게 된다. → Up-Casting : 상위 자료형인 수퍼클래스로 변환 var b: Cola = Cola() *타입추론 기능으로 Cola 자료형은 생략 가능 Cola를 담는 변수에 저장하면 Cola의 기능까지 모두 사용할 수 있다. Down-Casting: Up-Casting된 인스턴스를 다시 하위 자료형으로 변환 다운캐스팅은 별도의 연산자 필요 - as : 변수를 호환되는 자료형으로 변환해주는 캐스팅 연산자 var a: Drink = C..
[Kotlin] 익명객체와 옵저버 패턴 옵저버 : 이벤트가 일어나는 것을 감시하는 감시자 ex. 안드로이드 키의 입력, 터치의 발생, 데이터의 수신 등 함수로 직접 요청하지 않았지만 시스템 또는 루틴에 의해서 발생하게 되는 동작을 ‘이벤트’라고 부르며 이 이벤트가 발생할 때마다 즉각적으로 처리할 수 있도록 만드는 프로그래밍 패턴을 옵저버 패턴이라고 부른다. 옵저버 패턴을 구현할 때는 두 개의 클래스가 필요하다. 이벤트를 수신하는 클래스 (class A) 이벤트를 발생 및 전달하는 클래스 (class B) 어떻게 통신? B에서 이벤트가 발생할 때 A에 있는 이벤트를 처리하는 함수를 호출하여 알려준다. → 문제 : A의 필요에 따라 B의 인스턴스를 생성하여 사용하기 때문에 A는 B를 직접 참조할 수 있지만 B는 A를 참조할 방법이 없다. → 해결..
[Kotlin] 오브젝트 Object : 생성자 없이 객체를 직접 만들어 냄 기존에 배웠던 class는 단지 인스턴스 객체를 만들기 위한 틀이기 때문에 내부에 있는 속성이나 함수를 사용하려면 생성자를 통해 실체가 되는 인스턴스 객체를 만들어야 했다. 그러나 여러 개의 인스턴스 객체가 필요하지 않으며 단 하나의 객체만으로 공통적인 속성과 함수를 사용해야하는 코드에서는 class를 쓸 필요 없이 Object를 사용하면 된다. (Singleton Pattern을 언어 차원에서 지원하는 것) fun main(){ println(Counter.count) // 0 Counter.countUp() Counter.countUp() println(Counter.count) // 2 Counter.clear() println(Counter.co..