8월, 2012의 게시물 표시

Java의 volatile 키워드에 대한 이해

아래의 내용은 블로그  http://tomowind.egloos.com/4571673  에서 가저온 것입니다. =============================================================================== volatile이란 단어의 뜻은 "변덕스러운"이다. 다시 말하자면 "자주 변할 수 있다"로 생각할 수 있다.  프로그래밍 언어에서는 정의 는 언어와 버전마다 다르지만, 대충은 "자주 변할 수 있는 놈이니 있는 그대로 잘 가져다써"정도로 생각을 하면 되겠다. 조금 더 엄밀히 정의를 하자면, (1) 특정 최적화에 주의해라, (2) 멀티 쓰레드 환경에서 주의해라, 정도의 의미를 준다고 보면 된다. Java에서는 어떤 의미를 가질까? volatile을 사용한 것과 하지 않은것의 차이는 뭘까? volatile의 버전마다의 차이는 뭘까? synchronization과 volatile의 차이는 뭘까? 이 의문들에 대해서 정리한 것은 다음과 같다. volatile을 사용하지 않은 변수 : 마구 최적화가 될 수 있다. 재배치(reordering)이 될 수있고, 실행중 값이 캐쉬에 있을 수 있다. volatile을 사용한 변수 (1.5미만) : 그 변수 자체에 대해서는 최신의 값이 읽히거나 쓰여진다. volatile을 사용한 변수 (1.5이상) : 변수 접근까지에 대해 모든 변수들의 상황이 업데이트 되고, 변수가 업데이트된다. synchronziation을 사용한 연산 : synch블락 전까지의 모든 연산이 업데이트 되고, synch안의 연산이 업데이트된다. 무슨 말인지 전혀 모를 수 있다. 앞으로 예제를 들면서 이해를 시켜보도록 노력하겠다. 첫 예제는  Jeremy의 블로그 에서 가져온다. 나는 위의 4가지의 경우를 완전히 정립하지 못한 상태에서 봐서 이 예제의 설명이 모호했다고 느꼈다. 블로그의 설명을 보고 내 설명을 보면 이해가 더 될지도 모르겠다.

우분투(리눅스)에서 이클립스를 이용한 안드로이드 개발시 단말기 인식 문제 해결 방법

안드로이드 어플리케이션을 계발하기 위해서 에뮬레이터를 이용하는 방법이 있지만 좀 더 쾌적한 환경에서 테스트하기 위해 실제 단말기를 많이 이용한다. 하지만 우분투(리눅스) 환경에서 단말기를 연결할 경우 몇몇 특정 모델 또는 특정 경우에 단말기를 인식하기 못하는 문제가 발생할 수 있다. 이럴때는 대부분 단말기의 시리얼 정보레 "???????" 등으로 표기된다. 이러한 문제를 해결하기 위한 방법을 간단히 설명한다. 우선 리눅스 환경에서 안드로이드를 정상적으로 계발하기 위해서는 SDK 에서 제공하는  adb를 정상적으로 접근이 가능해야 한다. 이는 이클립스가 스스로 adb가 저장된 위치로 찾아가야 한다는 것인데 PATH를 설정하여 해결가능하다. 터미널을 열고 1. sudo -s 2. vi /etc/profile 3. 맨 아래에 export PATH=$PATH:(SDK위치)/platform-tools 기입하고 저장     (예. /home/XXX/android-sdk-linux/platform-tools) 4. source /etc/profile 위의 과정을 정상적으로 마치면 터미널에서 adb 를 실행하였을때 옵션에 대한 설명을 볼 수 있게 된다. 이 상태에서 이클립스를 실행한 후 임의의 프로젝트를 생성하여 실행해본다. 아직까지도 단말기가 정상적으로 인식되지 않는다면 터미널을 연 후 아래의 과정을 따른다. 1. sudo -s 2. adb kill-server 3. adb devices 위의 과정으로 마치면 터미널 상에서 단말기에 대한 정보를 확인할 수 있을 것이다. 이제 이클립스에서 정상적으로 단말기를 이용한 실행이 가능할 것이다.