전체 글 241

TDD 기초 개념잡기 (테스트 용어, 종류)

테스트에는 다양한 테스트 종류가 있으며, 각각은 특정 목적과 범위에서 따라서 선택 및 수행되고 소프트웨어를 평가합니다. 종합적으로 모든 종류의 테스트를 조합하여 소프트웨어의 품질을 유지하고 개선하는 것이 일반적인 개발 방법입니다. 테스트 기초 용어 테스트 스위트(Test Suite) : 여러 테스트 케이스를 하나로 묶어서 실행하거나 구성하는 도구 여러 테스트를 그룹화하여 함께 실행하거나, 특정 기능 또는 모듈에 대한 모든 테스트를 한 번에 실행하는 데 사용됩니다. 여러 테스트 케이스를 그룹화하고 관리한다. 주로 테스트 프레임워크에서 지원되며, 큰 프로젝트에서 여러 모듈 또는 기능에 걸친 테스트를 효과적으로 관리할 수 있도록 도와줍니다. 테스트 케이스(Test Case) : 특정 입력 상태에서 특정 기능 ..

Android/TDD 2023.11.27

변수명, 함수명, 클래스명 잘 짓는 방법 (Clean code: 2ch Naming)

이름을 잘 짓는 규칙들 의도를 분명히 밝힌다. - 변수나 함수 드리고 클래스명은 변수(나 함수 드리고 클래스)의 존재 이유는? 수행 기능은? 사용 방법은? 이란 질문들에 답할 수 있어야 한다. - 주석이 필요하지 않는 수준이어야 함 ㄴ> Bad example) int d; // 경과 시간 ㄴㄴ> Good example) int elapsedTimeInDays; 그릇된 정보를 피하라 (= 이름에 그릇된 단서를 남기면 안된다.) - 유사한 개념은 유사한 표기법을 사용한다. - 기발한 이름, 특정 유머나 문화권의 농담은 피하고 명료하게 표현하라. - 이름에 다른 타입이 포함된 경우  ㄴ> Bad example) List가 아닌 userList  ㄴ> Bad example) 유닉스 플랫폼이나 변종이름인 hp..

Study Programming 2023.11.20

Android 테스트 구조/구성 개념잡기

테스트 필요성 사용자는 버튼을 누르는 것부터 기기에 정보를 다운로드하는 것에 이르기까지 다양한 수준에서 앱과 상호작용합니다. 따라서 반복적으로 앱을 개발할 때 다양한 사용 사례와 상호작용을 테스트해야 합니다. 테스트용 코드 구성 앱이 확장됨에 따라 서버에서 데이터를 가져오거나, => MockWebServer?? 기기 센서와 상호작용하거나, 로컬 저장소에 액세스하거나, => ??? 복잡한 사용자 인터페이스를 렌더링해야 할 수 있습니다. => ??? 앱 다양성을 고려하여 종합적인 테스트 전략을 수립해야 합니다. 반복적으로 코드 만들기 및 테스트 반복적으로 기능을 개발하는 경우 새 테스트를 작성하거나 기존 단위 테스트에 사례와 어설션을 추가하여 시작합니다. 새 기능을 디자인할 때 나타나는 책임 단위를 고려하여..

Android/TDD 2023.08.15

[어노테이션]@JvmInline

@JvmInline - Kotlin에서 사용되는 애노테이션 중 하나 - 인라인 클래스(inline class)를 정의할 때 사용됩니다. "인라인 클래스" ㄴ> 런타임 오버헤드 없이 새로운 데이터 타입을 만들어주는 Kotlin의 특징 중 하나입니다. 이 클래스는 런타임에서 실제 객체가 생성되지 않고 해당 타입의 값만 컨테이닝하는 역할을 수행합니다. - 주의1: 인라인 클래스의 생성자는 파라미터 하나만 받아야 합니다. - 주의2: 인라인 클래스는 상속을 지원하지 않습니다. @JvmInline 애노테이션은 이러한 인라인 클래스를 JVM에서 좀 더 효율적으로 다룰 수 있도록 도와주는 역할을 합니다. ㄴ> @JvmInline을 사용하면 인라인 클래스의 필드에 대한 접근이 메소드 호출로 변환되지 않고, 직접 필드에..

Android/Kotlin 2023.08.14

(찌이인한) 에스프레소 테스트 기초 개념

Hello, Espresso : Android UI 테스트를 작성을 지원해주는 라이브러리 기본사용 - 테스트 작성자에게 사용자가 애플리케이션과 상호작용(UI 요소를 찾고 상호작용)하는 동안 실행하는 작업의 관점에서 생각하도록 권장합니다. - 동시에 프레임워크가 애플리케이션의 활동 및 뷰에 직접 액세스하지 못하도록 방지합니다. 이러한 객체를 계속 보유하고 UI 스레드에서 벗어나 이러한 객체에 관해 작업하는 것이 테스트 취약성의 주요 원인이기 때문입니다. 따라서 getView() 및 getCurrentActivity()와 같은 메서드는 Espresso API에 표시되지 않습니다. ViewAction 및 ViewAssertion의 자체 서브클래스를 구현하여 뷰 관련 작업을 안전하게 실행할 수 있습니다. Esp..

반복문 또는 루프 (for, while, do-while)

- 같은 동작을 여러 번 반복하는 명령을 반복문 또는 루프(loop)라고 한다. for문 - 반복문 중 정해진 횟수만큼 반복하거나 어떤 범위 내 정수를 차례로 처리해야하는 경우 사용 - for 루프와 범위를 써서 처리 범위 - 범위 표현 : 포함최솟값..포함최댓값, 포함최솟값 until 미포함최댓값 - 범위를 만들면 for(변수 in 범위) 를 써서 표현합니다. while, do-while문 - 반복문 중 범위와 같이 어떤 값을 미리 정해진 규칙대로 원하는 만큼만 반복해야하는 경우 사용 - 루프를 끝내는 조건 사용에 주의 (끝나지 않으면 무한루프를 도는 리스크가 있다. while문 - 루프 시작 시 조건을 검사 do-while문 - 루프 끝낼 때 조건을 검사 - 최소 한 번은 루프 실행됨

Android/Kotlin 2023.08.12

if(if-expression, if-statement), when(when-expression, when-statement)

코틀린 if문 종류 - if-expression (if식) : 리턴값을 사용, 반드시 else가 있어야함! - if-statement (if문) : 리턴값을 쓰지 않고 실행할 문장 선택용 코틀린 when문 - 여러 조건에 대한 분기 처리 종류 - (when-expression, when-statement)은 if문과 종류 동일 // when-expression print( when(d) { 1 -> "one" 2 -> "two" else -> "greater than two" } ) // when-statement when(d) { 1 -> print("one") 2 -> print("two") else -> print("greater than two") } 표현 - 어떤 값을 기준으로 분기 처리 whe..

Android/Kotlin 2023.08.12

Kotlin 부호 없는 정수타입 (Unsigned Integers)

경우에 따라 도메인 모델에서 양수만 나타내야 할 수도 있으니, Kotlin 1.3부터 ​​Kotlin은 이 요구 사항을 수용하기 위해 부호 없는 정수를 지원합니다. 타입 UByte: 8비트 부호 없는 정수 (0부터 255까지의 값 표현) UShort: 16비트 부호 없는 정수 (0부터 65535까지의 값 표현) UInt: 32비트 부호 없는 정수 (0부터 4294967295까지의 값 표현) ULong: 64비트 부호 없는 정수 (0부터 18446744073709551615까지의 값 표현) 사용 - u/U 접미사를 제공 val explicitULong = 4204uL - u/U 만 사용 시 정수 타입추론됨 val uByte: UByte = 4204u val uShort: UShort = 4204u val ..

Android/Kotlin 2023.08.12

UUID, 객체의 참조주소, 객체의 hashCode(+ equals()와 사용) 정의

UUID, 객체의 참조주소, 그리고 hashCode >> 각각 다른 개념이고, 서로 다른 용도로 사용됨 1. UUID (Universally Unique Identifier): 범용 고유 식별자를 나타내는 값입니다. 128비트 숫자로 구성되며, 일반적으로 무작위로 생성됩니다. 고유성이 보장되기 때문에 동일한 UUID가 동시에 생성되는 일은 거의 없습니다. 식별자로 사용되어 객체 또는 엔티티를 유일하게 식별하는 데 사용될 수 있습니다. 2. 객체의 참조주소 객체의 참조주소는 해당 객체의 메모리상의 위치를 나타내는 값입니다. 객체를 생성하면 해당 객체는 메모리에 할당되고, 참조변수를 통해 해당 객체의 주소를 참조할 수 있습니다. 참조주소는 JVM 내에서 해당 객체를 식별하기 위해 사용됩니다. 객체의 참조주소..

카테고리 없음 2023.05.25

안드로이드 프로젝트의 xml에서 다크모드 여부에 따라 다른 이미지를 보여줄 수 있나요?

안드로이드 프로젝트의 xml에서 다크모드 여부에 따라 다른 이미지를 보여줄 수 있나요? 네, 안드로이드에서는 다크모드 여부에 따라 다른 이미지를 보여줄 수 있습니다. 이를 위해서는 android:src 대신 app:srcCompat을 사용하고, android:src에서 사용하는 이미지 리소스 대신 drawable-night 폴더에 다크모드 이미지 리소스를 추가해야 합니다. 아래는 예시 코드입니다. xmlCopy code 위 코드에서는 android:src 대신 app:srcCompat 속성을 사용하여 이미지를 설정하고 있습니다. 이는 appcompat-v7 라이브러리에서 제공하는 벡터 이미지 지원을 사용하기 위해 사용하는 것입니다. 또한, drawable-night 폴더에 다크모드 이미지 리소스를 추가할..

Android 2023.03.26

안드로이드 프로젝트의 클린 아키텍처의 프로젝트 모듈 구성

안드로이드 프로젝트에서 클린 아키텍처를 적용할 때는 일반적으로 다음과 같은 모듈 구성을 채택합니다. Domain 모듈: 앱의 핵심 비즈니스 로직이 담긴 모듈로, 가장 순수한 형태의 코드를 포함합니다. 도메인 모듈은 안드로이드 프레임워크나 라이브러리에 의존하지 않으며, 단순히 앱의 비즈니스 규칙과 도메인 객체만을 포함합니다. Data 모듈: 앱의 데이터 소스를 추상화하는 모듈입니다. 이 모듈은 로컬 데이터 소스(예: SQLite), 원격 데이터 소스(예: REST API) 등 데이터를 처리하는 방식에 따라 여러 하위 모듈로 구성될 수 있습니다. 데이터 모듈은 도메인 모듈과 안드로이드 프레임워크 사이를 이어주는 매개체 역할을 하며, 데이터 소스에서 받아온 데이터를 도메인 객체로 변환하여 반환합니다. Pres..

Android 2023.03.25

[Navigation] Navigation (개념 및 구성요소 : graph, navhost, controller, destination, action, safe args)

이건 또 왜 번역 '탐색'일까 차라리 '네비' 그 자동차 '네비' 개념이 더 와닿겠어...ㅠㅠ 제발 destination을 '대상'이라고 표시하지마요 님아 Actions 을 '작업'이라고 표시하지마요 읽는 내내 너무 헷갈려...ㅠㅠ navigate 1.동사 (지도 등을 보며) 길을 찾다[방향을 읽다] => 화면을 찾는다 => 화면 이동한다 2.동사 (바다·강 등을) 항해하다 3.동사 (힘들거나 복잡한 상황을) 다루다[처리하다] Navigation이란? - "여러 Fragment 들을 포함한 하나의 Activity가 있는 앱"을 위해 설계됨 ㄴ> Fragment ( 각 Activity별로 자체 NavigationGraph가 있다. Safe Args 란? - 화면 navigate를 위해 Safe Args G..

Android/Jetpack 2023.02.26

안드로이드 Build config 3/3 (signingConfigs)

이전 포스팅이 존재합니다. 1편 : https://nemomemo.tistory.com/187 2편 : https://nemomemo.tistory.com/188 이 블로거의 혼란을 야기하므로 용어는 영어로 사용하고자 합니다. 더보기 빌드 변형 = build variant 빌드 유형 = build types 제품 버전 = product flavors 버전 차원 = flavor dimension 소스 세트 = source sets 서명 구성 = signing configuration = signing settings 키 저장소 = keystore private key = 비공개 키 종속 = dependencies 서명 = signing API 수준 = API level signing configuratio..

안드로이드 Build config 2/3 (source sets)

이전 포스팅이 존재합니다. https://nemomemo.tistory.com/187 이 블로거의 혼란을 야기하므로 용어는 영어로 사용하고자 합니다. 더보기 빌드 변형 = build variant 빌드 유형 = build types 제품 버전 = product flavors 버전 차원 = flavor dimension 소스 세트 = source sets 종속 = dependencies 서명 = signing API 수준 = API level Source sets - (정말 의미 그래로) 소스(resource, source code, ...)들의 셋트를 일컫는다. build variants별 '별도 source sets' 설정하기 1. 공통 source sets : Android 스튜디오는 기본적으로 ma..

build.gradle에 간편하게 versionName과 versionCode 명시하기

build.gradle에 변수를 선언하고 수식을 사용해 versionName과 versionCode 명시하기 - 별 건 아니지만 stackoverflow에 아래와 같이 "변수를 선언하고 수식을 사용해 versionName과 versionCode를 선언하는 방식"이 있길래 (앱 단) build.gradle defaultConfig { ... def majorVersion = 2 def minorVersion = 1 def patchVersion = 1 versionCode majorVersion * 10000 + minorVersion * 100 + patchVersion versionName "${majorVersion}.${minorVersion}.${patchVersion}" ... } ▽ - 금번 ..

안드로이드 Build config 1/3 (build type, product flavor, flavor dimension)

이 녀석들은 내가 android developer 사이트 가이드 문서 중 가장 좋아하지 않는 부분이다. 번역된 용어가 너무나 헷갈기 때문에..ㅜㅜ 따라서 이 블로거의 혼란을 야기하므로 용어는 영어로 사용하고자 합니다. 더보기 빌드 변형 = build variant 빌드 유형 = build types 제품 버전 = product flavors 버전 차원 = flavor dimension 소스 세트 = source sets 종속 = dependencies 서명 = signing API 수준 = API level 이걸 왜 써? - "하나의 프로젝트에서 다양한 버전의 앱을 만드는 방법"과 "dependencies 항목 및 signing 구성을 올바르게 관리"할 수 있으니까요. 1. "하나의 프로젝트에서 다양한 ..

[res/font] 안드로이드 폰트 리소스 1/2 (개념잡기)

개발 시 앱에 노출되는 모든 글자들의 폰트를 설정해야한다. 안드로이드 앱 폰트 설정은 (디자이너가 설정한) font 파일을 추가하고, 이 font들을 번들로 묶어 리소스로 읽어와 적용한다. [ 안드로이드 font 리소스 ] - 조건 : Android 8.0(API 수준 26)이상 ( ex) font 폴더에 아래와 같은 font 파일들을 추가하면, 이 폰트들은 R.font.dancing_script, R.font.lobster, R.font.typo_graphica 과 같이 참조된다. [ font-family (글꼴 모음) 만들기 ] font-family 란? : 스타일 및 두께 세부정보가 포함된 글꼴 파일 집합체 왜 필요해?? 폰트들을 보면 같은 폰트 스타일이여도 '나눔고딕_normal', '나눔고딕_b..

빌드 종속성 추가 : 수많은 라이브러리 파일들이 내 플젝 안에 없는 이유

우리는 Android Studio의 Gradle 빌드 시스템을 사용하여 빌드에 "외부 바이너리 또는 기타 라이브러리 모듈을 dependencies(종속성)으로 쉽게 포함"할 수 있다. 이 때문에 우리는 수많은 라이브러리들을 내 프로젝트에 추가하지 않아도 된다. dependencies는 컴퓨터 또는 원격 리포지토리에 있을 수 있으며 이에 대해 알아보고자 한다. Gradle이 가져오는 dependencies 구조 Artifact (아티팩트) ? 더보기 도구나 예술 작품, 특히 고고학적 관심 대상과 같이 인간이 만들거나 모양을 부여한 항목에 대한 일반적인 용어 - 소프트웨어쪽에서는 "프로그래밍하는 동안 또는 실행 시 생성되거나 생성된 모든 것"을 일컫는다. (매우 광범위한 용어) = '디자인 및 기능을 설명하..