목록Dev (34)
에르노트
코틀린 안드로이드 확장 라이브러리로 유명했던 Anko가 2019년 12월부로 Deprecated 되었다. Anko가 처음 등장할 때에 반해 이제 다른 좋은 대안들이 생겼으며, 더불어 안드로이드 자체의 최적화도 많이 진행되었다고 한다. 따라서 더 이상 Anko를 지속해서 개발할 이유가 없기에 이와 같은 결정이 내려진 것 같다. 그럼에도 불구하고 Anko는 글을 쓰는 현 시점에서 굉장히 훌륭한 라이브러리이며 기존의 프로젝트를 갈아엎을 이유는 전혀 없다고 본다. 다만 유지보수와 신규 버전 대응을 고려하면 이제 앞으로 새롭게 개발할 프로젝트에서 Deprecated된 라이브러리를 채용하기는 영 찝찝한 감이 있다. 다행히 Anko는 떠나는 와중에 그 대안들을 명확하게 제시했고, 그 중 하나가 Splitties이다...
코딩을 하다보면 모종의 이유로 문자열을 바이트 단위로 바꿀 일이 생긴다. 그래서 자바에서 String은 자체적으로 getBytes() 메소드를 제공했고, 간단하게 String의 내용을 바이트 배열로 변환할 수 있었다.public class forjava { public static void main(String[] args) { String str = ""; byte[] arr = str.getBytes(Charset.defaultCharset()); } } 그러면 코틀린에서는? getBytes() 메소드가 없다!!fun main(){ val str = "" val arr = str.getBytes() } 기본적으로 자바와 100% 호환되게 만들어둔 코틀린이기에 해당 기능이 빠졌다고 생각할 수는 없다. ..
PIP는 파이썬의 패키지 관리자이다. 우분투의 apt-get과 비슷한 느낌으로 무언가 다운로드받고 싶은 패키지(라이브러리)가 있을 때 사용할 수 있는 명령어이다. 그런데 pip 명령어를 입력했을 때 아래와 같이 'Fatal error in launcher:'라는 에러가 뜨는 경우가 있다. 이는 파이썬 버전과 pip 버전이 안맞아서 나타나는 에러이며, 다음 명령어를 통해 pip를 업데이트함으로써 간단히 해결할 수 있다. python.exe -m pip install --upgrade pip 그러면 알아서 기존 버전을 삭제하고 알맞은 버전으로 다시 설치가 진행된다. 작업이 끝난 후에 다시 pip 명령어를 쳐보면 정상작동하는 것을 확인할 수 있다.
약 3년 전에 출시했다가 내렸던 Chest Memo를 플레이스토어 다시 올렸다. 그리고 채 몇시간이 지나지 않아 '누르자마자 튕겨요'라는 대답이 돌아왔다.. 즉각 여러 기기에서 테스트를 거듭한 끝에 결국 문제는 안드로이드 8.0 오레오 버전에서만 터진다는 사실을 알아차릴 수 있었다. 앱을 처음 출시했던 2016년도의 안드로이드 최신 버전은 안드로이드7 누가였고, 그마저도 이제 막 나온 따끈따끈한 버전이었다(2016년 8월 22일에 Android7.0 Nougat이 처음 출시됐다). 다시 말해 그 당시만해도 오레오 버전은 아예 존재하지도 않았다... 그러나 3년이 지난 지금에서 안드로이드8(Oreo) 버전을 지원하는 것은 너무도 당연하고, 오레오 버전의 시장점유율은 정말로 무시할 것이 못 된다. 사용자로부..
Unable to start activity ComponentInfo{}: java.lang.RuntimeException: A TaskDescription's primary color should be opaque 필자가 현재 사용중인 안드로이드9.0 Pie에서는 아무 문제가 없었다. 그래서 아무런 의심없이 바로 출시해버렸다. 그런데 웬걸.. 혹시나하고 녹스 에뮬레이터로 앱을 다운받아보니 실행조차 되지 않았다.. 급하게 안드로이드 스튜디오를 키고 로그캣을 뒤적거린뒤 스택오버플로우에서 어렵지않게 답을 찾을 수 있었다. 사실 로그캣에 답이 고스란히 적혀있는데, primary color는 opaque(불투명)해야만 한다. 아마도 얼마전 업데이트했던 최신 안드로이드 스튜디오의 컬러피커 기능이 자동으로 alph..
return문은 함수의 실행을 끝맺는 문장이다. 기본 기능은 수식을 계산해서 그 결과값을 돌려주는 것으로, 함수 내용물 안 어디서나 사용할 수 있다. 함수의 내용물 중간에서 return문이 실행되면 결과값이 반환되며 함수는 중단된다. return문과 비교되는 문장이 break문이다. return문이 함수의 실행을 중단하기 위해 쓰인다면, break문은 반복문의 실행을 중단하기 위해 쓰인다. 보통은 함수의 내용물로 반복문이 들어가기에 return의 조금 더 국소적인 버전이라 볼 수도 있다. 반복을 구성하는 조건문에서, if부분에서 이미 조건이 충족되어 원하는 실행이 모두 완료된다면 굳이 else부분이 없어도 된다는 것이다. if문의 실질적인 내용물 아래에 break를 적어줌으로써 반복문을 아예 탈출할 수 ..
파이썬 코드에서 사용되는 연산자는 매우 다양하다. 그러면 이러한 연산자들을 중첩해서 쓸 일도 많이 생기기 마련이고, 어떤 것들을 먼저 계산할지에 대한 사전 논의가 필요할 것이다. 그래서 Python에서는 연산자의 우선순위가 정해져있다. 여기(파이썬 공식사이트)로 들어가면 Operator precedence라고 명시된 연산자 우선순위를 확인할 수 있다. 표를 유심히 관찰해보면 다음과 같은 결론을 이끌어낼 수 있다. +,- 보다 *, / 연산자가 더 아래칸에 위치한 것으로 보아 우선순위가 높다. 일반적으로 수학에서 곱셈을 먼저 계산하고 덧셈을 생각하는 것과 같은 원리가 그대로 적용되는 것이다. 하지만 같은 +,- 연산자라도, +x, -x 등의 단항으로 쓰일 때는 *보다도 우선순위가 높다. 이러한 규칙들은 비..
숫자 형식에 int, float 등이 있었다면 시퀀스 형식에는 str과 더불어 list가 있다. 시퀀스 형식을 다룰 때는 [ ] 연산자를 사용한다. 우선 기존에 익숙한 str 형식으로 시험을 해보자면, msg = 'hello' 라는 할당문을 적은 후, msg[3]을 치면 'l'이라는 결과를 볼 수 있다. 이 'l'의 의미는 바로 'hello'라는 문자열에서 3번째 문자에 해당하는 것을 출력한 것이다. >>> msg = 'hello' >>> msg[3] 'l' 정리하면, [ ] 연산자는 시퀀스의 내용물 중 하나를 꺼내기 위해서 사용하는 것이다. 여기서 [ ]안에 들어있던 3을 index 값이라고 한다. 시퀀스 형식에서 정확히 한 칸만을 골라서 쓰고 싶을 때, 그 칸에 해당하는 index값을 말하자면 위의 ..
코드를 작성할 때 고려해야할, 실행의 3요소는 바로 순차, 분기, 그리고 반복이다. 실행을 구성하는 가장 중요한 한가지 요소를 고르라고 한다면 아마 '순차' 일 것이다. 왜냐하면 파이썬에서 기본적으로 모든 문장들은 '순차대로, 즉 적어놓은 순서대로' 실행되기 때문이다. 할당문을 먼저 적고 print문을 적는다면 먼저 변수에 값을 담아둔 다음 출력을 실행한다는 것이다. 순차 개념이 깨진다면, 코드의 유기성이 무너지는 것이고, 이렇게되면 프로그램이 정상적으로 작동하지 않을 가능성이 매우 높아진다. 다만 우리가 코드를 적을 때도 무의식적으로라도 순차적으로 적기 때문에 따로 굳이 신경쓰거나 주의해야할 요소는 아니다. 그런 의미에서 '분기'와 '반복'이 나름의 의미를 갖는다. 우선 분기는 어떤 문장들을 실행할 수..
raw_input을 통해 얻을 수 있는 값은 '날것 그대로의 입력'이기 때문에, 기본적으로는 str형식이라 할 수 있는 메시지의 형태이다. 때로는 메시지가 아닌 숫자의 형태로 데이터를 처리해야 할수도 있다. 그 때는 str형식을 토대로 int 혹은 float 등의 숫자 형식을 만들 수 있어야 한다. 이럴 때는 새 값을 만들고자하는 형식 이름 바로 옆에 ( )를 붙임으로써 마치 함수를 호출하듯이 형식의 변환이 가능하다. 이를테면, 나이차를 계산해주는 함수를 구성한다면, 숫자 형식끼리만 - 연산자로 계산이 가능하므로, raw_input()으로 입력받은 str 형식의 데이터를 int 형식으로 바꿔줘야 한다는 것이다. def age_differs(): my_age = 20 age = raw_input("나이를 ..