우테코 8

ListView 는 ViewHolder 재사용을 못하는 거 아니었나요??? (아님) feat 우테코

우테코에서는 "과속, 과식하지 말것" 이라는 권장 목표가 있다.즉, 수업에서 다루는 것부터 공부하고 미션에 적용해보고 나서, 그 다음 기술을 사용하는 것이다. 이번 미션은 '영화 티켓 예매'이다. 오른쪽과 같은 화면을 `RecyelrView`가 아니라 `ListView`로 구현해야 한다. 나는 리스트뷰를 사용해본 적이 없다. 그렇다고, 이 미션에서 리사이클러뷰를 사용할 수는 없다.그래서 진행 전부터 난관이 예상되었다. 이번 글에서는 리스트뷰를 통해 화면을 구성하고뷰홀더 패턴을 적용, 뷰홀더를 뷰의 tag 에 캐싱하도록 리팩토링.뷰의 tag 에 캐싱하는 게 아닌, 다른 객체에 캐싱하도록 리팩토링.참고로 MVVM 이 아닌, MVP 패턴을 적용했고,viewBidning, dataBinding 을 사용하지 않고..

의인화 & 정보 전문가 패턴 & 리팩터링 _feat(우테코 - 로또)

우테코 2단계 level 2 로또 미션 중에 나는 매우 재미있는 경험을 했다. 이전에는 책에서 봤던 이론적인 내용을 말로는 표현할 수 있었지만, 나의 코드로는 적용하기가 어려웠다. 나는 무언가를 안다는 것은 아래 세가지 단계로 나뉜다고 생각한다. (내 생각이 아니라, 어디서 봤던 것 같기도 하고...) 개념을 알고 설명한다. 그 개념을 똑같이 사용할 수 있다. 그 개념을 다르게 활용할 수 있다. 나는 책에서 보았던 내용을 1단계 정도밖에 알지 못하는 것 같았다. 내가 읽었던 책은 조영호 저자의 객사오('객체지향의 사실과 오해') 와, '오브젝트 - 코드로 이해하는 객체지향 설계', 그리고 마틴 파울러 저자의 '리팩터링 2판' 이다. 의인화 - 객사오 이 책의 66, 67 페이지에서는 아래와 같은 내용이 ..

[Kotlin] 방어적 복사와 깊은 복사, 얕은 복사 (feat. 우테코)

Mutablility(가변성)과 방어적 복사, 혹은 방어적 프로그래밍은 공부할 때 봤던 코틀린 인 액션 책에 "6.3.2 읽기 전용과 변경 가능한 컬렉션"에서 잠깐 다룬다.(이 글에서도) 하지만 뭔가 부족한 느낌이 있었는데, 마침 우테코 수업에서 이 내용을 다루었다!! 모든 코드는 Kotlin 으로 작성된다. 얕은 복사(Shallow copy)와 깊은 복사(Deep Copy), 그리고 방어적 복사(Defensive Copy) 순서로 공부해보자. 얕은 복사(Shallow copy) & 깊은 복사(Deep copy) 먼저 방어적 복사 이전에 얕은 복사와 깊은 복사를 알아야 한다. 얕은 복사(Shallow copy) 얕은 복사: 객체의 주솟값을 복사한다. 복사된 객체의 인스턴스는 원본 객체의 인스턴스와 같은 ..

Kotlin 2024.03.08

디자인 패턴 - 전략 패턴(Strategy pattern)과 디자인 패턴에 대한 고찰_feat(우테코 - 자동차 경주)

우테코 1단계 level 1 의 자동차 경주 미션 리팩토링을 진행하고, 미션 리뷰어에게 전략 패턴에 대한 이야기를 들었다. 나는 사실 전략 패턴에 대해 잘 알지 못했다. 그런데 전략 패턴을 이미 구현했다는 피드백을 보고 신기함을 느꼈다. 어떻게 제대로 모르는 것을 구현할 수 있지? 이 궁금증을 시작으로 전략 패턴을 더 자세히 공부하기로 했다. 전략 패턴(Strategy Pattern)? '알렉산더 슈베츠' 저자의 '디자인 패턴에 뛰어들기' 라는 책에서는 이렇게 설명하고 있다. (이 글은 위 링크 글을 보고 공부하여 정리한 내용으로 원문을 참조하시는 것을 추천한다.) 전략 패턴은 알고리즘들의 패밀리를 정의하고, 각 패밀리를 별도의 클래스에 넣은 후 그들의 객체들을 상호교환할 수 있도록 하는 행동 디자인 패..

코드의 네이밍과 코딩 컨벤션은 왜 중요한가?

우테코 수업을 듣다가 코드에서 효과적인 네이밍이 왜 중요한가? 라는 질문을 들었다. 효과적인 네이밍은 왜 중요한가? 모두들 흔히 좋은 네이밍으로써 코드의 가독성과 이해도를 향상시키고 유지보수성을 높이는데 도움이 된다고 말한다. 하지만 이것에 대해 다시 왜? 냐고 물으면 쉽게 입이 떼어지지 않았다. 좋은 네이밍이 중요한 이유 Eddy 님의 글에서는 아래처럼 말한다. 프로그래밍은 문제 해결이 전부가 아니다. 프로그래밍은 다른 사람과의 커뮤니케이션이고 협업이다. 내가 만든 코드를 읽는 것은 컴퓨터 뿐만이 아니라 '다른 프로그래머들'이, 그들과 다를 바 없는 '미래의 나' 이다. 그래서 코드는 그 사람들에게 이 프로그램이 어떤 동작을 하는지(어떤 책임을 갖는지)를 명료하게 전달해야 한다. 또 우테코 코치 제이슨..

[우테코 6기 - 안드로이드] 프리코스 3주차 로또 회고와 냄새나는 내 코드

3주차 미션은 로또 게임이다. 요구사항들은 아래 링크에서 확인할 수 있다. https://github.com/woowacourse-precourse/kotlin-lotto-6 GitHub - woowacourse-precourse/kotlin-lotto-6: 로또 미션을 진행하는 저장소 로또 미션을 진행하는 저장소. Contribute to woowacourse-precourse/kotlin-lotto-6 development by creating an account on GitHub. github.com 이번 미션에서는 아래와 같은 요구사항이 추가되었다. 함수 또는 메서드의 길이가 15라인을 넘어가지 않도록 구현한다. 함수(또는 메서드)가 한 가지 일만 잘 하도록 구현한다. `else` 를 지양한다. ..

[우테코 6기 - 안드로이드] 프리코스 2주차 자동차 경주 회고

2주차 미션은 자동차 경주이다. 기능에 대한 요구사항은 아래 링크에서 볼 수 있다. https://github.com/woowacourse-precourse/kotlin-racingcar-6 GitHub - woowacourse-precourse/kotlin-racingcar-6: 자동차 경주 미션을 진행하는 저장소 자동차 경주 미션을 진행하는 저장소. Contribute to woowacourse-precourse/kotlin-racingcar-6 development by creating an account on GitHub. github.com 이전 미션과는 다르게 새로 추가된 요구사항들이 있었다. 요구사항은 아래와 같았다. 메서드의 indent depth 를 2까지만 허용한다. 함수(또는 메서드)..

[우테코 6기 - 안드로이드] 프리코스 1주차 숫자야구 회고와 오브젝트

23년 10월 19일 (목)부터 시작한 우아한 테크 코스의 프리코스가 4주가 지나고, 11월 15일(수) 에 끝이 났다. 저번 기수인 5기 때는 프리코스를 3주동안 3개의 미션을 진행했다고 했지만, 이번 6기에는 4주동안 4개의 미션을 진행했다. 현재 이 글을 쓰고 있는 시점은 우테코 프리코스가 모두 종료한 시점이다. 미션이 모두 종료했으니 이제 1주차 미션부터 회고록을 작성하면서 배운 내용과 경험, 감정들을 정리해보고자 한다. 우테코에 참여하게 된 계기는 학교 동기의 친구의 추천이었다. 우테코는 객체지향의 정수를 배울 수 있으며 프리코스 때부터 관련 설계에 대해 많은 것을 배울 수 있었다 했다. 그래서 그 친구가 추천한 책인 '오브젝트 코드로 이해하는 객체지향 설계' 를 읽으면서 프리코스를 진행했다. ..