전체 글 171

[kotlin] 이터레이션 기초: while, for 루프

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. while 루프 코틀린에는 자바와 같은 문법의 `while` 과 `do-while` 루프가 있다. while (조건) { // 조건이 참인 동안 본문을 반복 실행 /* ... */ } do { /* ... */ } while (조건) // 맨 처음에 무조건 본문을 한 번 실행, 그 후 조건이 참인 동안 본문을 반복 실행 수에 대한 iteration: range(범위), progression(수열) 자바에서는 `for` 루프를 아래처럼 사용한다. `for (어떤 변수 i 를 초기화하는 식; 각 루프 후 조건 검사 ;변수 i를 루프를 한번 실행할 때마다 갱신)` 코틀린에서는 `for` 루프를 ..

Kotlin 2023.12.27

[Kotlin] enum & when & smart cast(스마트 캐스트)

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. enum 클래스 `enum` 은 soft keyword 라고 한다. `class` 앞에 붙을 때는 특별한 의미를 가지지만, 그렇지 않을 경우에는 일반 이름으로 사용이 가능하다. 반면에 `class` 는 그냥 keyword 이다. 그래서 클래스를 표현하는 변수 등을 정의할 때는 이름을 `class` 로 하지 못한다. 보통 `clazz` 또는 `mClass` 라고 정의한다. enum class Color( val r: Int, val g: Int, val b: Int // 상수의 프로퍼티를 정의 ) { RED(255, 0, 0), // 각 상수를 생성할 때 그에 대한 프로퍼티 값을 지정 ORA..

Kotlin 2023.12.27

[Kotlin] 클래스와 프로퍼티 기초

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 이번에는 클래스를 선언하는 기본 문법, 그리고 프로퍼티를 다룬다. JavaBean 클래스를 코틀린 코드로 보기 먼저 간단한 `JavaBean` 클래스 `Person` 을 봅시다. public class Person { private final String name; public Person(String name) { this.name = name; // 필드가 늘어날 수록 생성자 바디에 비슷한 코드가 반복적으로 들어간다. } public String getName() { return name; } } `Person` 클래스는 필드를 오직 `String` 타입의 `name` 만을 가진다. 만..

Kotlin 2023.12.27

[Kotlin] 함수와 변수 기초

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 간단한 Hello, World! 살펴보기 fun main(args: Array) { println("Hello, World!") } 매우 간단한 코드이다. 이 코드만으로도, 자바와 다른 코틀린 문법과 특성을 찾을 수 있다. `fun` 키워드를 사용하여 함수를 선언한다. 파라미터 이름 뒤에 그 파라미터의 타입을 쓴다. 함수를 최상위 수준에 정의할 수 있다. 자바와 달리 꼭 클래스 안에 함수를 넣을 필요가 없다. 배열도 일반적인 클래스와 똑같이 취급한다.(`Array`의 형태로) 자바와 달리 배열 처리를 위한 문법이 따로 존재하지 않는다. 자바의 `System.out.println` 대신, `..

Kotlin 2023.12.02

[우테코 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주차 미션부터 회고록을 작성하면서 배운 내용과 경험, 감정들을 정리해보고자 한다. 우테코에 참여하게 된 계기는 학교 동기의 친구의 추천이었다. 우테코는 객체지향의 정수를 배울 수 있으며 프리코스 때부터 관련 설계에 대해 많은 것을 배울 수 있었다 했다. 그래서 그 친구가 추천한 책인 '오브젝트 코드로 이해하는 객체지향 설계' 를 읽으면서 프리코스를 진행했다. ..

MVC 패턴을 다시 공부해보자

우아한 테크 코스의 프리코스에서 숫자 야구 게임 구현 단계를 진행하고 있었습니다. 이 때 따로 GUI 는 없고 콘솔을 통해서 입력과 출력을 받고 있었습니다. 저는 먼저 한 클래스에 모든 구현을 때려 넣은 후에 리팩토링하면서 각 객체에게 역할과 책임을 분리했습니다. 그런데 프리코스 커뮤니티에서 MVC 패턴에 대한 이야기가 나오더라구요..? 저는 안드로이드 프로젝트만 해왔기 때문에 당연히 따로 View 가 있는 패턴(MVC 나 MVVM 과 같이)을 사용할 생각을 못했었는데 말이죠. 그래서 MVC 패턴을 적용해서 구현한 코드를 리팩토링하려고 했습니다. 그런데 갑자기 조금씩 헷갈리더라군요.. 그래서 MVC 패턴을 어떤 프레임워크에 국한되지 않도록, 조금만 더 자세히 알아보려고 합니다. 참고로 이전에 MVC, M..

[안드로이드] 수명 주기 인식요소가 뭔데? - Lifecycle, LifecycleOwner

수명 주기 인식 구성요소. 안드로이드 개발자 공식 문서에서 Lifecycle-Aware Components 을 이렇게 번역하고 있습니다. 그런데 Lifecycle-Aware 컴포넌트가 정확히 뭘까요? Lifecycle-Aware 컴포넌트란? 먼저 정의부터 바로 하겠습니다. Activity 나 Fragment 같은 다른 컴포넌트의 `Lifecycle` 이 변경될 때 이에 대응하는 컴포넌트. 이 컴포넌트는 `lifecycleOwner` 의 상태 변화를 `observe` 해서 필요한 작업을 스스로 할 수 있다. (이때 컴포넌트는 안드로이드 component 만을 의미하는 게 아닌, 자신의 역할을 할 수 있는 컴포넌트를 의미함) 일반적인 패턴에서는 액티비티나 프래그먼트의 lifecycle 메서드 내에서 데이터를..

Android/Theory 2023.10.18

안드로이드 테스팅 (3-3) 코루틴 테스트 - viewModel 에서 디스패처 만들면?, DipatcherProvider, pauseDispatcher, resumeDispatcher

이전 글에서 이어집니다 https://sh1mj1-log.tistory.com/175 https://sh1mj1-log.tistory.com/176 https://sh1mj1-log.tistory.com/177 https://sh1mj1-log.tistory.com/178 안드로이드 테스트 코드를 배워보자 (3 - 2) - viewModelScope.launch 에서 테스트, 메인 디스패처 설정, 이전 글에서 이어집니다. https://sh1mj1-log.tistory.com/175 안드로이드 테스트 코드를 배워보자 (1) - liveData 테스트, 비동기 테스트 기본 안드로이드 앱을 개발할 때 여러 기업에서, 프로젝트에서 테스 sh1mj1-log.tistory.com 먼저 테스트할 ViewModel ..

Android/테스팅 2023.10.17