목록TIP (21)
라떼는말이야
토스트는 사용자에게 간단한 알림을 줄 수 있는 기능이다. 하지만 토스트가 중복으로 만들어지는 경우 위 사진처럼 계속해서 토스트가 나와 사용자가 즉각적인 피드백을 받지 못하거나 사용성이 아주 나빠질 수 있다. Toast 만들기 Toast.makeText(context, "토스트 메시지", Toast.LENGTH_SHORT).show() 보통 위와 같이 토스트를 띄울 것이다. 토스트의 생성과 show를 한 번에 하는 코드이다. 하지만 Toast는 객체화할 수 있고, 객체화된 Toast를 취소할 수도 있다. Toast 취소하기 val toast = Toast.makeText(applicationContext, "토스트 메시지", Toast.LENGTH_SHORT) toast.show() // 토스트 표시 to..
기존에는 gitignore을 추가하려면 직접 gitignore 파일을 생성해서 내용을 추가했어야 했다. (이때 https://www.toptal.com/developers/gitignore 사이트를 활용하면 내용을 쉽게 추가할 수 있다) 하지만 플러그인을 사용해서 간단히 추가할 수 있는 방법을 소개하려고 한다. Shift버튼 x2 (두 번 연속 클릭) 하게 되면 위와 같은 빠른 실행 창이 나타난다. 여기에 plugin을 검색하면 plugins 를 찾을 수 있다. Marketplace 탭을 선택 후 ignore라고 검색하면 .ignore라는 플러그인이 검색된다. 이 플러그인을 설치하게 되면 다음과 같이 프로젝트 이름에서 우클릭 후 new에 .ignore File 메뉴가 생긴 것을 확인할 수 있다. 여기서 ..
여러 명이 관여하는 프로젝트를 수월하게 진행하기 위해서는 적절한 협업 도구 활용이 필수로 필요하다. 특히 코딩을 하는 프로젝트의 경우 Github 이 없어서는 안된다. (2016년도에 프로젝트를 할 때는 Github을 쓰지 않아서 프로젝트 전체를 압축해서 주고 받았는데 최종.zip 최최종.zip 진짜최종.zip 제출용.zip 최종제출용.zip ... 이런 식으로 되어버려서..ㅋㅋ 끔찍했던 기억이 난다) 팀에 합류하기 전 팀원들은 아직 실질적인 코딩은 시작하지 않은 상태였고, 회의를 한 내용은 Google Docs에 기록해 회의록 링크를 카카오톡 공지로 공유하고 있었다. (Github은 사용하기로 되어있던 상태) 이전에 내가 프로젝트를 할 뻔(?) 한 적이 있는데 당시에 알아보고 살짝 사용해 봤던 협업 도..
fun createNotificationChannel(context: Context) { try { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val notificationChannel = NotificationChannel( NOTIFICATION_CHANNEL_ID, "수업시작 알림", NotificationManager.IMPORTANCE_HIGH ) notificationChannel.description = "수업 시작 전 알림을 띄웁니다." notificat..
개요 일반적인 디자인에서 marginLeft와 marginStart는 동일한 효과를 가진다. 마찬가지로 marginRight와 marginEnd는 동일한 효과를 가진다. 하지만 margin을 주고자 하는 컴포넌트가 textView나 editText와 같은 문자와 관련된 컴포넌트라면 이야기가 달라진다. 언어별 특성 차이로 인해 발생하는 불편을 최소화하기 위해 Left대신 Start, Right 대신 End를 사용해야 한다. 언어별 특징 대부분의 문자는 왼쪽에서 오른쪽으로 쓰고, 읽는다. 이를 LTR언어 라고 칭한다. 하지만 일부 언어(아랍어, 히브리어, 페르시아어, 우르두어 등)는 오른쪽 -> 왼쪽으로 쓰고, 읽는다. . 이를 RTL언어 라고 칭한다. 그림을 보면 이해가 갈 것이다. 영어와 같은 LTR언어..
Python에서 리스트는 굉장히 중요하고 상징적인 자료형이다. 코딩테스트를 할 때 리스트에서 특정 값들을 모두 제거하고 싶을 때가 있다. 리스트에는 remove라는 메서드가 있어 특정 값을 제거할 수 있는데 최초로 발견되는 하나만 제거한다. 예를 들어 li = [1, 3, 5, 5, 7, 7, 8] 인 리스트가 존재할 때 li.remove(5) 를 하면 [1, 3, 5, 7, 7, 8]이 된다. 즉, 5가 여러 번 등장하면 모두 지우지 못하고 최초로 발견된 5만 제거가 된 것이다. 5를 모두 제거하고 싶다면 위와 같은 코드를 작성해 제거 할 수도 있다. 하지만 remove() 메서드는 시간 복잡도가 O(N)이고, 중복된 데이터가 많을 때 여러 번 반복하게 되면 굉장히 시간 소모가 많아진다. 그래서 다음과..
0.3 + 0.6은 0.9가 아니다!! 파이썬으로 0.3 + 0.6을 계산해보면 0.9가 나오지 않는다. 0.89999999999999 라는 근사치가 나온다. if문으로 확인을 해보아도 역시나 다르다고 나온다. 왜 그럴까? 그 이유는 컴퓨터가 2진수를 사용하기 때문이다. 컴퓨터가 실수를 처리할 때 부동 소수점(Floating-point)을 사용하는데, IEEE754 표준에서 실수형을 저장할 때 4Byte 혹은 8Byte를 사용한다. 그래서 실수 값을 표현할 때 정확도에 한계를 가지게 된다. 2진수에서 0.9를 정확히 표현할 수 있는 방법이 없다. 최대한 0.9와 가깝게 표현하지만 실제로는 미세한 오차가 발생하게 되는 것이다. 0.9에서 다른 수를 빼도 마찬가지로 미세한 오차가 발생한다. (단, 0.9 -..
퀵 정렬은 이름에서 알 수 있듯이 정렬 알고리즘 중 속도가 빠른 알고리즘이다. 이해가 쉽고 간단한 정렬 알고리즘인 선택 정렬과 삽입 정렬의 시간 복잡도가 O(N^2) 인 것에 비해 퀵 정렬의 평균 시간 복잡도는 O(NlogN)이다. 아이디어는 다음과 같다. 기준이 되는 데이터인 pivot을 하나 선택한다. 일반적으로 가장 많이 사용되는 것은 주어진 array의 첫 번째 요소이다. (array[0]) pivot을 기준으로 pivot 보다 작은 데이터와 pivot보다 큰 데이터로 구분한다. pivot을 pivot보다 작은 데이터와 pivot보다 큰 데이터 사이에 위치시키면 pivot의 위치가 결정된다. [pivot 이하] [pivot] [pivot 초과] pivot보다 작은 데이터와 pivot보다 큰 데이터..