미션2. 로또 학습LOG

hyunji·2023년 2월 27일
0

이번 로또 미션을 진행하면서 받았던 피드백을 기반으로 학습로그를 작성해본다.

우선 이번 피드백을 통해 새로 배웠던 것들을 중심으로 삼는다.
1. stream 함수 활용
2. associateWith 사용
이렇게 2가지가 있다.

1. 컬렉션 함수 사용

  • 코틀린에서는 스트림 대신 이와 유사한 역할을 하는 함수들을 표준 라이브러리에서 제공한다. 이를 활용하면 컬렉션에 포함된 자료들을 손쉽게 다룰 수 있다.

컬렉션 함수 예시

  1. map() : 컬렉션 내 인자를 다른 값 or 타입으로 변환할 때 사용
    • mapIndexed() : 컬렉션 내 포함된 인자의 인덱스 값을 변환 함수 내에서 사용할 떄 사용
  2. groupBy() : 컬렉션 내 인자들을 지정한 기준에 따라 분류하여 맵 형태로 결과 반환
  3. filter() : 컬렉션 내 인자들 중 주어진 조건과 일치하는 인자만 걸러주는 역할
  4. take() : 컬렉션 내 인자들 중 앞에서 take() 함수의 인자로 받은 개수만큼만을 인자로 갖는 리스트 반환
    • takeLast() : take() 함수와 반대로 뒤에서부터 적용해 반환
    • takeWhile() : 첫 번째 인자부터 시작하여 주어진 조건을 만족하는 인자까지를 포함하는 리스트를 반환
  5. drop() : take() 함수의 반대 역할. 조건을 만족하는 항목을 컬렉션에서 제외한 결과를 반환
  6. distinct() : 컬렉션 내에 포함된 항목 중 중복된 항목을 걸러낸 결과 반환 (equlas로 판단)
  7. zip() : 컬렉션 내의 자료들을 조합해 새로운 자료를 만들 때 사용. 기본 값으로는 조합된 결과를 Pair로 만듦.
  8. count() : 컬렉션 내 포함된 자료의 개수 반환
    이 외에도 다양한 함수가 존재한다...

이번 미션에서 배운 점

  • 이번 로또에서는 count와 take를 사용했다.
  • 피드백 받기 이전에는 subList()를 사용해 원하는 개수만큼의 컬렉션을 가져왔다. 하지만 코틀린에서 컬렉션을 쉽게 다룰 수 있게 해주는 함수가 있다는 피드백을 받고 해당 함수들을 찾아 처음 써봤다.

이랬던 코드가

val randomNumbers = (LottoNumber.getMinNumber()..LottoNumber.getMaxNumber()).shuffled().subList(LOTTO_MIN_SIZE, LOTTO_LIMIT_SIZE).sorted()

이렇게 변했다.

val randomNumbers = (LottoNumber.getMinNumber()..LottoNumber.getMaxNumber()).shuffled().take(LOTTO_SIZE).sorted()

  • take() 함수는 처음 써봤는데 확실히 간편했다.
  • 앞으로 코틀린에서 제공해주는 컬렉션 함수들을 더 공부하고 활용해야겠다는 생각을 했다.

2. AssociateWith() 활용

associate()란?

  • List를 Map 형태로 변형시킬 수 있음
  • associateWhth() : List를 전체 탐색하면서 List의 인자를 key로, 매개변수로 받은 valueSelector를 value로 설정해 Map<key, value>로 리턴함.

이번 미션에서 배운 점

  • associateWith를 배우기 전에는 직접 Map 리스트를 손수 하드코딩해 제작했다. 당연히 코드가 매우매우 너무너무 더러웠다.
  • 이를 해결하기 위해 enum class인 Rank의 값들을 불러온 후 associateWith를 통해 얘네를 키값으로 설정했다.
  • 매우 간편히 내가 원하는 Map 컬렉션을 생성할 수 있었다.

이랬던 내 코드가

var result = mutableMapOf(
        Rank.FIFTH to 0,
        Rank.FOURTH to 0,
        Rank.THIRD to 0,
        Rank.SECOND to 0,
        Rank.FIRST to 0
    )

이렇게 이쁘게 바뀌었다.

val winningResult = Rank.values().associateWith {
            rank ->
            lottos.count { rank == it.matchLotto(winningNumber.lotto, winningNumber.bonusNumber) }
        }

  • 위의 배운 점과 마찬가지로 코틀린에서 제공하는 여러 함수들의 활용성을 높여야겠다는 생각을 했다.

Log 마무리

  • 코틀린에 대해 친숙해져 가고 있는 중이지만 아직 갈길이 멀다는 것을 느낀다.
  • 그 전에는 수많은 for문과 while문 그리고 if문을 통해 코딩을 했다면 이제는 거기서 벗어나 다양한 코틀린 제공 함수들을 활용할 시간이다.
  • 이번주 미션에서 활용한 함수들뿐만 아니라 다른 다양한 함수들도 미리미리 친숙해져있어야 다음 블랙잭, 오목 미션 때 자유롭게 활용가능 할 것이다.
  • 앞으로 꾸준한 언어 공부를 생활화하자.

0개의 댓글