Kotlin/TIL

TIL (03.07)

내손은개발 🐾 2024. 3. 7. 21:12

CodeKata


64번 체육복 재풀이

class Solution {
    fun solution(n: Int, lost: IntArray, reserve: IntArray): Int {
        var lostList = (lost.sorted() - reserve.sorted()).toMutableList()
        var reserveList = (reserve.sorted() - lost.sorted()).toMutableList()

        for (i in reserveList) {
            if (lostList.contains(i - 1)) {
                lostList.remove(i - 1)
            } else if (lostList.contains(i + 1)) {
                lostList.remove(i + 1)
            }
        }
        
        return n - lostList.size
    }
}

 

 

 

 

 

Github 사용 강의


더보기

//브랜치 생성
git branch 브랜치이름

//브랜치 확인
git branch

//이상 시
q 눌러서 빠져나오기

//브랜치 이동(둘다 상관없음)
*git switch 브랜치이름
git checkout 브랜치이름

//브랜치 한 번에 생성 & 이동법
git switch -c 브랜치이름
git checkout -b 브랜치이름

//브랜치 합치기
1. git switch 최종브랜치이름
2. git merge 합칠브랜치이름
설명 : 최종브랜치(main)으로 가서 merge로 합칠 브랜치를 가져온다.
=====================================
//Pull Request

? git reset으로 되돌릴 수 있다.
따로 찾아서 공부해보길

1. git push origin 브랜치명

2. github에서 pull request 사용해서
허용누르고 합치기

3. git pull origin main
으로 땡겨오면 update된다.

//정리
1. 브랜치 생성 및 이동
2. 기능 개발 및 코드 저장
3. 코드 업록드 및 풀 리퀘스트
4. git에서 merge
5, git pull 로 업데이트하기



팀장의 역할(github에 처음올릴사람)
1. 폴더 생성
2. 초기 코드 작성(프로젝트 생성)
3. git init, add, commit
4. github 레포지토리 생성
5. github 업로드
6. git switch -c dev (dev는 테스트용으로 만들면 좋다)
7. git push origin dev
8. github에서 default 브랜치를 dev로 변경(설정에 있음)

팀원의 역할
1. 주소 복사해서 가져오기(git clone 주소 .)( . 필수)
2. 브랜치 개설 (git switch -c 재혁)
3. git add .
4. git commit -m "first coomit"
5. git push origin 재혁
6. 깃헙에서 풀리퀘스트 진행

전체 (권장)
[ git pull origin dev ] 로 받아와서 merge오류 확인하기

 

 

 

5-1 강의 정리

 


더보기

값.toInt() / 값.toDouble() / 값.toString()

업 캐스팅(자식 클래스 -> 부모클래스의 자료형으로 객체 생성) as 사용
다운 캐스팅(부모클래스 -> 자식클래스의 자료형으로 객체 생성) as 사용
-> 주의사항 : 자식이 부모가 가져야할 정보를 모두 가지고 있지 않을 때 사용 못함(부모에서 자식으로 강제로 바꾸는건 불가능하다.)

is키워드를 사용해서 자료형 타입 확인 가능

복수 데이터 리턴 방법
Pair, Triple

자기 자신의 객체를 효율적으로 전달해서 처리할 때
Scope Functions [let, with, also, apply, run]

let

fun <T, R> T.let(block: (T) -> R): R

- let 함수를 사용하면 객체의 상태를 변경할 수 있다.

    val person = Person("", 0)
    //let
    var resultIt = person.let {
        it.name = "John"
        it.age = 10
        it
    }

 - let 블럭 안에는 non-null만 들어올 수 있어서 non-null체크 시 유용하게 쓸 수 있다.

 


with

fun <T, R> with(receiver: T, block: T.() -> R): R

 - 함수 내에서 this를 사용하지 않고도 입력받은 객체의 속성을 변경할 수 있다.

    with(person){
        println(name)
        println(age)
    }
https://growth-coder.tistory.com/44

 

run

- 객체에서 호출하지 않는경우로 호출하는 경우가 있다.

 

객체에서 호출하는 경우의 예시

fun <T, R> T.run(block: T.() -> R): R

 

-with와 달리 null체크를 수행할 수 있으므로 더욱 안전하게 사용가능하다. 

- run은 확장 함수가 아니고, 블럭에 입력값도 없다. 따라서 객체를 전달받아서 속성을 변경하는 형식에 사용되는 함수가 아니다.

 - 어떤 객체를 생성하기 위한 명령문을 블럭 안에 묶음으로써 가독성을 높이는 역할을 한다. 

val person = Person("James", 56)
val ageNextYear = person.run {
    ++age
}

println("$ageNextYear")

 - person?.run -> 으로 with보단 run으로 사용해서 null처리 추천

 

객체에서 호출하지 않는 예시 

fun <R> run(block: () -> R): R
val person = run {
    val name = "James"
    val age = 56
    Person(name, age)
}

- 이 run은 확장 ㅎ마수가 인고, 블럭에 입력값도 없다. 따라서 객체를 전달받아서 속성을 변경하는 형식에 사용되는 함수가 아니다. 이 함수는 어떤 객체를 생성하기 위한 명령문을 블럭 안에 묶음으로써 가독성을 높이는 역할을 한다.

https://growth-coder.tistory.com/44

 

apply

fun <T> T.apply(block: T.() -> Unit): T

 

apply는 T의 확장 함수이고, 블럭 함수의 입력을 람다 리시버로 받았기 때문에 블럭 안에서 객체의 프로퍼티를 호출할 때 it이나 this를 사용할 필요가 없다. run과 유사하지만 블럭에서 return 값을 받지 않으며 자기 자신인 T를 반환한다는 점이 다르다.

val person = Person("", 0)
val result = person.apply {
    name = "James"
    age = 56
}

println("$person")

 

also

- it으로 자신의 객체를 전달하고 객체를 반환한다.

- apply와 함께 자주 사용한다.

 

Scope Functions 왜 사용하나?

https://growth-coder.tistory.com/44

기능자체로는 큰 차이가 없지만 영역 함수 안에 있는 코드들이 Student 클래스와 관련된 코드라는 것을 한눈에 확인할 수 있다.

 

 

 

일기

과제도 맘에 안들게 냈는데 시간을 너무 썼다....

정수 실수 상관없이 계산해도 한번에 잘 나오고 싶었는데 생각보다 예외처리할게 많았다.

과제를 통해 BigDecimal을 알게 되었는데 사용못했다.

계산기 과제는 나중에 따로 정리/리코딩해서 올릴예정

이제 Android 공부를 저녁에만이라도 할 수 있다면 할 예정./

 

'Kotlin > TIL' 카테고리의 다른 글

TIL (03.11)  (0) 2024.03.11
TIL (03.08)  (0) 2024.03.08
TIL (03.06)  (1) 2024.03.06
TIL (03.05)  (0) 2024.03.05
TIL (03.04)  (1) 2024.03.04