전체 글

우아한테크코스/Level 2

[Kotlin Collections API] reduce와 fold

💡 Intro 굉장히 아쉽게도 우테코 레벨2를 시작하고 정리하는 글의 첫 주제는 안드로이드가 아니라 코틀린 내용이다. 아마 레벨1에서 다하지 못한 코틀린에 대한 내용도 종종 올라올 것 같다. reduce reduce함수가 어떻게 구현되어 있는지 구경해보자. reduce 함수는 인자로 함수 하나를 받는다. 이 함수는 어떤 accumulate 작업을 할 것인지를 명시한다. reduce 함수는 accumulate 작업 시 첫 번째 원소로 시작한다. 비어있는 컬렉션에서 reduce 를 호출하면 exception 이 발생할 수 있기 때문에 만약 reduce를 호출하는 컬렉션이 비어있을 수 있다면 reduce대신 reduceOrNull을 쓰라고 한다. 앞에서 reduce는 함수 하나를 인자로 받는다고 했고, 코틀린..

우아한테크코스/Level 1 | Mission

[우테코] 오목 - 안드로이드, DB

💡 Intro 우테코 네 번째 미션이자 레벨1 마지막 미션 오목! 미루고 미루다 이제야 글을 쓰게 됐다. 시작하기 전에 4단계로 나뉘어있어서 겁을 좀 먹었지만 걱정했던 것만큼 어렵지는 않았던 미션이다. 렌주룰에서 금수를 찾는 알고리즘을 내가 직접 구현하지 않았기 때문에 그렇게 느꼈을 수도 있다. 만약 내가 직접 구현해야 했다면 ... 시간안에 끝낼 수 있었을까? 오목 우리가 익히 알고있는 오목을 콘솔에서 할 수 있도록 구현하는 미션이다. 어려운 요구사항은 없었다. 이전에 배운 것들을 최대한 적용해보는 시간으로 생각하라고 하셨다. ❗️ 페어 프로그래밍 (Step1&2) 해시와 페어가 되었다. 해시와는 온보딩을 함께 하기도 했고 레벨1 데일리 미팅도 같은 조였기 때문에 이미 꽤나 친한 사이다. (맞지?) 덕..

우아한테크코스/Level 1 | Mission

[우테코] 블랙잭 - 함수형프로그래밍

💡 Intro 세 번째 미션 블랙잭. 다른 미션들과 다르게 블랙잭이라는 게임에 대해 알고 있는 것이 굉장히 부족했고, 그래서인지 더 어렵게 느껴졌다. 나름 블랙잭 규칙에 대해 공부했고, 알고있다고 생각했는데 리뷰가 올 때마다 부족한 부분이 많았다는 것을 알게 되었다. 리뷰어님께 굉장히 죄송한 마음이다.. 블랙잭 게임 로또미션에서 배운 TDD, 일급컬렉션 등의 내용은 디폴트로 가져가고, 이외에 추가된 요구사항은 다음과 같다. 1. 모든 엔티티를 작게 유지한다. 2. 3개 이상의 인스턴스 변수를 가진 크래스를 사용하지 않는다. 3. 딜러와 플레이어에서 발생하는 중복코드를 제거해야 한다. 도메인 나무위키를 통해 블랙잭 도메인에 대해 간단하게 알아보자. 딜러에게 카드를 한 장씩 받아 21에 가까운 수를 만드는 ..

우아한테크코스/Level 1 | 정리

어댑터 패턴(Adapter Pattern)

우테코 마지막 미션 오목을 진행하면서 금수 알고리즘을 어떻게 해결해야 할지 고민이 많았다. 오목이 이렇게 규칙이 복잡한 게임인지 새삼 처음 알게되었다.. 어릴 때 하던 오목은 이런게 아니었는데..😢 Adapter 어탭터라는 단어는 잘 알고있을 것이다. 한국에서 사용하는 220V 충전기를 호주에서는 바로 사용할 수 없기 때문에 플러그 모양을 바꿔주는 어댑터가 필요하다. 조금 다르게 설명하면 어댑터는 소켓의 인터페이스를 플러그에서 필요로 하는 인터페이스로 바꿔준다고 할 수 있다. 기존 소프트웨어 시스템에 새로운 업체에서 제공한 클래스 라이브러리를 사용해야 한다고 가정해보자. 그 업체에서 사용하는 인터페이스가 기존 시스템에서 사용하는 인터페이스와 같을 수는 없을 것이다. 따라서 업체에서 제공하는 라이브러리를 ..

우아한테크코스/Level 1 | 정리

추상 클래스(abstract class) vs 인터페이스(interface)

❓추상 클래스 (abstract class) 추상 클래스란 클래스의 추상적인 부분(==공통적인 부분)을 모아놓은 클래스이며, 그 자체로 인스턴스화는 불가능한 클래스다. 왜 인스턴스화를 할 수 없을까? 완전하게 구현되어 있지 않으니까! 추상 클래스는 프로퍼티나 메서드를 abstract로 가지고 있을 수 있고, abstract로 된 프로퍼티나 메서드는 미완성된 부분이기 때문에 이 추상 클래스를 상속받는 클래스에서 반드시 완전하게 구현해주어야 한다. 코틀린에서 어떤 클래스의 상속을 허용하기 위해서는 크래스 앞에 open 변경자를 붙어야 한다. 그와 더불어 오버라이드를 허용하고 싶은 메서드나 프로퍼티 앞에도 open 변경자를 붙여줘야 한다. 하지만❗ 추상 멤버는 항상 열려있기 때문에 추상 클래스는 open 키워..

우아한테크코스/Level 1 | Mission

[우테코] 로또 - TDD, OOP

💡 Intro 온보딩때 진행한 자동차 경주 미션은 7일간 진행했고, 첫 미션이라 그런지 크게 어려운 느낌은 없었다. 두 번째 미션은 로또다. 이번 미션의 기간은 14일.. 그만큼 리뷰어님과의 핑퐁도 많았고 나에게는 어려운 부분이 굉장히 많았다. 하나씩 정리하면서 내 것으로 만드는 시간을 가져보면 좋을 것 같다. 💰 로또 미션 TDD 로또 미션을 진행하면서 새롭게 추가된 방법은 TDD다. TDD가 뭐냐고? 나도 잘 모른다. 누구세요? Test Driven Development(테스트 주도 개발)는 실패하는 단위 테스트를 작성하고 그 단위 테스트를 통과하도록 코드를 구현하고, 이 코드를 리팩토링하는 방식으로 개발하는 방법이다. TDD는 단순한 설계를 장려하고 자신감을 불어 넣어 준다는데 단순한 설계 장려는 ..

우아한테크코스/Level 1 | 정리

value class?

❓ value class and data class @JvmInline value class LottoNumber2(val number: Int){ init { require(number in 1..45) { "로또 번호는 1이상 45이하여야 합니다." } } } data class LottoNumber(val number: Int) { init { require(number in 1..45) { "로또 번호는 1이상 45이하여야 합니다." } } } LottoNumber, LottoNumber2 클래스는 숫자 하나를 감싸고있는 래퍼 클래스다. 이를 통해 가독성이 좋아지는 효과를 볼 수 있고, 원하는 값이 들어오지 않는 경우 예외를 날려줄 수 있다. 위에 작성한 코드를 디컴파일 해서 비교해보자. publ..

우아한테크코스/Level 1 | 정리

클래스 위임(Class Delegation): by 키워드 사용

💡 Intro Kotlin in Action의 말을 인용하면 시스템을 취약하게 만드는 문제는 보통 구현 상속에 의해 발생한다. 하위 클래스가 상위 클래스의 메서드 중 일부를 오버라이드하면 하위 클래스는 상위 클래스의 세부 구현 사항에 의존하게 되는데, 상위 클래스의 구현이 바뀌거나 상위 클래스에 새로운 메서드가 추가되면 하위클래스의 동작이 잘못될 수 있다. 즉, 하위 클래스가 상위 클래스에 대해 갖고있던 가정이 깨져서 코드가 정상적으로 동작하지 못하는 경우가 발생할 수 있다는 것이다. 코틀린은 이런 문제를 인식하고 기본적으로 클래스를 final로 취급하고 상속을 위해서는 open 키워드를 통해 열어두어야 한다. 열린 상위 클래스의 소스코드를 변경할 때는 open 키워드를 보고 "다른 클래스가 이 클래스를..

Krrong
노는게 제일 좋아