프로그래밍 & 보안 47

(Trouble Shooting) - Android Studio Gradle 버전 설정 오류

[ 문제 발생 ] 프로젝트를 진행하던 와중에 평소처럼 팀원들이 merge 를 완료한 개발 브랜치에 있는 코드를 내 브랜치로 pull 했는데 갑자기 gradle 버전 오류가 떠서 애뮬레이터도 뜨지 않고 전체 오류가 발생했다. build.gradle.kts 파일의 내용이 저렇게 바뀐 채로 오류가 나고 있었고 프로젝트를 진행해야 하는데 애뮬레이터도 구동할 수 없는 상태였기 때문에 매우 당황스러웠다. [ 문제가 생긴 이유 ] 명확한 원인을 찾았다고 보장할 수는 없지만 개발 브랜치에서 pull 을 한 뒤에 이러한 오류가 떴기 때문에 팀원과의 gradle 버전이 상이하거나 다른 팀원이 gradle 버전 설정을 바꾸고 merge 했기 때문인 것 같다. [ 해결하는 방법 ] 1. 안드로이드 스튜디오 설정의 맨 왼쪽 상..

(Android Studio) - 다국어 지원 설정, strings.xml

일주일 동안 진행하는 프로젝트에서 다국어 지원 설정을 맡았기 때문에 내용을 정리해 봅니다. TextView, EditText, Button ... 등 많은 UI 요소들은 text 로 정보를 전달하는 역할을 종종한다. 그런데 이 요소들이 갖고 있는 text 속성에 하드코딩(ex: text = "돗개진")을 하게 되면 다국어 지원을 할 수 없게 된다. 따라서 res -> values -> strings -> strings.xml 파일에 내가 사용할 문자열들을 모아서 관리하여 다국어 지원까지도 가능하게 할 수 있다. week3_sns_project 게시물 제목 게시물 내용 BTS BTOB IDLE 스타 게시판 15시간 전 방탄 카페 용산점에 왔어요 비투비 콘서트 갔다왔어요!! 게시글 내용1 게시글 내용2 홈 ..

Android 2024.04.03

(Android Studio) - Fragment 데이터 전달 방식

[ Fragment 간 데이터 전달 방법 ] 1. bundle과 FragmentManager 로 전달 2. Fragment Result API를 사용하여 Data 전달 3. Fragment 간 공통의 ViewModel (ex. HostActivity 의 ViewModel) 로 전달 4. Jetapack 의 Navigation 에서 제공하는 safe-args 로 전달 1. bundle과 FragmentManager 로 전달 (Bundle 로 Data 를 담아 전달) //PassBundleFragment는 본인이 전달하고자 하는 Fragment class val bundle = Bundle() bundle.putString("key", "value") val passBundleBFragment = PassB..

Android 2024.04.01

(Android Studio) - Fragment LifeCycle

[ 액티비티의 생명주기와 차이점 ] - 생성 시 onViewCreated() - onViewStateRestored() 가 추가로 있음 - 소멸 시 onSaveInstanceState() - onDestroyView() 가 추가로 있음 [ 액티비티의 생명주기와 공통점 ] - LifeCycle 이 위에서 아래 방향으로 진행되며 Fragment 가 백스택 최상단으로 올라올 경우 생명 주기가 CREATED - STARTED - RESUMED 순으로 진행되고 반대로 백스택에서 pop 됐을 경우 RESUMED - STARTED - CREATED - DESTROYED 순으로 진행됨 - onCreate() : Fragment 만 CREATED 된 상황이며 onCreate() 이전에 onAttach() 가 먼저 호출됨..

Android 2024.04.01

(Kotlin) - 프로그래머스 푸드 파이터 대회

[ 접근 방법 ] - 처음에는 result 에 122333 이 추가될 때 동시에 끝자리부터 333221 를 추가하려고 했지만 생각해 보니 그렇게까지 할 필요가 없었다. '1223330' 까지 만들어 주고 나면 그 뒤에는 '333221' 즉 0을 제외한 역순으로 문자열을 이어주면 됐기 때문이다. class Solution { fun solution(food: IntArray): String { var answer = mutableListOf() for(i in 1 until food.size) { if(food[i] % 2 == 0) { for(j in 1..food[i]/2) { answer.add(i.toString()[0]) } } if(food[i] % 2 == 1) { food[i] = food[..

(Android) - Activity Stack

[ Process & Task ] ㄴ> 사용자가 현재 화면으로 보고 있는 액티비티가 가장 위쪽에 위치하며 백(Back)버튼을 누르게 되면 보고 있던 액티비티는 스택에서 제거되고 그 아래에 있는 액티비티가 화면에 나타남 Task : 애플리케이션에서 실행되는 액티비티를 기록하는 스택이며 안드로이드에서 Task를 이용해 화면의 순서와 흐름을 관리할 수 있음 : 스택의 가장 아래에는 기본 액티비티(base activity)가 있으며 주로 홈화면이 이 위치에 놓임 : 어플리케이션의 실행되는 액티비티만을 포함함 Process : 어플리케이션의 독립적인 실행 단위(흐름)을 말함, 태스크는 안드로이드에서 프로세스와 무관하게 실행되는 액티비티 정보를 저장하는 반면 프로세스는 해당 어플리케이션에 존재하는 모든 실행 코드와..

Android 2024.03.27

(Android Studio) - Activity 생명 주기

[ 액티비티의 수명 ] - onCreate() 호출과 onDestroy() 호출 사이에 존재함 *onCreate() = 액티비티가 생성되어 레이아웃 설정 등을 수행 *onDestroy() = 호출되는 시점에 사용하고 있는 리소스를 모두 해제하고 생을 마감 [ 액티비티의 화면이 눈에 보이게 되는 Visibility ] - onStart() 와 onStop() 호출 사이에 존재 - 사용자가 액티비티 화면을 보며 상호 작용을 할 수 있음 - onStop()이 호출되어 새 액티비티가 시작되면 해당 액티비티는 화면에 더 이상 표시되지 않음 - 시스템은 액티비티 전체 수명 내내 onStart() 및 onStop()을 여러 번 호출 가능 -> 이 때 액티비티는 사용자에게 표시되었다 숨겨지는 상태를 오가게 됨 [ 액티..

Android 2024.03.25

(Android Studio) Activity, Intent

[ 안드로이드 4대 컴포넌트 ] : 4대 컴포넌트를 이해하고 안드로이드 애플리케이션 기본 구조 파악이 매우 중요 1. 액티비티 (Activity) - 사용자가 직접 상호작용하는 화면 -> 사용자 인터페이스(UI)를 담당하며, 사용자의 입력에 반응하는 이벤트 기반 프로그래밍 가능 2. 서비스 (Service) - 백그라운드에서 오랜 시간 동안 실행되어야 하는 작업 수행 (ex: 음악 재생, 파일 다운로드 등) -> 사용자가 직접적으로 인지하지 못하는 애플리케이션의 백스테이지에서 일어나는 작업들을 담당 3 브로드캐스트 리시버 (Broadcast Receiver) - 안드로이드 시스템으로부터 발송되는 다양한 이벤트나 정보를 앱이 받을 수 있게 해 주는 컴포넌트 (ex: 배터리 부족 경고, 화면 꺼짐 등) ->..

Android 2024.03.22

Kotlin - 문자열 내 마음대로 정렬하기

문제를 처음 접근할 때 n번째 인덱스의 문자열을 가져와서 순서대로 정렬하는 것까지는 쉬웠지만 그 문자열을 포함한 단어를 가져와서 다시 정렬하는 과정에서 조금 막혔다. class Solution { fun solution(strings: Array, n: Int): Array { var answer = Array(strings.size) {" "} var midVal = Array(strings.size) {" "} for(i in strings.indices) { midVal[i] = strings[i][n].toString() } val sort = midVal.indices.sortedWith(compareBy({midVal[it]}, {strings[it]})) for (i in sort.indic..

(Android Studio) - margin, padding, gravity 등

- Margin : 다른 뷰와의 간격 (바깥쪽으로 먹는 여백) : layout_margin : 상하좌우로 동일한 마진 설정시에 사용되는 속성 : layout_marginLeft, layout_marginRight, layout_marginTop, layout_marginBottom - Padding : 뷰의 안쪽으로 먹는 여백 (textview 위젯의 크기를 기준으로 안쪽) : paddingLeft, paddingRight, paddingTop, paddingBottom + Margin 과 Padding 이 모두 적용된 모습 - Gravity : 뷰 안의 내용을 정렬할 때 사용 : 위젯 안의 텍스트 위치 잡기 BOTTOM : ­부모 뷰에서 아래 쪽에 위치시킴 CENTER ­: 부모 뷰의 중앙에 위치시킴 ..

Android 2024.03.20