Android App Track⛺-012

MunkiJeon·2024년 6월 20일

TIL

목록 보기
29/59
post-thumbnail

TIL (Today I Learned)

오늘 공부한거!

  • Kotlin 5강 - Kotlin 심화

    • 업 캐스팅(자식클래스를 부모클래스의 자료형으로 객체 생성)
    ```kotlin
    fun main() {
        println("몇 마리를 생성하시겠습니까?")
        var count = readLine()!!.toInt()
        var birds = mutableListOf<Bird>()
    
        for(idx in 0..count-1) {
            println("조류의 이름을 입력해주세요")
            var name = readLine()!!
    
    				// as Bird는 생략가능
            birds.add(Sparrow(name) as Bird)
        }
        println("============조류 생성완료============")
        for(bird in birds) {
            bird.fly()
        }
    }
    
    open class Bird(name: String) {
        var name: String
    
        init {
            this.name = name
        }
    
        fun fly() {
            println("${name}이름의 조류가 날아요~")
        }
    }
    
    class Sparrow(name: String): Bird(name) {
    
    }
    ```
  • 다운 캐스팅(부모클래스를 자식클래스의 자료형으로 객체 생성)

    fun main() {
        println("몇 마리를 생성하시겠습니까?")
        var count = readLine()!!.toInt()
        var birds = mutableListOf<Bird>()
    
        for(idx in 0..count-1) {
            println("조류의 이름을 입력해주세요")
            var name = readLine()!!
    
            birds.add(Sparrow(name) as Bird)
        }
        println("============조류 생성완료============")
        for(bird in birds) {
            bird.fly()
        }
        // 다운캐스팅 오류
        // Sparrow는 Bird가 가져야할 정보를 모두 가지고 있지 않기 때문임
    //    var s1:Sparrow = birds.get(0)
    }
    
    open class Bird(name: String) {
        var name: String
    
        init {
            this.name = name
        }
    
        fun fly() {
            println("${name}이름의 조류가 날아요~")
        }
    }
    
    class Sparrow(name: String): Bird(name) {
    
    }
  • Pair를 활용해서 두 개의 인스턴스 리턴

    		var chicken = Chicken()
        var eggs = chicken.getEggs()
        var listEggs = eggs.toList()
        
    //    first, second로 관리
    //    var firstEgg = eggs.first
    //    var secondEgg = eggs.second
        
        // 리스트로 관리
        var firstEgg = listEggs[0]
        var secondEgg = listEggs[1]
    
        println("달걀의 종류는 ${eggs} 입니다.")
        println("리스트 달걀의 종류는 ${listEggs} 입니다.")
        println("첫번째 달걀의 종류는 ${firstEgg} 입니다.")
        println("두번째 달걀의 종류는 ${secondEgg} 입니다.")
    }
    
    class Chicken {
        fun getEggs(): Pair<String, String> {
            var eggs = Pair("달걀", "맥반석")
            return eggs
        }
    }
  • Triple를 활용해서 세 개의 인스턴스 리턴

    fun main() {
        var chicken = Chicken()
        var eggs = chicken.getThreeEggs()
        var listEggs = eggs.toList()
        
    //    first, second, third로 관리
    //    var firstEgg = eggs.first
    //    var secondEgg = eggs.second
    //    var eggTime = eggs.third
        
        // 리스트로 관리
        var firstEgg = listEggs[0]
        var secondEgg = listEggs[1]
        var eggTime = listEggs[2]
    
        println("달걀의 정보는 ${eggs} 입니다.")
        println("리스트 달걀의 정보는 ${listEggs} 입니다.")
        println("첫번째 달걀의 종류는 ${firstEgg} 입니다.")
        println("두번째 달걀의 종류는 ${secondEgg} 입니다.")
        println("달걀은 ${eggTime}에 나왔습니다.")
    }
    
    class Chicken {
        fun getTwoEggs(): Pair<String, String> {
            var eggs = Pair("달걀", "맥반석")
            return eggs
        }
    
        fun getThreeEggs(): Triple<String, String, Int> {
            var eggs = Triple("달걀", "맥반석", 20230101)
            return eggs
        }
    }
    • Kotlin의 Scope Function 종류
      • let function의 활용
        • 중괄호 블록안에 it으로 자신의 객체를 전달하고 수행된 결과를 반환해요

          		var strNum = "10"
          
              var result = strNum?.let {
                  // 중괄호 안에서는 it으로 활용함
                  Integer.parseInt(it)
              }
          
              println(result!!+1)
      • with function의 활용
        • 중괄호 블록안에 this로 자신의 객체를 전달하고 코드를 수행해요

        • this는 생략해서 사용할 수 있으므로 반드시 null이 아닐때만 사용하는게 좋아요

          		var alphabets = "abcd"
          
              with(alphabets) {
          //      var result = this.subSequence(0,2)
                  var result = subSequence(0,2)
                  println(result)
              }
      • also function의 활용
        • 중괄호 블록안에 it으로 자신의 객체를 전달하고 객체를 반환해줘요

        • apply와 함께 자주 사용해요

          fun main() {
              var student = Student("참새", 10)
          
              var result = student?.also {
                  it.age = 50
              }
              result?.displayInfo()
              student.displayInfo()
          }
          
          class Student(name: String, age: Int) {
              var name: String
              var age: Int
          
              init {
                  this.name = name
                  this.age = age
              }
          
              fun displayInfo() {
                  println("이름은 ${name} 입니다")
                  println("나이는 ${age} 입니다")
              }
          }
      • apply function의 활용
        • 중괄호 블록안에 this로 자신의 객체를 전달하고 객체를 반환해줘요

        • 주로 객체의 상태를 변화시키고 바로 저장하고 싶을때 사용해요

          fun main() {
              var student = Student("참새", 10)
          
              var result = student?.apply {
                  student.age = 50
              }
              result?.displayInfo()
              student.displayInfo()
          }
          
          class Student(name: String, age: Int) {
              var name: String
              var age: Int
              
              init {
                  this.name = name
                  this.age = age
              }
              
              fun displayInfo() {
                  println("이름은 ${name} 입니다")
                  println("나이는 ${age} 입니다")
              }
          }
      • run function의 활용
        • 객체에서 호출하지 않는 경우의 예시
          		var totalPrice = run {
                  var computer = 10000
                  var mouse = 5000
          
                  computer+mouse
              }
              println("총 가격은 ${totalPrice}입니다")
        • 객체에서 호출하는 경우의 예시
          • with와 달리 null체크를 수행할 수 있으므로 더욱 안전하게 사용가능해요

            fun main() {
                var student = Student("참새", 10)
                student?.run {
                    displayInfo()
                }
            }
            
            class Student(name: String, age: Int) {
                var name: String
                var age: Int
                
                init {
                    this.name = name
                    this.age = age
                }
                
                fun displayInfo() {
                    println("이름은 ${name} 입니다")
                    println("나이는 ${age} 입니다")
                }
            }
    • 확장함수 (기존에 정의된 클래스에 함수를 추가하는 기능)
    fun String.double(): String {
      return this.repeat(2)
    }
    
    println("Hello".double()) // HelloHello

Today Review

  • 임시저장 후 밀려 있던 내용이라 생략
profile
공장자동화와 웹 개발을 핥아 먹다 앱 개발로 전향한 개발자의 키보드의 낡은 키캡⛑️

0개의 댓글