본문 바로가기

분류 전체보기142

코딩 테스트 파이썬 문법 (중간편) 코딩테스트를 준비하며 반드시 알아야 하는 라이브러리 6가지 내장 함수 print(), input()과 같은 기본 입출력 기능부터 sorted()와 같은 정렬 기능을 포함하고 있는 내장 라이브러리 itertools 파이썬에서 반복되는 형태의 데이터를 처리하는 기능을 제공하는 라이브러리, 순열과 조합 라이브러리를 제공 heapq 힙(Heap) 기능을 제공하는 라이브러리. 우선순위 큐 기능을 구현하기 위해 사용한다. bisect 이진탐색/이분탐색(Binary Search) 기능을 제공하는 라이브러리 Collections 덱(deque), 카운터(Counter) 등의 유용한 자료구조를 포함하고 있는 라이브러리 math 필수적인 수학적 기능을 제공하는 라이브러리 팩토리얼, 제곱급, 최대공약수(GCD), 삼각함수,.. 2023. 1. 12.
코딩테스트 파이썬 문법 (기초편) 자료형 #소수부가 0일 때 0을 생략 a = 5. # 5.0 # 10억의 지수 표현 방식 (최단 경로문제에서 자주 사용) a = 2e+9+1 # 컴퓨터는 2진수 체계이기 때문에 실수 덧셈을 정확히 하지 못한다. 보통 5째 자리에서 반올림 하면된다. a = 0.3 + 0.6 print(rount(a,4)) 수 자료형의 연산 a = 7 b = 3 # 나누기 a / b # 나머지 a % b # 몫 a // b # 거듭 연산자 a ** b # a의 b승 자료형 변환 # 문자열을 한 글자씩 분리하여 리스트에 저장 str = 'Hello world!' list = list(str) ['H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!'] # Java에서 다음과 같.. 2023. 1. 12.
코딩테스트 준비 (By Python...) 나는 작년 코딩테스트 준비를 위해 정말 오랜 시간동안 JAVA로 준비하였다. 구글링을 했을때 주력언어를 코딩테스트에 사용하라는 말을 보고 Kotlin은 코테 자료가 너무 안나오고 그럴바엔 그냥 JAVA로 준비하자는 마음이였다 그런데 너무 오래 걸렸고 지금 Python을 추천받아 자료를 보니 진짜.......주력언어로 하라는 사람들 진짜 뭐지..... 아님 그사람들은 타자가 미친 사람들인가.....?? 예를 들면 순열,조합,리스트,다익스트라 등등 함수 하나 만들고 진빠지는 것들을 어떻게 시간안에 만들라는거야... 난 그냥 코딩테스트는 Python이라고 결심했다.(나는 왜이리 이상한 선택을 하고야 만걸까.....) 어쨌든 돌아 와서 나의 공부 방법에 대해 작성해 보려고 한다. 1. 구글링을 통해 코테용 파이.. 2023. 1. 10.
app:cardCornerRadius 오류 개발 도중 옛날폰(구글 폰인데 진짜 옛날폰이였음..)에서 갑자기 머더리얼 디자인이 나오지 않았다.... 이유는 app:cardCornerRadius 는 height의 1/2 로 써줘야 (height가 21dp 니깐 11dp or 10dp) 원하시는 원형이 나온다. 1/2이 넘어갈경우 옛날 폰에서 이상현상이 생기는 오류가 있었다!!! 2023. 1. 2.
커스텀 뷰 만들어보자 안드로이드 시스템은 XML에 정의된 View 태그와 속성을 기반으로 생성된 View 객체와 AttributeSet 객체를 이용해 화면에 View 를 그려준다. 좀더 풀어 쓰면, 레이아웃 XML에 정의된 모든 View 들은 화면에 출력 될 시점에 안드로이드에 의해 View 객체로 변환되어 메모리에 올라가며, 이 때, 각 뷰의 내부 속성(색상, 크기 등)은 AttributeSet 객체로 변환되어 View 클래스 생성자의 매개변수로 전달 된다. 이렇게 생성된 View객체를 안드로이드가 해석하여 화면에 그려준다. 참고로 XML 에 정의된 View 를 객체로 생성해 메모리에 올리는 과정을 Inflate 라고 한다. 해당 뷰 하단의 버튼들을 보면 모두 같은 레이아웃에 아이콘과 텍스트만 다르다는 것을 볼 수 있다. .. 2022. 12. 30.
StateFlow<MutableList<Object>> 에 추가, 삭제 하는 법 stateflow의 value를 바꿔본 적은 있지만 한개씩 추가해본적은 없었는데 아래와 같은 방법을 사용하자!! 예시로 private val _editerChattingList = MutableStateFlow(mutableListOf()) val editerChattingList: StateFlow get() = _editerChattingList 위와 같이 있을 경우 fun onEditerChattingList(item: CHAT_LIST_ITEM) { _editerChattingList.value = _editerChattingList.value.toMutableList().also { list -> if (list.contains(item)) list.remove(item) else list.ad.. 2022. 12. 16.
안드로이드 리플렉션 이슈 안드로이드 개념을 공부하던 중 직렬화라는 개념에 대해서 공부를 했다. 직렬화란 메모리에 올라가 있는 정보를 byte 단위의 코드로 나열하는 것이다. 이를 통해서 객체와 같은 정보를 전달할 수 있게 하는 것이다. 직렬화를 가능하게 하는 방법 중에는 Serializable과 Parcelable을 구현하는 2가지 방법이 존재한다. 그 중 Serializable은 구현은 상당히 쉬우나 속도가 느리다는 단점이 있다. 속도가 느린 이유는 내부적으로 Reflection을 사용하기 때문에 필요없는 쓰레기 객체들을 만들어내고 이를 제거하기 위해 GC가 동작해서 비용이 발생하게 된다. 그렇다면 여기서 말하는 Reflection은 무엇일까?? Reflection 객체를 통해 클래스의 정보를 분석해 내는 프로그래밍 기법을 말.. 2022. 12. 10.
spinner를 커스텀을 하고 이슈도 해결 해보자 https://stackoverflow.com/questions/7011169/android-custom-spinner-size-problems/7011231#7011231 Android: Custom spinner size problems I've made a custom spinner but the sizing isn't exactly what I want it to be. The spinner become far to large to get the spacing in the list that I need. I want to be able to size the rows of the s... stackoverflow.com 이렇게 스피너를 개발 중 또 다른 문제점이 발생했다. Spinner는 디폴트로 .. 2022. 12. 6.
루팅 우회 체크하기 루팅(Rooting)? 루팅은 쉽게 말해 시스템 최고 권한(root)을 얻는 것이다. 안드로이드에서는 안정적인 기기의 동작을 보장하기 위해 루트 권한은 일반적인 사용자가 접근하지 못하도록 되어 있다. 시스템 내부 저장소 접근, 권한 변경 등 많은 작업을 수행할 수 있기 때문이다. 하지만 Frida를 이용한 후킹을 위해서는 루팅된 시스템이 필요하며, 이 때 루팅 탐지 기법이 적용된 애플리케이션은 동작이 어려울 수 있다. 슈퍼유저는 특권제어를 할 수 있는데, 앱에 설치된 모든 권한과 시스템 백업, 다른 버전 안드로이드 설치, ROM 컨트롤 등을 할 수 있다. 시스템 안전을 보장할 수 없다. 개인정보인 연락처, 이메일 등에 접근할 수 있고 자격증명 및 비밀번호에도 접근이 가능하다. 2022. 11. 24.
리사이클러뷰 android:clipToPadding="false" 리사이클러뷰에 패딩을 줄 경우 위아래에 패딩공간이 있을 것이다. 그런데 사람마다 다르겠지만 스크롤을 한 경우 패딩공간을 활용하면 좀더 뷰를 활용할수있고 자연스러운(?) 뷰를 보여줄 수 있을 것이다. 그러할 경우 android:clipToPadding="false" 넣어주면 위와 같은 자연스러운 리사이클러뷰를 얻을 수 있다. 기본적으로 리사이클러뷰에 android:clipToPadding="false" 속성을 주는게 좋다고 한다. 2022. 11. 23.
채팅방의 스크롤시 버벅임 현상 배포 이후 채팅방의 버벅임 현상이 발생했다. 이유가 무엇인지 찾아보니 전 배포까지는 발생하지 않았다. 그래서 라이브러리쪽을 유심히 봤는데 constraintlayout 을 Flow을 사용하기 위해 ConstraintLayout 1.1.3 -> ConstraintLayout 2.0.0 으로 올렸던 commit을 발견할 수 있었다.... ConstraintLayout 2.0.0 을 찾아보니 빠르게 그려내지 못하는 리사이클러뷰 이슈가 있었던 것이였다... 대박...이래서 현장을 해보면 이러한 이슈를 겪어볼 수 있다니... 그래서 그보다 높은 버젼을 올려주니 해결이 되었다. 2022. 11. 23.
layout Inspector 개발을 하다 보면, 코드만으로는 어디에서 문제가 발생했는지 확인하기 난해할 때가 있다. 이를테면 그려진 화면을 보니 ImageView를 그리는 과정에서 뭔가 오류가 난 것 같은데, 그게 단순히 width 값의 문제인지, 아니면 다른 속성값의 문제인지 확인이 필요하다거나 할 때. 이럴 때면 개발자 입장에서는 지금 눈으로 보고 있는 특정 View가 가지고 있는 값을 실시간으로 확인하고 싶을 수 있다. 안드로이드 스튜디오의 Layout Inspector는 바로 이런 기능을 제공한다. 사용법은 아주 간단하다. 아래처럼 Tools > Layout Inspector 로 레이아웃 인스펙터를 활성화 시켜주기만 하면 된다. 그러면 이렇게 스튜디오의 오른쪽 아래 부분에 레이아웃 인스펙터가 활성화된다. 상단 부분의 Live.. 2022. 11. 7.
FragmentMannager 나는 회사에 가기 전 FragmentMannager을 막 썼었다... 그런데 회사에 가서 바텀 프레그먼트간의 취소 버튼등으로 사용자가 원하는 방향으로 움직이는 것에 대해 개발을 하다보니 막쓰면 안된다는 것을 알았고 잘 정리 해보려고 한다. 예시1 (activity 내에서) supportFragmentManager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE) supportFragmentManager.beginTransaction() .replace(R.id.main_fl, fragment, tag) .addToBackStack(tag) .commitAllowingStateLoss() 예시2 (activity 내에서) suppo.. 2022. 11. 3.
하단 이슈에 대해 이번에 우리 회사에서 아래와 같은 QA가 올라왔다. 우리 앱의 하단 네비게이션 바와 안드로이드 자체 하단 바의 겹침현상이 일어났다. 해당 오류는 우리는 하단 네비게이션을 그리기 전에 갤럭시 하단바의 높이를 구하고 그 위에 그리는 형식으로 되어 있다. 갤럭시 높이를 구하는 코드의 방식은 안드로이드 버젼에 따른 코드 방식을 사용하고 있는데 이는 다음과 같다. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { //갤럭시 하단바의 높이를 구하는 동작 방식 } else { //예외처리 } 그런데 버젼에 따라 자체 하단바가 다 다르므로 한두번씩 이러한 위와 같은 오류를 발생시키는 것 같다는 의심을 하였다. 여기에 아래와 같은 방어코드를 대입했다. 방어 코드의 의미는 한.. 2022. 11. 3.
생명주기에 대해서 생명주기(Lifecycle) 1) 생명주기란 무엇인가? Lifecycle은 Life + cycle의 합성어로, 삶의 순환이라고 직역할 수 있겠다. 말 그대로 탄생하고 성장하여 죽음에 이르기까지의 과정이라고 생각한다면, 이것을 안드로이드 앱에 적용한 것이 바로 Android Lifecycle이다. Activity, Fragment, Service 총 세가지 종류의 Lifecycle이 있으며 오늘은 그 중 Activity의 Lifecycle에 대해서만 포스팅하도록 하겠다. 2) 생명주기가 필요한 이유 예를 들어보자. 당신은 지금 여자친구와 카톡을 하고 있다. 그런데 갑자기 친구가 술먹자며 나오라고 전화를 했다. 당신이 전화를 받는순간 전화창이 화면에 보일 것이다. 그러다 약속을 잡고 전화를 끊고 다시 카톡을.. 2022. 11. 3.