2024-01-17 TIL

agriades·2024년 1월 17일

devroid

목록 보기
4/6

14:17 Kotlin 깃북 마저 읽기 시작!

3. 새롭게 다루는 것들

젯팩(Jetpack) 라이브러리로 버전에 구애받지 않기!

  • 뷰 바인딩(ViewBinding)? 이건 뭔지 모르겠다. 예전에 쓰던 findViewById()보다 장점이 많단다.
  • 스레드(Thread), 코루틴(Coroutine)? 동시성 프로그래밍?
    하나의 스레드엔 여러 코루틴이 존재할 수 있단다. 음~ 그렇다니 그런가보다.

14:25 스트레칭, 마실 것을 좀 갖고 옴

14:52 오늘의 알고리즘 문제: 몫 구하기.
Kotlin에서 주의할 점은 Phyton과는 달리, 이미 설정된 변수의 타입에 따라 결과값이 결정된다는 것이다.

Phyton에서

num1 = 7
num2 = 3
print(num1/num2)

의 출력값은 2.3333333333333335가 된다. 하지만 Kotlin에선,

fun main() {
    var num1:Int = 7 //타입을 꼭 먼저 선언해 주어야 한다!
    var num2:Int = 3
    println(num1/num2)
} 

//Kotlin Playground에서 테스트해 볼 수 있다.

와 같은 식으로 항상 변수의 타입을 설정해야 한다.

15:05 다른 사람들의 코드카타 풀이 읽기. "num1 이 0 이상 100 이하의 범위를 가짐"을 표현할 수 있는 방식이 다양했다.

예시 1) &&를 쓰는 대신, ;로 문장을 끊고 한 줄에 '두 줄'의 코드를 쓸 수도 있나 보다.

0 <= num1 ; num1 <= 100

예시 2) 이거 참 마음에 든다! 직관적이고 보기 좋다. 다만, 코드를 쓰다가 왠지 점 갯수를 틀릴 것만 같다. 이름이 double dot 연산자란다. 정말 '점 두 개'! 미만이나 초과와 같은 조건을 포함시킬 때에는 쓰기 어렵겠군.

num1 in 0..100

15:10 범위를 판정하는 함수를 따로 정의하는 풀이도 있었다. SangHyun Moon님의 풀이를 복붙했다. 되게 안전하고 확실해 보인다! 처음 코드를 읽는 입장에선 좀 헷갈리지만 배울 점이 많아 보여 가지고 왔다.

class Solution {
    fun solution(num1: Int, num2: Int): Int {
        var answer: Int = 0

        Validator.validateInputRange(num1)
        Validator.validateInputRange(num2)

        answer = num1 / num2
        return answer
    }
}

object Validator {
    private const val PREFIX = "[ERROR] "

    fun validateInputRange(input : Int){
        require(input in 1 .. 100) {PREFIX + "1 부터 100 까지의 값을 입력해주세요."}
    }
}

에러 메시지는 아예 private constant 로 선언한 것을 확인할 수 있다.
어려운 점:

  • Validator란 이름으로 object를 만들고 그 안에 함수를 정의하면, 나중에 불러올 때 Validator.(함수이름) 이라고 써야 하는 것 같은데 지금 나에겐 좀 헷갈린다!
  • 코드 상으로는 Validator가 나중에 있어도 문제 없는 것으로 보아, 이게 전에 깃북에서 말한 이리 땡겨오고 저리 땡겨오고 효과인 것 같은데 어떻게 이게 되는 건지 이해가 아직 안 가서 어지럽다. 기계가 한번에 쫙 읽고 나서 그다음에 방 배정을 하는 걸까?

15:38 아직 HRD-net 수강신청에 오류가 뜨는 관계로 유튜브에서 아무 프로그래밍 강의 영상이나 보기로 했다. 휴, 내일은 되었으면 좋겠다.

Data Structures and Algorithms in 15 Minutes https://www.youtube.com/watch?v=oz9cEqFynHU

  • big O를 이용해, 테스트 전 많은 인풋을 감당할 수 있는지 대략 알 수 있단다.
  • binary search: 반반 쪼개면 빨리 찾아!
  • sorting... 사람들이 많이 연구해 봤는데 O(N logN)이 제일 영끌 속도랜다. 왠지 궁금쓰
  • array: 위아래가 있음
  • linked lists: 비상연락망
  • trees: 심즈 선택창
  • graph: 6다리 법칙, T map 네비게이션
  • hash maps: key - value 짝, 좋다고 함

16:04 배가 고파짐, 데이터 구조를 만들어낸 사람들은 방청소 개 빨리 할 것 같음.

profile
안드로이드 앱 개발 공부 시작!

1개의 댓글

comment-user-thumbnail
2024년 1월 19일

수영님 안녕하세요! 이충환 매니저입니다. Kotlin에서 변수 선언 시 초기화를 해준다면 꼭 변수 타입을 지정해 주지 않아도 괜찮습니다!

var i = 3
var i : Int = 3

두 가지 방법 다 사용할 수 있습니다.
하지만 파이썬과는 방식이 다르니 '정적 타입 언어' 와 '동적 타입 언어' 를 찾아보시고 비교해보시는 것도 좋을 것 같습니다!

답글 달기