본문 바로가기
728x90

코틀린28

코틀린 Companion object, 자바 static 차이 자바 static static이 붙은 변수와 메소드를 각각 클래스 변수, 클래스 메소드라 부른다. static이 붙지 않은 클래스 내의 변수와 메소드는 각각 인스턴스 변수, 인스턴스 메소드라 한다. static이 붙은 멤버는 클래스가 메모리에 적재될 때 자동으로 함께 생성되므로 인스턴스 생성 없이도 클래스명 다음에 점(.)을 쓰면 바로 참조할 수 있다. Companion object는 static이 아니고 객체이다 코틀린 companion object는 static이 아니며 사용하는 입장에서 static으로 동작하는 것처럼 보일 뿐입니다. companion object는 MyClass클래스가 메모리에 적재되면서 함께 생성되는 동반되는 객체이다. (클래스와 동반자 느낌) Companion object의 멤.. 2022. 10. 27.
실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링) 2022-10-12 완강 2022. 10. 12.
코틀린 set package set fun main() { val set1 = setOf(1,5,10,5,10) println("set1 = ${set1}") val set2 = mutableSetOf() println("set2 = ${set2}") for (item in set1) { println("item = ${item}") } println("set1.size = ${set1.size}") println("set2 = ${set2}") set2.add(10) set2.add(20) set2.add(30) set2.addAll(listOf(40,50,60)) println("set2 = ${set2}") set2.remove(30) println("set2 = ${set2}") val toList = set2.. 2022. 5. 26.
코틀린 map package map fun main() { val map1 = mapOf("key1" to 10,"key2" to 20,"key" to 30) println("map1 = ${map1}") val map2 = mutableMapOf() println("map2 = ${map2}") val map3 = mutableMapOf("key1" to 10,"key" to 11.11) println("map3 = ${map3}") println("map1.get(\"key1\") = ${map1.get("key1")}") println("map1[\"key2\"] = ${map1["key2"]}") println("map1.size = ${map1.size}") println("map1.keys = ${map1... 2022. 5. 26.
코틀린 리스트 package list fun main() { // 불변형 리스트 val list1 = listOf(10,20,30,40,50) val list2 = listOf("문자열1", "문자열2","문자열3") println("list1 = ${list1}") println("list2 = ${list2}") val list3 = mutableListOf() val list4 = mutableListOf("문자열1", "문자열2","문자열3") println("list3 = ${list3}") println("list4 = ${list4}") val list5 = emptyList() println("list5 = ${list5}") val list6 = listOfNotNull(10,20,30,null,40,.. 2022. 5. 26.
코틀린 문자열 package string fun main() { val str1 = "안녕하세요" println("str1[0] = ${str1[0]}") println(str1.equals("안녕하세요")) val str2 = str1.substring(1..3) println("str2 = ${str2}") val str3 = "HELLO world" val str4 = "hello world" println("str3.compareTo(str4) = ${str3.compareTo(str4)}") println("str3.compareTo(str4,true) = ${str3.compareTo(str4,true)}") println("str3.contentEquals(str4) = ${str3.contentEqual.. 2022. 5. 26.
코틀린 배열 package array fun main() { val array1 = arrayOf(10, 20, 30, 40, 50) println("array1 = ${array1}") println("array1.contentToString() = ${array1.contentToString()}") val array3 = intArrayOf(10, 20, 30, 40, 50) val array4 = doubleArrayOf(11.11, 22.22, 33.33) val array5 = arrayOf("문자열1","문자열2") val array6 = Array(5, { 0 }) println("array6 = ${array6.contentToString()}") val array7 = Array(5) { it * .. 2022. 5. 26.
코틀린 고차함수 package highorderfunc // 매개변수로 함수를 받는 함수 fun main() { val t1 = fun(x1: Int, x2: Int): Int { return x1 + x2 } testFunc1(t1,100,200) testFunc1(fun(x1:Int,x2:Int):Int{ return x1 - x2 },100,200) val lambda1 = {x1:Int, x2:Int -> x1 *x2} testFunc1(lambda1,100,200) testFunc1({x1:Int,x2:Int -> x1/x2},200,100) val t2 = testFunc2() val r2 = t2(100,200) println("r2 = ${r2}") val t3 = testFunc3() val r3 = t.. 2022. 5. 26.
코틀린 infix 함수를 연산자처럼 사용할수있음 package infixfunc fun main() { val v1 = 100 add2 50 } infix fun Int.add2(a1:Int) : Int{ return this + a1 } 2022. 5. 26.
코틀린 확장함수 package extentionfuc fun main() { val str1="abcd" println("str1.getUpperString() = ${str1.getUpperString()}") } // 기존 클래스에 메서드 추가 // 실제 변경된 자바코드 확인해보면 새로운 함수 생성 클래스에 메소드 추가 아님 fun String.getUpperString() : String{ return this.toUpperCase() } 2022. 5. 26.
코틀린 함수형 프로그래밍 package functionprograming fun main() { val r1 = testFun1(100, 200) println("r1 = ${r1}") val r2 = testFun2(100, 200) println("r2 = ${r2}") val r3 = testFun3(100, 200) println("r3 = ${r3}") val lambda1 : (Int,Int) -> Int = {a1:Int,a2:Int -> a1+a2} val r4 = lambda1(100,200) println("r4 = ${r4}") val lambda2 = {a1:Int,a2:Int -> a1+a2} val r5 = lambda2(100,200) println("r5 = ${r5}") val lambda3: (I.. 2022. 5. 25.
코틀린 연산자 오버로딩 package operatoroverloading fun main() { val num1 = 100 val num2 = 200 val a1 = num1+num2 println("a1 = ${a1}") val a2 = num1.plus(num2) println("a2 = ${a2}") val obj1 = TestClass(100, 200) val obj2 = TestClass(1000, 2000) val obj3 = obj1 + obj2 println("obj3.a1 = ${obj3.a1}") println("obj3.a2 = ${obj3.a2}") val obj4 = obj1 - obj2 println("obj3.a1 = ${obj4.a1}") println("obj3.a2 = ${obj4.a2}") }.. 2022. 5. 25.
코틀린 Sealed 열거형은 특정 값을 의마하는 상수들을 모와 관리하는 개념 Sealed 객체를 모아 관리하는 개념 package sealed fun main() { val v2 = Number2.SealedOne(1) val v3 = Number2.SealedTwo(2) checkNumber2(v2) checkNumber2(v3) } enum class Number(val num: Int) { ONE(1),TWO(2) } fun checkNumber(a1: sealed.Number) { when (a1) { Number.ONE -> println("1입니다") Number.TWO -> println("2입니다") } } sealed class Number2{ class SealedOne(val a1:Int,val a2:I.. 2022. 5. 25.
코틀린 열거형 package enums fun main() { printDirection(Direction.WEST) printDirection(Direction.EAST) val west:Direction = Direction.WEST printDirection(west) printNubmer(Number.ONE) } enum class Direction { NORTH,SOUTH,WEST,EAST } enum class Number(val num: Int,val str:String){ ONE(1,"일"),TWO(2,"이"),THREE(3,"삼") } fun printDirection(a1: Direction) { when (a1) { Direction.NORTH -> println("북쪽") Direction.SOU.. 2022. 5. 25.
코틀린 캐스팅 package casting fun main() { val obj1:SubClass1 = SubClass1() val obj2:SubClass2 = SubClass2() // 부모에 담는다 // 스마트 캐스팅 발생 val super1:SuperClass1 = obj1; // 스카트 캐스팅 발생 val inter1:Inter1 = obj2 //자식 클래스로 변경하는 경우 as 사용 // as : 지정된 클래스 타입으로 강제 변환하는 연산자(연관된 클래스만!!) super1 as SubClass1 inter1 as SubClass2 super1.subMethod1() inter1.subMethod2() //-------------------------------------- //일반적으로 is 사용하면 tr.. 2022. 5. 25.
코틀린 null 처리 package nullsafe fun main() { testFun1("문자열") //컴파일 에러가 아닌 런타임 에러이다 // testFun1(null) testFun2("문자열") testFun2(null) testFun3("문자열") testFun3(null) testMethod1("안녕하세요") testMethod1(null) testMehod2("안뇽") testMehod2(null) } // !! 널을 허용하지 않는 변수에 널을 허용하는 변수를 담아준다 // 되도록 사용하지 말자 fun testFun1(str:String?){ val value1:String = str!! println("value1 = ${value1}") } // ? 연산자 // null일 경우 뒤에 값 default로 사용.. 2022. 5. 25.
코틀린 익명 중첩 클래스 package innerclass // inner에서는 outer 접근 자유롭다 // outer에서는 inner 접근 어려움 fun main() { val obj1 = Outer1() val obj2 = obj1.Inner() obj2.innerMethod2() val t1 = TestClass2() t1.testMehtod1() val t3 = object :TestClass1(){ override fun testMehtod1() { println("익명 중첩 클래스의 testMehod1") } } t3.testMehtod1() // 인터페이스는 생성자 없음 val t4 = object :TestInter1{ override fun interMethod1() { println("익명 중첩 클래스의 in.. 2022. 5. 25.
코틀린 Generic package generic fun main() { val t1 = TestClass1() t1.testMethod1(100) val t2 = TestClass1() t2.testMethod1("dfdf") val t3 = TestClass2(100) t3.testMethod(200) } class TestClass1 { fun testMethod1(a1:T){ println("a1 = ${a1}") } } class TestClass2(var a1: T){ fun testMethod(a2: T) { println("a1 = ${a1}") println("a2 = ${a2}") } } // 불변성 // 제네릭 타입에 부모 클래스를 담을수 없다 class TestClass5() // 공변성 // 제테릭 타.. 2022. 5. 25.
코틀린 DataClass package dataclass // DataClass 매개체의 데이터를 관리하는 용도로 사용하는 클래스 // abstract, open, sealed, inner 클래스로 정의할 수 없다. // 반드시 주 생성자를 가지고 있어야 한다. fun main() { val obj1 = TestClass1(100, 200) val obj2 = TestClass2(100, 200) var obj5 = TestClass1(100, 200,300) var obj6 = TestClass1(100, 200,300) if (obj5 == obj6) { println("같은객체") } else{ println("다른 객체") } var obj7 = TestClass2(100, 200,300) var obj8 = TestCl.. 2022. 5. 25.
코틀린 Companion java static 이다 package companion //companion object 객체 생성하여 접근 불가능 fun main() { val obj1 = TestClass() println("obj1.a1 = ${obj1.a1}") obj1.testFun1() println("TestClass.a2 = ${TestClass.a2}") TestClass.testFun2() } class TestClass { var a1 = 100 companion object{ var a2 = 1000 fun testFun2() { println("testFun2") // 멤버변수 사용 x //println("a1 = ${a1}") } } fun testFun1(){ println("testFun1") print.. 2022. 5. 24.
코틀린 지연 초기화 package lazyinit fun main() { val obj = TestClass1() println("obj.a1 = ${obj.a1}") println("obj.a2 = ${obj.a2}") obj.testMethod1() println("obj.a3 = ${obj.a3}") println("obj.a4 = ${obj.a4}") } class TestClass1 { var a1:Int = 100 var a2:Int // 선언시 초기화를 하지 않아도 됨 // primitive 타입은 지원 X // val 선언 x lateinit var a3:String //4를 사용을 할때 초기화 val a4:String by lazy { println("a4 init") "문자열2" } init { a2 = .. 2022. 5. 24.
코틀린 property package property fun main() { val testClass = TestClass(100, 200) println("testClass.a1 = ${testClass.a1}") println("testClass.a2 = ${testClass.a2}") testClass.a1=101 println("testClass.a1 = ${testClass.a1}") val testClass2 = TestClass2() println(testClass2.v3) testClass2.v3=201 } // var getter, setter 둘다 사용 가능 // val getter만 사용 가능 class TestClass(var a1:Int,val a2:Int) class TestClass2{ var v1:.. 2022. 5. 24.
코틀린 상속 부모 클래스는 open 붙여줘야한다. package inherit fun main() { val subClass1 = SubClass1() println("subClass1 = ${subClass1.subMember1}") subClass1.subMember1() println("subClass1.superMember1 = ${subClass1.superMember1}") subClass1.superMethod1() val subClass2 = SubClass2() var subClass3 = SubClass3(1) } open class SuperClass1 { var superMember1 = 100 fun superMethod1() { println("supercalss1 의 메소드 입니다.") }.. 2022. 5. 24.
코틀린 생성자 package constructor fun main() { val obj1 = TestClass1() val obj2 = TestClass2() val obj3 = TestClass2(100, 200) val obj4 = TestClass3(1,2) val obj6 = TestClass5(1, 2) val obj7 = TestClass5(100) } class TestClass1 { init { println("객체 생성되면 자동으로 동작") } } class TestClass2 { var v1:Int = 0 var v2:Int = 0 constructor(){ println("매개변수 없는 생성자") } constructor(v1: Int, v2: Int) { println("매개변수 2개 생성자") .. 2022. 5. 24.
코틀린 반복문 for문 package iter fun main() { val a1 = 1..10 for (item in a1) { println("item = ${item}") } var a2 = 1..10 step 2 for (item in a2) { println("item = ${item}") } // val a3 = 10..1 val a3 = 10 downTo 1 for (item in a3) { println("item = ${item}") } val a4 = 10 downTo 1 step 2 for (item in a4) { println("item = ${item}") } } 2022. 5. 24.
코틀린 when package `when` fun main() { val a1 = 2 when (a1) { 1 -> println("a1 = 1") 2 -> { println("a1 = 2") } 3 -> println("a1 = 3") else -> println("값 없음") } val a2 =3 when (a2) { 1,2 -> println("1, 또는 2 입니다") 3,4 -> println("3, 또는 4 입니다") } val a5 =5 when (a5) { in 1..3 -> println("1~3 사이") in 4..6 -> println("4~6 사이") } println("setValue(1) = ${setValue(1)}") } fun setValue(a1: Int) = when(a1){ 1 -> ".. 2022. 5. 24.
코틀린 함수 package func fun main() { test1() test2(100,11.1) test3(100) // 기본값이 설정된 함수에만 사용 가능 test3(a2=3.3) println("test4(1,2) = ${test4(1,2)}") test5() test7() test7(1) test8() } fun test1() { println("etst1호출") } fun test2(a1: Int, a2: Double) { println("test2 호출") println("a1 = ${a1}") println("a2 = ${a2}") } fun test3(al: Int = 0, a2: Double = 0.0) { println("test3 호출") println("al = ${al}") println(.. 2022. 5. 24.
코틀린 변수와 자료형 var 수정가능 변수 val 수정 불가능 변수 변수 선언시 ? 작성시 null 허용 ? 작성 안하면 null 불가 var a5:Int = 500 var a6:Int? = null 변수 뒤 !! 붙이널 널허용하지않는다는 표시 컴파일 에러나지 않는다 var a5:Int = 500 var a6:Int? = null var a8:Int = a6!! 2022. 5. 24.
728x90