분류 전체보기108 [Youtube DiMo] 22강. Null [22강] https://youtu.be/Ae_D4Wb8OhI 1. Null 처리 ?. : null safe operator - 만약 Null이 아니면(= 안전하다면) 실행 ?: : elvis operator - 만약 Null이면(=위험하면) 다른 옵션으로 바꿔서 실행 !!. : non-null assertion operator - 그냥 해줘 (에러날 수 있음) fun main() { var str : String? = null println(str?.length) println(str?:"default".length) println(str!!.length) } /* ?. : null safe operator ?: : elvis operator !!. : non-null assertion operator.. 코틀린 2022. 4. 29. [Youtube DiMo] 21강. 문자열 [21강] https://youtu.be/F9L6p48SVhI 1. 길이, 대소문자, 자르기/합치기 fun main() { var text1 = "Text.Kotlen.String" println(text1.length) println(text1.toLowerCase()) println(text1.toUpperCase()) var text2 = text1.split(".") println(text2) println(text2.joinToString()) println(text2.joinToString("-")) println(text1.substring(5..10)) } 2. 비어있는 문자열 알아보기 문자열은 문자가 나열되어 있고, "마지막에 null로 끝나는" 배열을 말합니다. 따라서 text1과 te.. 코틀린 2022. 4. 29. [Youtube DiMo] 20강. 리스트 [20강] https://youtu.be/g4crA-tGONA 1. 리스트 fun main() { val numbers = listOf(3, 1, 4, 7) var planet = mutableListOf("수성","금성","지구","화성") outList("숫자열", numbers) outList("행성", planet) planet.add("목성") outList("목성 추가", planet) planet.remove("지구") outList("지구 삭제", planet) planet.sort() outList("정렬", planet) planet.shuffle() outList("무작위 섞기(실행할 때마다 달라짐)", planet) } fun outList(sub : String, list : T).. 코틀린 2022. 4. 29. [Youtube DiMo] 19강. 제네릭 [19강] https://youtu.be/fhunk_9LOOQ 1. 함수단위의 제네릭(Generic) 제네릭은 함수는 입력 타입을 유동적으로 변경해주는 효과가 있습니다. 아래 처럼 여러타입을 각각 만들어 줄 필요가 없습니다. 문법 : fun 함수명(인자들 : 제네릭기호) {바디} fun main() { log("my") log(1) log('가') log(3.14) } fun log(a:T){ println(a) } fun logInt(a:Int) {} fun logFloat(a:Float) {} fun logString(a:String) {} fun logChar(a:Char) {} my 1 가 3.14 1-2. Overload Overload기법을 이용하여, 한개로 만든 것 처럼 할 수도 있습니다. .. 코틀린 2022. 4. 29. [Youtube DiMo] 18강. 다형성 [18강] https://youtu.be/dgcLsnJodu8 1. 다형성 객체의 생성문법을 아래와 같이 볼 때 : var a : A = A() 생성요청 생성핸들 : 그릇 = 실제크기 실제크기를 많이 만들어서, 그릇에 담을 수 있을 만큼만 담는 것은 문제가 안되는데, 쥐꼬리 만큼 만들어서, 기대한 그릇에 담다가 마는 행위는 용납할 수 없습니다. 아래 예시에서 마지막 구문은 에러가 나기 때문에 주석처리 하였습니다. fun main() { var a = A(1) a.whoAmI() var b = B(2) b.whoAmI() var c : A = B(3) c.whoAmI() // var d : B = A(4)// Error // d.whoAmI() } open class A(var value : Int) { .. 코틀린 2022. 4. 29. [Youtube DiMo] 17강. 익명객체와 옵저버 패턴 [17강] https://youtu.be/GxZWb5Whq7w 1. Callback구조 예를들어, 센서업체에서 모듈을 제작해서 팔 때, 또는 운영체제를 만들 때, (해당기능에 대하여) 제작자는 해당 함수가 언젠가 호출되어야 할 것은 알지만, 누가 언제 호출 할 지는 알 수 없고, 미래에 사용자가 정해지면 비로소 사용자와 제작자의 호출관계가 성립됩니다. 이 때, 제작자는 나중에 호출 될 함수이름만 정해주고, 미래에 사용자가 해당 함수를 자기 입맛에 맞게 정의해서 사용하는 구조를 Callback구조라고 합니다. (반대말 Call) 시나리오. 제작자가 Sensor를 개발할 때, Sensor는 무언가 측정하여 측정된 5번 중 1번씩 계속 Listener에게 보내주도록 설정 하였다. 나중에 사용자가 Sensor를.. 코틀린 2022. 4. 29. [Youtube DiMo] 16강. Object [16강] https://youtu.be/QPqzmKu0Y_k 1. object (소문자/클래스 아님) object = Singleton Patton 또는 Static Var에 해당 fun main() { println(myObj.score) myObj.plus(10) println(myObj.score) } object myObj{ var score = 0 fun plus(x : Int) { score += x } } 0 10 2. companion object fun main() { var a = menu("짜장") var b = menu("짬뽕") a.vote() a.vote() a.vote() b.vote() b.vote() println("${a.name} : ${a.count}") printl.. 코틀린 2022. 4. 29. [Youtube DiMo] 14-15강. 고차함수(함수포인터)와 람다함수/스코프함수 [14강] https://youtu.be/mvfU-7tdLWs [15강] https://youtu.be/QGDWWL6qA3I 1. 고차함수(함수포인터) 변수는 특정 값이 특정 메모리에 저장된 형태라면, 함수는 특정 동작(값의 연속)이 특정 메모리에 저장된 형태이므로, 특정 메모리를 호출한다는 입장에서 보면 함수를 가져오는 것은 당연한 개념 문법1 (정의) : (인자) -> 리턴 예) (String) -> Unit // 문자열을 입력으로 받아 return이 없는 형태 문법2 (함수의 주소) : ::함수명 예) function fun main() { B(::A) } fun A(str : String) { println("A : $str") } fun B(f : (String)->Unit) { f("Call .. 코틀린 2022. 4. 29. [Youtube DiMo] 12-13강. Scope, 접근제어자 [12강] https://youtu.be/q7GV68jKLVM [13강] https://youtu.be/ewrozSyi8kE 1. 참조하기 물리적 분류 : project > module > file 논리적 분류 : package 문법 : 패키지 정의할 때 : (파일 첫줄에) package 패키지명 불러올 때 : import 패키지명 2. scope 변수, 함수의 생애 규칙1. 변수, 함수가 존재한다면 참조할 수 있다. 규칙2. 선언과 함께 탄생, 중괄호 닫힘("}")과 함께 소멸한다. (그러므로 패키지 스코프는 소멸 할 수 없다.) var a = 10 // 패키지 스코프 fun main() { val x = X() // 패키지 스코프 a 출력 println(a) x.p() // 패키지 스코프 a 출력 p.. 코틀린 2022. 4. 29. [Youtube DiMo] 10-11강. 상속(오버라이딩, 추상화) https://youtu.be/Mpn-kGFxB84 https://youtu.be/P3Dp7YRwD_E 1. 상속 기존의 코드에 기능을 조금만 수정하여 새로운 기능의 단위를 만들어 내는 작업 상속 문법 : 1. 상속가능 키워드 open이 부모 클래스에서 선언되어야 함. 2. class 자식클래스(속성들) : 부모클래스(속성들) {바디} fun main() { var a = Animal("나비", 3, "고양이") var b = Dog("흰둥이", 2) a.whoAmI() b.whoAmI() } open class Animal(var name : String, var age : Int, var type : String){ fun whoAmI() { println("$name / $age / $type")}.. 코틀린 2022. 4. 29. [Youtube DiMo] 8-9강. 클래스 https://youtu.be/oF3oV98JJuY https://youtu.be/Rdrg-_FnsEQ 1. 클래스 기본구조 클래스란 속성(변수)와 함수가 합쳐진 구조입니다. 문법 : class 클래스명(속성1, 속성2) {함수1, 함수2} 참조시에 참조연산자(마침표:.)를 이용한다. (예 : 소속.속성, 서울.강남) fun main() { var a = person("홍길동", 20) a.selfIntroduce() a.age = 30 a.selfIntroduce() } class person(var name : String, var age : Int){ fun selfIntroduce() { println("안녕하세요. 저는 ${age}살 ${name}입니다.") } } 안녕하세요. 저는 20살 홍길.. 코틀린 2022. 4. 29. [Youtube DiMo] 7강. 흐름제어와 논리연산자 https://youtu.be/gMuxnwDYKhc 1. break 문 소속된 루프를 종료함 fun main() { for(i in 1..10) { println(i) if(i==3) break } } 1 2 3 2. continue 문 소속된 루프에선 현재 루프만 건너뜀 fun main() { for(i in 1..10) { println(i) if(i==3) continue //break에서 continue로 변경 } } 1 2 3 4 5 6 7 8 9 10 3. label (@) 여러개의 반복문을 한 번에 이탈하고자 할 때, 레이블을 이용해서 한 번에 이탈 할 수 있다. fun main() { loop@for(i in 2..9) for(j in 1..9) { if(i==4) break@loop pr.. 코틀린 2022. 4. 29. 이전 1 2 3 4 5 ··· 9 다음