2015년 11월 19일 목요일

구글 제공 API 데모(샘플) 소스 이클립스에서 import 하는 법





구글 제공 API 데모(샘플) 소스 이클립스에서 import 하는 법

File - New - Project - Build Target의 API 버전을 선택하면 해당 API 데모 소스들이 전부 목록으로 뜬다.
여기서 원하는 샘플 소스를 선택하면 된다.


구글의 안드로이드 개발자 사이트에서 제공해주는 샘플 소스가 있는데 이런 것들은 완전한 프로젝트 형태로 주어지는 것이 아니다. 
따라서 일반적인 프로젝트 import식으로는 안된다.

File - New - Project - Android 하위 항목의 Android Project from Existing Code - Root Directory 항목에 샘플 소스가 있는 위치(디렉토리) 지정, Copy projects into workspace 항목 체크 - Finish 클릭

※ 일반적인 완성된 프로젝트 import하는 법
File - import - General 하위 항목의 Existing Projects into Workspace - Next - Select root directory 항목에 import할 프로젝트 위치 지정 - Copy projects into workspace 항목 체크 - Finish

2015년 11월 17일 화요일

CSS div의 크기 조정에 대해(div의 width, height 속성에 대해)





CSS div의 크기 조정에 대해(div의 width, height 속성에 대해)

웹 페이지를 구성함에 있어서 보이지 않는 box 형태로 다양한 레이아웃을 구성할수 있게 도와주는 div의 가로의 넓이를 지정하는 속성이 width, 세로의 높이를 지정하는 속성이 height이다.
이들 속성에 값을 지정할 때의 가장 대표적인 단위가 pixel이다.

만일 percentage로 지정하면 div의 크기는 브라우저의 창 크기에 상대적인 크기로 설정되고
em단위로 지정하면 div 안에 있는 글자(text)의 크기에 기반해서 dive의 크기를 설정한다.
요즘은 화면의 크기가 다양한 기기들에 대응하기 위해 percentage나 em 단위를 많이 사용하는 추세이다.
아래는 HTML 코드 조각이다.

<div>
   <p>'그들이 움직인다'…어나니머스, IS에 '선전포고'
         "전세계 회원들이 너희를 추적할 것이다. 당신들을 찾아내 도망가지 
         못하게 할 것이라는 걸 알아야만 한다."</p>
</div>


아래는 CSS 코드 조각이다.

div.box {
height: 300px;
width: 300px;
background-color: #99ccff;}

p {
height: 75%;
width: 75%;
background-color: #ccff66;}

위의 코드에서 div의 가로 길이가 300pixel, 세로 높이가 300pixel이고
div 안에 있는 paragraph가 75%인데 이는 paragraph가 속해 있는 div의 크기 300pixel에 대한 75%이다.
따라서 paragraph의 크기는 225pixel에 해당된다.

2015년 11월 15일 일요일

Git 사용 관련 간단한 용어 정리





소프트웨어 개발시 팀 단위 작업시 특히 필요한 버전관리 혹은 소스 코드 관리(source code management, SCM) 도구로 각광받고 있는 Git에 대한 간단한 용어정리이다.

▶ HEAD
작업 중인 위치(branch)를 가리키는 가상의 커서를 의미

▶ clone
웹상에 있는 원격 repository에 있는 내용을 local의 내 PC에 그대로 복사본을 만드는 작업

▶ commit
local의 내 PC에서 수정, 변경한 내용을 원격의 repository에 push하기 전 단계인 staging 단계(index 단계)에 올리는 작업.
이 단계도 아직은 local PC에서 이뤄지는 작업이다. 따라서 인터넷이 연결되어 있지 않아도 작업이 수행된다.
이렇게 commit이 된 내용이라야 비로소 원격 repositiory로 push할때 변경된 내용이 원격 repository에도 적용이 된다.

▶ push
local PC에서 수정 후 commit한 내용을 원격의 repository에 전송하는 작업

▶ pull
원격의 repository에 다른 사람이 수정/추가한 내용을 내 local PC에 수정 내용을 적용하는 작업
pull 을 실행하면, 원격 저장소에서 최신 변경 이력을 다운로드하여 내 로컬 저장소에 그 내용을 적용한다.
이때 branch 병합과 같은 병합이 발생한다.

▶ checkout
현재 선택된 branch가 아닌 다른 branch에서 작업하고자 할때, branch를 변경하고자 할때 사용

▶ stash
파일의 변경 내용을 일시적으로 기록해두는 영역이다. stash를 사용하여 작업 트리와 인덱스 내에서 아직 commit하지 않은 변경을 일시적으로 저장해 둘수 있다.

▶ fetch
 pull을 실행하면 원격 저장소의 내용을 가져와 자동으로 병합작업을 실행하지만 단순히 원격 저장소의 내용을 확인만 하고 로컬 데이터와 병합은 하고 싶지 않을 경우 fetch 명령어를 사용할수 있다.

안드로이드 타이틀바 없애고 전체화면, 화면 가로로(혹은 세로로) 고정하는 법





타이틀바 없애고 전체화면, 화면 가로로(혹은 세로로) 고정하는 법

안드로이드 앱 실행시 전체화면으로 보이게 하고, 타이틀 바 없애고 화면을 가로로 고정할려면
소스 코드 상에서도 처리할 수 있으나 아래와 같이 Manifest 파일에서 설정할 수 있다.
소스 코드 상에서는 실행 시점에 처리한다면 Manifest 파일에서 설정하면 컴파일 단계에서 미리 처리를 한다.

AndroidManifest.xml에 다음을 추가

        <activity
            android:name=".TestActivity"
            android:label="@string/app_name"
            android:configChanges="orientation|keyboardHidden"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
            android:screenOrientation="landscape" >

화면을 전체 화면과 타이틀 바를 없애는 기능이
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
이고

화면을 가로고 고정하는 방법이 
android:screenOrientation="landscape"
이다.
만일 화면을 세로로 고정하고자 한다면 
android:screenOrientation="portrait"
이다.

혹은 앱만이 아닌 화면 자체를 세로로 뒤집을려면
android:screenOrientation="reversePortrait"
과같이 하면 된다.

2015년 11월 10일 화요일

CSS line-height, letter-spacing, word-spacing 속성에 대해





CSS line-height, letter-spacing, word-spacing 속성에 대해

line-height
⇒ 줄과 줄 사이의 간격을 조정하는 속성

letter-spacing
⇒ 글자와 글자간의 간격을 조정하는 속성

word-spacing
⇒ 단어와 단어 사이의 간격을 조정하는 속성

이들에 대한 값은 em단위를 채택해야 한다. 

다음은 코드 조각이다.

h1, h2 {
   text-transform: uppercase;
   letter-spacing: 0.2em;}

.author {
   font-weight: bold;
   word-spacing: 1em;}

CSS text-align에 대해





CSS text-align에 대해

text-align
문장(글자)을 좌/우/가운데... 등으로 정렬되게 하는 속성

이 속성이 가질수 있는 값(value)
left : 문장을 좌로 정렬
right : 문장을 우로 정렬
center : 문장을 가운데로 정렬
justify : 해당 라인 좌우 전체를 꽉 채우도록 정렬

아래는 코드 조각이다.

h1 {
   text-align: left;}

p {
   text-align: justify;}

.author {
   text-align: right;}

블로그 소개입니다.





안녕하세요, 코드 조각 블로그 운영자입니다.

블로그 이름을 '코드 조각(Code Piece)'로 정한 이유는 객체지향과의 연관성을 염두에 두었다고 거창하게(?) 말할 수 있을 것 같습니다^^.

객체(조각), 객체(조각)... 들을 조합해 가면서 하나의 완전한 S/W를 완성해 가는 것과 같은 맥락으로 작은 코드의 조각 조각들을 통해 기능과 개념들을 배워갈 때 비로소 큰 그림이 완성 될수 있겠다는 생각에서 입니다.
작은 조각 조각들이 쌓일 때 큰 그림이 그려지겠다는 뜻을 담았습니다.

완전한 소스가 갖는 장점이 있겠으나 긴 소스를 다 읽을 필요 없이 필요한 부분, 필요한 기능에 대한 소스만을 소개함으로 짧은 시간 안에 원하는 기능을 이해할 수 있는 장점이 코드 조각을 통해서 얻을 수 있겠기에 블로그 이름을 '코드 조각'으로 지어봤습니다.

아무튼 백발이 성성할 때 까지 코딩의 즐거움을 계속할 수 있기를 바라면서 소개를 마칩니다.

2015년 11월 9일 월요일

안드로이드 XML에 공백 및 특수 문자 넣기





안드로이드 xml 문서에(예: strings.xml)에 공백을 넣기 위해서 HTML에서 사용하는
&nbsp;를 사용하면 컴파일 단계에서 에러가 발생한다.

&nbsp; ⇒ HTML에서 공백 넣은 이 기호는 에러

이때 공백을 포함한 특수 문자를 넣기 위해서는 아래의 방식으로 처리하면 된다. 

&#160;    ⇒     공백
&lt;          ⇒     <
&gt;         ⇒     >
\t             ⇒     탭
\n            ⇒     한 줄 띄우기
\'             ⇒     apostrophe(예: Tom\'s)

2015년 11월 8일 일요일

Java의 Reference 타입(레퍼펀스 타입) 자료형에 대해





Java의 Reference 타입 자료형에 대해

자바의 자료형은 크게 기본형과 레퍼런스 타입으로 분류할 수 있다. 
레퍼런스 타입은 new 연산자를 통해서 힙(heap) 영역에 생성되는 자료형들을 의미한다. 
레퍼런스 타입으로는 클래스, 배열, 인터페이스 들이 있다.

따라서 arr1, arr2라는 2개의 배열이 있을 때 
arr1 = arr2;
를 하면 arr2에 있는 데이터를 arr1에 대입하는 것이 아니라(call-by-value가 아니라)
arr2가 가리키는 메모리 주소 값을 대입한다(call-by-reference이다). 

따라서 arr1에서 값을 변경하면arr2에서도 값이 변경된다. 
반대로 arr2에서 값을 변경하면 arr1의 값도 동시에 바뀐다.

그러나 
int arr1, int arr2;

가 있다면 이때 
arr1 = arr2;

라고 하면 이건 값(데이터)을 대입한다. 즉 call-by-value이다. 
따라서 arr1의 값을 변경해도 arr2에는 아무런 영향이 없고
arr2의 값을 변경해도 arr1에는 아무런 영향이 없다.

그런데 배열은 근본적으로 call-by-reference이다. 
따라서 아래 코드에서 
mRGBData를 chageData(byte[] rgb)로 넘기면 
mRGBData와 rgb는 동일한 기억 장소를 가리키게 된다. 
따라서 changeData()에서 mRGBData에 값을 대입하는 것이 전혀
없을지라도 mRGBData를 출력해 보면 changeData()에서 수정한 값이 잘 출력된다.

public class MainActivity extends Activity {
private TextView txt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txt = (TextView)findViewById(R.id.txt);
byte[] mRGBData = null;
mRGBData = new byte[5];
changeData(mRGBData);
String str = "";
for (int i=0; i<mRGBData.length; i++) {
str += mRGBData[i] + ", ";
}
txt.setText(str);
} //onCreate
private void changeData(byte[] rgb) 
{
for(int j=0; j<rgb.length; j++) {
//여기서 mRGBData에 값을 대입하지 않고 rgb에만 값을 넣었는데도
//onCreate()에서 TextView에 mRGBData를 출력해 보면 0, 2, 4, 6, 8이 출력된다.
rgb[j] = (byte)(j*2);
}
}
}


아래와 같이 class도 reference type이다. class 참조변수(객체)에 대입을 하면 value가 대입되는 것이 아니라
reference가(해당 클래스의 기억장소 주소 값이) 대입 되게된다.
그래서 class의 두 참조 변수는 동일한 기억 장소를 가리키게 된다.

public class MainActivity extends Activity {
private TextView txt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txt = (TextView)findViewById(R.id.txt);
MyClass myClass = new MyClass();

//아래 로그를 출력해 보면 다음과 같이 My2클래스에서 myc와 mc를 출력했을 때와 같이
//동일한 기억장소를 가리키게 된다.
// myClass : com.example.test.MainActivity$MyClass@411e71c0
Log.e("$$$$$$$", "myClass : "+myClass.toString());
My2 my2 = new My2(myClass);
String str = myClass.name + "\n" + myClass.age;
txt.setText(str); 
} //onCreate
class MyClass
{
private String name;
private int age;
}
class My2
{
private long kkk;
MyClass myc;
public My2(MyClass mc)
{
myc = mc;
//아래 로그를 출력해 보면
//myc : com.example.test.MainActivity$MyClass@411e71c0
Log.e("$$$$$$$", "myc : "+myc.toString());

//아래 로그를 출력해 보면
//mc : com.example.test.MainActivity$MyClass@411e71c0
Log.e("$$$$$$$", "mc : "+mc.toString());
mc.name = "홍길동";
mc.age = 29;
}
}
}