개발(Android) 78

[Kotlin syntax] Collection Functions (1)

[코틀린 문법] 컬렉션 함수 (1) forEach, filter, map, any, all, none, first/find, last/findLast, count // Collection Function(컬렉션 함수) // // list, set, map 같은 컬렉션 또는 배열에 일반 함수 또는 람다 함수 형태를 사용해 // for문 없이도 아이템을 순회하며 참조하거나 조건을 걸고, 구조의 변경까지 가능한 여러가지 함수 // 반복문 및 조건문 대체 가능 fun main () { val nameList = listOf("최연준", "최수빈", "최범규", "강태현", "휴닝카이") // forEach // // 전체 반환 nameList.forEach {print(it + " ")} println() //..

[Kotlin syntax] Collections (2) Set, Map

[코틀린 문법] 셋, 맵 Set // Set // // 리스트와 달리 순서가 정렬되지 않으며 중복이 허용되지 않는 컬렉션 // 인덱스로 위치 지정해 객체 참조하기 불가능 // contains로 객체가 set 안에 존재하는지를 확인하는 식으로만 사용 fun main () { val testSet1 = mutableSetOf("a", "b", "c") println(testSet1) // [a, b, c] // add로 데이터 추가 testSet1.add("d") testSet1.add("e") println(testSet1) // [a, b, c, d, e] // 중복을 자동으로 거르기 때문에 e는 한 번만 추가됨 testSet1.add("e") testSet1.add("e") testSet1.add("e..

[IntelliJ] Kotlin: [Internal Error] java.rmi.UnexpectedException: unexpected exception; nested exception is: com.intellij.util.io.PersistentEnumeratorBase$CorruptedException: PersistentEnumerator storage corrupted 파일경로

[인텔리제이] 인텔리제이 자체 문제인 듯, 클리닝 또는 리빌드 하면 된다고 함 문제 Kotlin: [Internal Error] java.rmi.UnexpectedException: unexpected exception; nested exception is: com.intellij.util.io.PersistentEnumeratorBase$CorruptedException: PersistentEnumerator storage corrupted C:\Users\shinyelee\AppData\Local\JetBrains\IdeaIC2021.3\compile-server\kotlin_study_acde2e50\targets\java-production\kotlin_study_380050b\kotlin\pro..

[Kotlin syntax] Data Class, Enum Class

[코틀린 문법] 데이터 클래스와 열거형 클래스 Data Class(데이터 클래스) // Data Class(데이터 클래스) // // 데이터를 다루는 데 최적화된 클래스 // 서버에서 받아온 데이터를 넣을 때 사용 fun main() { // 데이터 클래스에서 자동으로 구현하는 기능 // // 1. equals() { println("W") } Direction.EAST -> { println("E") } } val color = Color.GREEN // 초록 when(color) { Color.RED -> { println(Color.RED.colorName) } Color.GREEN -> { println(Color.GREEN.colorName) } Color.BLUE -> { println(Col..

[Kotlin syntax] Nested Class, Inner Class

[코틀린 문법] 중첩 클래스와 내부 클래스 Nested Class(중첩 클래스) fun main() { val test4 = Test4.Test4NestedClass() test4.testFun4() // TestFun4 } // Nested Class(중첩 클래스) // // 객체지향 / 캡슐화 // 외부 클래스의 내용을 공유할 수 없는 별개의 클래스 class Test4 { val tempText1 = "tempText1" class Test4NestedClass { fun testFun4() { println("TestFun4") // println(tempText1) // Kotlin: Unresolved reference: tempText1 } } } Inner Class(내부 클래스) fun ..

[Kotlin syntax] Arguments, Infix Functions

[코틀린 문법] 함수의 인자, 중위 함수 Default Arguments(기본 인자), Overloading(오버로딩) // OverLoading(오버로딩) // // 같은 스코프 안에서 같은 이름의 함수를 여러 개 만들 수 있는 기능 // 이름이 같고 파라미터의 자료형이 다르면 오버로딩 가능 // 이름이 같고 파라미터의 개수가 다르면 오버로딩 가능 // 이름이 같고 파라미터의 자료형과 개수가 같으면 오버로딩 불가능 fun main() { // 만약 기본 인자가 있다면 아래처럼 호출 가능 // read(x) // 기본 인자가 없음 read(7) // 숫자 7 입니다 read("감사합니다") // 감사합니다 // 꼭 모든 인자를 쓸 필요는 없음 // (count, destination 생략해도 됨) del..

[Kotlin syntax] Equality

[코틀린 문법] 변수의 동일성 // Equality(변수의 동일성) // // 내용의 동일성 // // a == b // 메모리상의 서로 다른 곳에 할당된 객체지만 내용이 같으면 동일하다고 판단함 // 코틀린의 모든 클래스가 내부적으로 상속받는 Any라는 최상위 클래스의 // equals() 함수가 반환하는 Boolean 값으로 판단 // 객체의 동일성 // // a === b // 서로 다른 변수가 메모리상의 같은 객체를 가리키면 동일하다고 판단함 fun main () { var a = Product("콜라", 1000) var b = Product("콜라", 1000) var c = a var d = Product("사이다", 1000) // 내용만 동일 println(a == b) println(a..

[Kotlin syntax] Null Safety

[코틀린 문법] null 처리 Nullability(널 가능성) // Nullability(널 가능성) // // null pointer exception 방지위해 if문으로 매번 조건 체크 -> 번거로움 // -> 연산자 사용 // Null-Safe Operator // // ?. // 참조 연산자를 실행하기 전에 먼저 객체가 null인지 확인 // -> 객체가 null이면 ?. 뒤에 따라오는 구문을 실행하지 않음 // Elvis Operator // // ?: // 객체가 null이 아니라면 그대로 사용 // -> null이면 ?: 뒤에 따라오는 객체로 대체 // Non-Null Assertion Operator // // !!. // 참조 연산자를 사용할 때 null 여부를 컴파일시 확인하지 않음 ..

[Kotlin syntax] String Formatting

[코틀린 문법] 문자열 가공하기 // String Format(문자열 가공) // // 유저가 입력한 데이터를 가공하거나 // 서버에서 가져온 데이터를 알맞게 가공해서 쓰거나 fun main() { val testString = "동해물과 백두산이 마르고 닳도록" println(testString[1]) println(testString[2]) // 해 // 물 val a = testString[1] val b = testString[2] println(a.toString() + b.toString()) // 해물 // [1]에서 시작, [3] 앞에서 자름 val splitString = testString.substring(1, 3) println(splitString) // 해물 // 전체 가져오기 ..

[Kotlin syntax] Collections (1) Lists

[코틀린 문법] 리스트 // List(리스트) // // 데이터를 모아 관리하는 콜렉션 클래스를 상속받는 서브 클래스(List, Set, Map) 중 가장 단순한 형태 // 여러 개의 데이터를 원하는 순서대로 넣어 관리하는 형태 fun main() { // List // // 생성시에 넣은 객체 대체/추가/삭제 불가능 // val a : List = listOf("사과", "딸기", "배") // 코틀린은 알아서 타입추론하기 때문에 // : List 즉 자료형 부분 생략 가능 val a = listOf("사과", "딸기", "배") println(a[1]) for (fruit in a) { print("${fruit}:") } println() // : List일 경우 자료형 아무거나 다 넣을 수 있음 ..

[Kotlin syntax] Generic

[코틀린 문법] 제너릭 // Generic(제너릭) // // 함수나 클래스를 선언할 때 고정적인 자료형 대신 // 실제 자료형으로 대체되는 타입 파라미터를 받아 사용하는 방법 // 타입 파라미터는 관례적으로 사용 // (여럿일 경우 T, U, V 등 알파벳 사용) // 제너릭을 특정한 수퍼 클래스를 상속받은 클래스 타입으로만 제한하려면 // 라고 쓰면 됨 fun main() { UsingGeneric(S()).doSing() UsingGeneric(Y()).doSing() // 시은이가 노래를 합니다 // 자윤이가 노래를 합니다 doSing(Y()) doSing(I()) // 자윤이가 노래를 합니다 // 아이사가 노래를 합니다 } fun doSing(t: T) { t.sing() } // 수퍼 클래스 ..

[Kotlin syntax] Polymorphism

[코틀린 문법] 클래스의 다형성 // Polymorphism(다형성) // fun main() { // Up-Casting(업캐스팅) // // 상위 자료형인 수퍼 클래스로 변환 // 별도의 연산자 필요 없음 // Down-Casting(다운캐스팅) // // 업캐스팅 된 인스턴스를 다시 하위 자료형으로 변환 // as is var a = Drink() a.drink() // 음료를 마십니다 var b: Drink = Coke() b.drink() // 음료 중 콜라를 마십니다 // b.washDishes() // Kotlin: Unresolved reference: washDishes // -> 다운캐스팅 필요 // is // // 변수가 자료형에 호환되는지를 먼저 체크한 후 변환해주는 캐스팅 연산자 ..

[Kotlin syntax] Observer Pattern, Anonymous Objects

[코틀린 문법] 옵저버 패턴과 익명 객체 Observer Pattern(옵저버 패턴) // Observer(옵저버) // // Listener(리스너)라고도 함 // 이벤트가 일어나는 것을 감시하는 감시자의 역할 // Event(이벤트) // // 함수로 직접 요청하지는 않았지만 시스템 또는 루틴에 의해서 발생하게 되는 동작 // (키의 입력, 터치의 발생, 데이터의 수신 등) // Callback(콜백) // // 이벤트를 넘겨주는 행위 // Observer Pattern(옵저버 패턴) // // 이벤트가 발생할 때마다 즉각 처리할 수 있게 만드는 프로그래밍 패턴 // 옵저버 패턴 구현에 2개 클래스(이벤트 발생 및 전달하는 클래스, 이벤트 수신하는 클래스) 필요 // 문제는 후자는 전자를 참조할 수 ..

[Kotlin syntax] Objects

[코틀린 문법] 오브젝트 Object(객체), Singleton Pattern(싱글톤/싱글턴 패턴) // Object(오브젝트) // // 객체를 한 개만 생성하도록 하며 전역으로 생성 가능 // 하나의 객체로 공통적인 속성과 함수를 사용해야 할 때 -> 클래스보다 오브젝트가 나음 // 싱글톤 패턴을 언어 차원에서 지원하는 것 // Singleton Pattern(싱글톤 패턴) // // 디자인 패턴(코드를 어떻게 짜는게 더 좋고, 어떤 방식으로 구성해야 유지보수가 쉬운가) 중 하나 // 클래스의 인스턴스를 단 하나만 만들어 사용하도록 하는 코딩 아키텍쳐 패턴 fun main() { // 오브젝트는 인스턴스를 생성하지 않음 // -> 오브젝트명.멤버명 형태로 사용 println(Counter.count)..

[Kotlin syntax] Scope Functions

[코틀린 문법] 스코프 함수 - 함수형 언어의 특징을 좀 더 편리하게 사용할 수 있도록 기본 제공하는 함수 apply // apply // // 인스턴스 생성 후 변수에 담기 전 초기화 과정 수행에 많이 사용 // 값을 반환하지 않고, 객체 구성에 대해 주로 사용 fun main() { // 인스턴스에 .apply 붙이고 람다함수 만듦 var a = Book("오마이걸의 Real Love", 10000).apply { // -> apply의 스코프 안에서 직접 인스턴스의 속성 및 함수 사용 title = "[초특가]" + title discount() } } class Book(var title: String, var price: Int) { fun discount() { price -= 2000 } }..

반응형