본인은 분명 안드로이드 스튜디오 사이트에 등재되어 있는 최신 버전의 안드로이드 스튜디오를 다운 받았음에도 이와 같은 에러를 만나 매우 당황스러웠다. 오류가 발생한 건 공부차 분석해보고 싶은 오픈 소스 앱을 github에서 내려 받아 import project 하는 과정에서 생겼다. 최신 버전을 설치했음에도 더 상위 버전을 설치해야한다는 문구를 봤을 때의 당혹감.. 을 겪었다면 아래와 같이 해결해보자. 여러 가지 해결책이 있을 수 있으나, 스택 오버 플로우에서 참고한 답안이 생각보다 잘 적용되었기에 이렇게 공유하고자 한다. 링크와 사진을 함께 보도록 하자. https://developer.android.com/studio/preview/index.html 위 링크로 접속하면 아직 안정적인 버전으로 정착하지..
/* 본 포스팅은 최호성 저자의 '독하게 시작하는 C프로그래밍' 교재를 참조로 작성되었음을 먼저 알려드립니다. */ 함수의 이름 또한 배열의 이름처럼 '주소 상수'에 부여한 식별자다. 따라서 함수의 이름도 포인터 변수에 저장할 수 있다. 다만 변수의 자료형이 함수 호출에 필요한 정보들을 포함하고 있어야 변수를 이용해서 함수를 호출할 수 있다. // 호출에 필요한 정보는 매개 변수, 호출 규칙, 반환 자료형 등이 있다. 그래서 'void *'에 함수의 이름을 저장할 수는 있으나 호출을 할 수는 없다. 아래의 코드는 함수 포인터를 구체적으로 다루기에 앞서 함수의 이름이 주소임을 확인하기 위한 코드다. #include int main(void) { // void *는 어떤 주소든 담을 수 있는 자료형이다. /..
/* 본 포스팅은 최호성 저자의 '독하게 시작하는 C프로그래밍' 교재를 참조로 작성되었음을 먼저 알려드립니다. */ 함수 호출 규칙(calling convention)은 호출자 함수가 피호출자 함수를 호출하는 과정에서 매개변수를 전달하는 순서 및 매개변수가 사용한 메모리 관리방법 등에 관한 규칙이다. 대표적으로 __cdecl, __stdcall, __fastcall 등 세 가지 정도가 있는데 이 세 가지가 C 언어의 표준에서 정의하는 것은 아니다. 모두 약간씩 차이가 있는데 C/C++ 컴파일러의 기본 함수 호출 규칙은 __cdecl이다. 우리가 자동변수를 선언할 때 auto를 생략해도 되는 것처럼 __cdecl도 생략할 수 있다. 따라서 아무것도 기술하지 않으면 함수 호출 규칙은 __cdecl이다. 제대..
# 셸 정렬 개념 및 원리 셸 정렬(shell sort)은 Donald L. Shell 이 제안한 방법으로 삽입 정렬이 어느 정도 정렬 되어 있는 배열에 대해서는 대단히 빠르다는 점을 이용해 만든 방법이다. 셸 정렬은 삽입 정렬의 시간 복잡도 $O(n^2)$보다 빠르다. 삽입 정렬의 문제점은 요소들일 삽입될 때, 이웃한 위치로 한 칸씩만 이동한다는 점이다. // 제 블로그에 삽입 정렬로 검색하시면 관련 설명과 알고리즘을 확인해보실 수 있습니다. 삽입 정렬은 for 루프를 이용해 인접한 위치부터 한 칸씩 이동하며 삽입할 위치를 탐색하므로 만약 삽입할 원소가 들어갈 자리가 멀리 떨어져 있다면 한 칸씩 이동하는 설계 때문에 불필요하게 많은 반복과 비교를 해야 한다는 단점이 있습니다. 셸 정렬에서는 요소들이 멀..
/* 본 게시물은 '핵심만 골라 배우는 안드로이드 스튜디오 & 프로그래밍(Android Studio 2 Development Essentials) | 닐 스미스 지음' 의 내용을 토대로 작성되었습니다. */ # 서로 다른 안드로이드를 장치를 위한 디자인 애플리케이션의 사용자 인터페이스는 가능한 한 많은 종류의 화면 크기에서 제대로 보일 수 있도록 신중하게 디자인되어야 한다. 이때 가장 중요한 것은 서로 다른 장치에서 레이아웃의 크기 조정이 올바르게 될 수 있게 하는 것이다. 안드로이드 기반의 스마트폰과 태블릿은 사용자가 세로(portrait)와 가로(landscape) 방향 모두를 사용할 수 있다는 것이다. 따라서 디자인이 잘된 사용자 인터페이스라면 모든 방향에서 그런 변경에 적응할 수 있어야 하고, 사..
/* 본 게시물은 '핵심만 골라 배우는 안드로이드 스튜디오 & 프로그래밍(Android Studio 2 Development Essentials) | 닐 스미스 지음' 의 내용을 토대로 작성되었습니다. */ # Activity 클래스 거의 예외 없이 애플리케이션의 액티비티들은 안드로이드 Activity 클래스 또는 Activity 클래스의 서브 클래스인 다른 클래스(예를 들어, 하위 버전과의 호환성을 고려하여 만든 AppCompatActivity 또는 FragmentActivity) 중 하나의 서브 클래스로 생성된다. 안드로이드 앱은 액티비티가 근간이 되며, 액티비티는 리눅스 커널의 프로세스로 실행된다. 그리고 하나의 UI (=단위 기능의 화면)를 갖고 처리한다. 필요하다면 하나의 앱에서 여러 개의 액티..
안드로이드 스튜디오 기본(default)설정에서는 폰트 크기 조절에 대한 단축키가 존재하지 않습니다. 그래서 저는 직접 단축키를 설정하는 방법을 택했습니다. File -> Settings 에 들어가신 후, Keymap 을 눌러주신 후 검색창에 font를 검색하시면 아래와 같은 화면이 등장합니다. 나머지 절차는, 단축키를 추가하고 싶은 기능에 마우스 우측클릭을 하시면 설정할 수 있는 화면이 등장합니다. 우리가 게임에서 키보드 셋팅을 하듯, 원하시는 키를 눌러주시면 됩니다. 이 때 해당 단축키가 이미 존재할 때 밑에 경고와 함께 사용 중인 단축키의 목록이 나오므로 그런 것들만 피해서 설정해주시면 됩니다. Shift + Minus, Shift + Plus 와 같은 경우 중복되는 것이 없어 잘 설정이 된 상태입..
/* 본 게시물은 '핵심만 골라 배우는 안드로이드 스튜디오 & 프로그래밍(Android Studio 2 Development Essentials) | 닐 스미스 지음' 의 내용을 토대로 작성되었습니다. */ # 안드로이드 애플리케이션과 액티비티 생명주기 안드로이드 애플리케이션은 액티비티나 서비스 및 브로드캐스트 수신자의 형태로 된 여러 컴포넌트로 구성된다. 날이 갈수록 모바일 장치의 메모리나 컴퓨팅 능력이 향상되고 있다. 그러나 데스크톱 시스템에 비해 여전히 제한된 리소스를 고려해야 한다. 특히, 메모리가 그렇다. 따라서 안드로이드 시스템에서는 그런 제한된 리소스를 효율적으로 관리해야 한다. 운영체제와 애플리케이션 모두에서 그렇다. 그러면서 항상 사용자에게 응답할 수 있어야 한다. 따라서 안드로이드 시스..
/* 본 포스팅은 최호성 저자의 '독하게 시작하는 C프로그래밍' 교재를 참조로 작성되었음을 먼저 알려드립니다. */ 함수의 이름도 배열의 이름처럼 주소상수에 부여한 식별자다. 그러므로 포인터 변수(함수 포인터)에 담을 수 있는 정보다. 만일 함수의 매개변수 구성을 알고 있고 이름 대신 주소를 알고 있다면 함수를 호출하는 데 전혀 문제가 없다. 같은 원리로 다른 함수에 내가 만든 함수의 주소를 알려줘서 호출하도록 코드를 만들 수도 있다. 함수라는 것은 결국 기계어로 번역이 되어 메모리 어딘가에 저장이 될텐데, 쓰기는 안되고 읽기와 실행만 되게끔 구성되어 있다. 인위적으로 쓰기가 가능하게끔 만들 수도 있지만 기본적으로는 쓰기 변조를 차단하고 있다. # 성능 향상을 위한 이론 함수를 호출하려면 비용(CPU +..
/* 본 포스팅은 최호성 저자의 '독하게 시작하는 C프로그래밍' 교재를 참조로 작성되었음을 먼저 알려드립니다. */ 형한정어 volatile을 적용해 변수를 선언하면 변수와 관련된 모든 연산에 대해 컴파일러가 '최적화' 규칙을 적용하지 않는다. 설령 그것이 컴파일러가 판단하기에 전혀 불필요한 연산이라고 해도. 컴파일러의 최적화에 도움을 주는 const와는 정반대의 역할을 수행하는 것으로 봐도 된다. '최적화'를 하지 않는 수준은 CPU 기계 수준까지 적용된다. CPU는 빠른 연산을 위해 캐시(cache)메모리를 사용하는데, volatile로 선언된 변수는 캐시로 처리되지 못한다. 효율은 떨어지겠지만 주기억장치(메모리)에 정말로 정보가 읽고 쓰이는 행위는 보장이되는 셈이다. 비효율적이지만 꼭 해야할 연산이..
- Total
- Today
- Yesterday