2010. 9. 6. 16:04

이번에는 TextView 와 Button 위젯을 이용한 초간단 프로그램 예제를 작성해 보고 돌아가는 원리를 간단히 알아보도록 하겠습니다.

먼저 프로젝트 하나 생성합니다.
(여기서는 프로젝트명을 NowExam 이라고 하였습니다)

/res/layout/main.xml 파일을 열어서 위젯을 추가합니다.
1. 위젯을 넣을 레이아웃을 선택합니다. (기본 LinearLayout)
2. 녹색의 + 버튼을 누릅니다
3. TextView 위젯을 추가한다고 가정할때 text 만 치면 text로 시작하는 위젯목록이 하단에 나타납니다
4. 더블클릭 또는 선택후 OK 버튼을 누릅니다.



이렇게 LinearLayout 속에 TextView 위젯이 추가된것을 확인할 수 있습니다.
(한줄로 길게 쓰여 있는것을 보기좋게 정렬한 것입니다)

위 방법이 싫으신분은 이거 수동으로 타이핑 또는 붙여넣기 하셔도 무방합니다

Button 위젯도 위와 같은 방법으로 추가한다음 소스를 아래와 같이 수정합니다



다음으로 소스파일을 오픈합니다.
1. view, widget, util을 임포트 합니다.
2. 버튼 클릭이벤트를 처리할 리스너 설정
3. Button 과 TextView 변수를 지정하고
4. findViewById() 메소드를 통해 이미 만들어진 인스턴스에 대한 레퍼런스를 가져옵니다.
5. 버튼이 클릭되었을때 실행될 내용과, 현재시각을 구하는 함수를 작성합니다.



실행된 모습
버튼을 클릭하면 현재시간이 갱신됩니다.

Posted by 해비
2010. 9. 3. 12:14

1. 프로젝트 생성
File -> New -> Android Project
프로젝트 이름 적절이 설정합니다.

그리고 아래로 스크롤 쭉 내려서 세부 설정 합니다.

Build Target : 어플리케이션의 빌드 버젼입니다. 여기서는 편의상 Froyo + Google API 사용하는 것을 선택했습니다
Application name : 어플리케이션 이름입니다.
Package name : 어플리케이션이 들어갈 패키지 이름입니다.
Create Activity : 액티비티 이름입니다.
Min SDK Version : 8 (Froyo) 어플리케이션이 실행되기 위해 필요한 최소 버젼입니다.





프로젝트가 생성되면 이렇게 폴더구조 및 기본 파일들이 자동으로 생성됩니다.

일단 빌드부터 한번 해봅시다

Ctrl + F11 또는 상단의 빌드 아이콘 눌러줍니다.
처음 빌드 시 요런 화면 뜹니다
Android Application 선택하고 OK버튼 눌러줍니다.

그럼 이제 안드로이드 에뮬레이터가 구동됩니다

처음에 잠금표시 떠있는 것은 클릭해서 쭈욱 드래그 하면 잠금 해제 됩니다.

Hello World, HelloExam!  이란 문자가 출력되었습니다.

근데 저 내용은 어디에...??
위쪽의 프로젝트 구조 및 파일 사진에서 main.xml 파일을 열어 봅시다.
/res/layout/main.xml
LinearLayout 이 있고, 그 안에 TextView 위젯에 대해 정의가 되어있습니다.
TextView의 속성중에 android:text="@string/hello" 라고 된 부분 입니다.

여기에 바로 텍스트 내용을 기입해도 됩니다.

다만 기본 소스에서는 @string 라는 것을 썻군요

@string/hello
즉, 스트링중에 hello로 정의된 것의 내용을 표시해라는 뜻이 되겠습니다

스트링은 string.xml 에 들어있습니다.
/res/values/string.xml

<string name="hello">Hello World, HelloExam!</string>
여기 있었군요

저기 중간의 문자열 수정하면 바뀐 내용이 출력됩니다.





사용된 소스코드 첨부합니다.








Posted by 해비
2010. 9. 3. 09:28

1. 액티비티(Activity)
- 사용자 인터페이스를 작성할 때 Activity라는 구성요소를 활용
- 데스크탑의 윈도우에서 대화상자라고 생각하면 됨



2. 컨텐트 프로바이더(Content provider)
- 기기에 들어있는 각종 데이터에 대한 추상적 인터페이스 제공
- 다른 어플리케이션의 데이터 접근에 공유 권한 설정 필요



3. 인텐트(Intent)
- 기기 내부에 특정 이벤트 발생 시, 이것을 각 어플리케이션에 알려주는 시스템 메시지



4. 서비스(Service)
- 액티비티나 컨텐트프로바이더, 인텐트 등은 모두 필요한 시간 동안만 동작하는 구성요소이나 서비스는 필요한 경우 종료되지 않고 특정 액티비티와 관계없이 항상 동작



Posted by 해비
2010. 9. 2. 18:25

우선, 에뮬레이터의 동작을 위해서 가상장치가 필요합니다.

이클립스 상단에 Android SDK and AVD Manager 버튼을 눌러서 아래 창을 띄웁니다
New 버튼을 눌러서 가상창치를 만듭니다
(현재 그림에는 Froyo 라는 이름으로 가상장치가 생성된 모습입니다)




Name 아무거나 주셔도 되겠고,
Target 은 그 안드로이드 폰 버젼입니다
API 8이 2.2 Froyo 버젼이고, Google API 까지 사용하겠다는 설정입니다.

화면 사이즈는 Default 로 그냥 두었습니다
건드실분들은 취향대로~~

그리고 마지막으로 Create AVD 버튼 누르면 가상장치 생성이 완료됩니다.





Posted by 해비
2010. 8. 16. 14:06

[사전 준비]
- JDK 1.6.0_20 또는 상위버젼 설치
- 이클립스 GALILEO 버젼 설치 (HELIOUS는 알려진 문제점이 있다함)



1. 이클립스 안드로이드 개발환경 설치
이클립스 실행
Help -> Install New Software






2. 안드로이드 SDK 설치
안드로이드 SDK 다운로드
http://developer.android.com/sdk/index.html

Windows 용을 다운받은뒤 적절한 폴더에 설치를 해줍니다.
D:\develop\android-sdk
(저는 여기다가 풀었습니다)

윈도우 환경설정 부분에 PATH 설정에 아래와 같이 추가합니다
D:\develop\android-sdk\tools
(안드로이드 SDK 설치경로 안에 tools 폴더를 지정해줍니다)

다음으로 이클립스 실행한 다음
Windows -> Preferences 를 들어갑니다
번호 순서대로 진행하시면 되겠습니다




상단에 표시된 부분에 보면 Android SDK and AVD Manager 가 있습니다




여기까지 하셨으면 기본적인 설정은 대략 끝난겁니다.
이제 안드로이드 개발 진행 들어가면 됩니다



교육센터에서 배운 내용을 토대로 기억나는대로 작성한것인데 혹시 중간에서 안되는 부분이나 잘못된 부분이 있을지도 모르겠네요..


Posted by 해비
2010. 8. 4. 20:53

PATH 추가
JDK의 Bin 폴더 경로
C:\Java\jdk1.6.0_21\bin

1. JAVA_HOME 지정
내 컴퓨터(우클릭) -> 속성 -> 고급 시스템설정 -> 고급 탭 선택 -> 환경변수

(윈도우7 기준... XP나 기타 운영체제에서는 약간 다를수 있습니다)

Bin 폴더 이전 까지의 JDK 경로를 설정합니다.
(각자 자신이 설치한 환경에 맞도록...)



2. PATH 설정

주의 : Path 부분을 수정할 때에는 기존의 내용이 손상되지 않도록 주의 해야 합니다!!

제일 뒤에 ; (세미콜론) 붙이고
%JAVA_HOME%\Bin 을 추가 합니다.



3. 테스트

cmd 창에서
java -version
javac -version
각각 위와 같은 메시지가 뜨면 환경설정은 완료된 것입니다.

똑같이 했는데도 안되는 경우, 기존의 cmd 창을 닫고 다시 cmd 창을 열어서 해보시기 바랍니다.
(환경설정 이전에 미리 열려진 cmd 창에서는 이전의 환경변수가 적용되어 있습니다)


Posted by 해비
2010. 7. 16. 15:48

Samples
출력결과
kkk, Java




Posted by 해비
2010. 5. 25. 14:26

 이번에는 아~~주 복잡한 패스워 드를 자동으로 생성해주는...
(그래봤자 그냥 임의로 나열하는 문자열 되겠습니다 만은...)

CRP(Create Random Passwords) 입니다.
랜덤한 패스워드 생성? 정도가 되겠네요;;;

프로그램 실행을 위해서는 .Net framework 2.0 이 컴퓨터에 설치되어 있어야 합니다.




소스코드는 압축파일내에 들어있으며, 주석까지 달려 있어서 이해하는데 그리 어렵지는 않을 것입니다.


[구동설명]

1. 랜덤함수로 임의의 숫자를 생성한다음

2. 그 숫자에 대응하는 각각의 문자를 출력하도록 하였습니다.

3. 문자는 아스키 코드값을 그에 해당하는 문자출력하는 방식으로 만들어졌습니다.


[주석이 포함된 소스코드 및 실행파일]





Posted by 해비
2010. 2. 3. 20:28

나름 간단하게? 구현해본 백트래킹 (맞는지는 잘 모르겠으나 어쨋든 백트래킹으로 명명)입니다.

입력받은 배열의 값에 대해서 가능한 모든 순서조합을 만들어냅니다.
단, 모든 순서조합을 위해서는 최초에 배열의 수가 오름차순으로 정렬되어져 있어야 합니다.

최종적인 형태는 내림차순정렬이 되어져 있으며, 이때 함수는 더이상 처리를 하지 않고 들어온 값 그대로 리턴 시켜 버립니다.

내림차순 정렬이 완료 되었으나, 맞는 조합이 없었다면, 해당 문제는 해가 없는 것이 됩니다. (즉, 풀수 없는 문제...)

매번 시도 마다 다음 조합으로 만들어 냅니다. (1차 배열만, 배열의 크기는 무관)
현재 배열의 순서가 답이 될수 없다면, 배열을 다시 백트랙 돌리면 바로 다음 배열 순서의 조합을 만들어냅니다.

1-2-3-4-5-6-7-8-9 의 항이 있었다고 가정할 때...
이 값의 순서가 해당 문제의 답으로서 맞지 않는다면 다음 항으로는
한칸 앞으로 돌아와서(이것이 백트랙이죠)
순서를 바꾸어 볼수 있습니다.
따라서,
1-2-3-4-5-6-7-9-8 을 생각해 볼수 있습니다.

그리고 몇번만 시도를 해보자면...
1-2-3-4-5-6-8-7-9
1-2-3-4-5-6-8-9-7
1-2-3-4-5-6-9-7-8
1-2-3-4-5-6-9-8-7
1-2-3-4-5-7-6-8-9
(...)
9-8-7-6-5-4-3-1-2
9-8-7-6-5-4-3-2-1 (최종값)

예) Array = BackTrack(Array)
(* Array는 1차 배열 변수)

아래 그림은 배열에 현재 값이 {6,7,3,5,4,2,1}이 들어있을 때, 함수 내부에서 다음 배열의 순서인 {6,7,4,1,2,3,5} 로 바뀌는 과정을 설명합니다.


소스코드입니다.
        // ===============================================================================================
        // BackTrack()
        // 제작자 : haebi.kr
        // 작성일 : 2010-02-03
        // 수  정 : 2010-02-03
        // 내  용 : 실행시, 배열에서 모든 나열 방법을 계산하여 매 경우를 순서대로 나열
        //          인자로 배열을 넘겨받고, 결과를 배열로 리턴
        //          최종적인 형태는 배열의 내림차순 정렬
        // ===============================================================================================

        private int[] BackTrack(int[] Array)
        {
            // 백트랙에서 최종적으로 증가된 위치 값을 기억
            int BT_LTop = ArrLTop(Array);
            // 배열에서 마지막으로 증가한 위치의 값을 기억
            int SU_tmp1=0;

            // 1. 배열에서 마지막 증가위치가 배열의 끝 일때...
            if (BT_LTop == Array.Length - 1)
            {
                // 마지막 증가위치
                Array = ArrSwitch(Array, BT_LTop, BT_LTop - 1);
            }
            // 2. 마지막 증가위치의 값 바로 앞의 수를 다음 수로 바꾼뒤 뒷부분 정렬
            else
            {
                //마지막 증가값의 위치 앞부분이 -1 이 아닐때...
                if (BT_LTop - 1 != -1)
                {
                    // 2-1. 마지막 증가위치 바로 앞의 값을 임시 변수에 저장
                    SU_tmp1 = Array[BT_LTop - 1];
                    // 2-2. 마지막 증가위치 바로 앞부분으로 부터 뒷부분 정렬
                    Array = ArrSort(Array, BT_LTop - 1);
                    // 2-3. 마지막 증가위치 바로 앞부분부터 뒤로 스캔하여 다음으로 큰값 찾아서 스위칭
                    Array = ArrSwitch(Array, BT_LTop - 1, ArrNext(Array, BT_LTop - 1, SU_tmp1));
                    // 2-4. 마지막 증가위치로 부터 뒤로 다시 오름차순 정렬
                    Array = ArrSort(Array, BT_LTop);
                }
                else
                {
                    return Array;
                }
            }
            return Array;
        }


백트래킹 함수의 소스는 여기까지 입니다만, 이 함수의 내부에서 쓰여진 함수들 또한 별도로 만들어야 합니다.
- ArrLTop()
- ArrSwitch()
- ArrSort()
- ArrNext()


--------------------------------(여기부터 내부에서 쓰인 함수들)------------------------------------------

        // ===============================================================================================
        // ArrLTop()
        // 제작자 : haebi.kr
        // 작성일 : 2010-02-03
        // 수  정 : 2010-02-03
        // 내  용 : 배열에서 마지막으로 값의 변화가 증가된 곳을 리턴
        // ===============================================================================================
        private int ArrLTop(int[] Array)
        {
            int i=0;
            int LTop=0;

            for (i = 0; i < Array.Length - 1; i++)
            {
                if (Array[i] < Array[i + 1])      // 바로 다음 배열의 값이 현재 값 보다 큰지 체크!
                {
                    LTop = i + 1;                 // LTop 가장마지막에 이전값과 비교해 증가한 값의 배열 위치 갱신
                }
            }
            return LTop;
        }



        // ===============================================================================================
        // ArrSwitch()
        // 제작자 : haebi.kr
        // 작성일 : 2010-02-03
        // 수  정 : 2010-02-03
        // 내  용 : 배열에서 Value1과 Value2의 위치에 있는 값을 교환
        // ===============================================================================================
        private int[] ArrSwitch(int[] Array, int Value1, int Value2)
        {
            int tmp;
            tmp = Array[Value1];
            Array[Value1] = Array[Value2];
            Array[Value2] = tmp;
            return Array;
        }



        // ===============================================================================================
        // ArrSort()
        // 제작자 : haebi.kr
        // 작성일 : 2010-02-03
        // 수  정 : 2010-02-03
        // 내  용 : 배열에서 Pos위치 부터 뒤로 오름차순 정렬
        //          (버블소트 알고리즘 응용)
        // ===============================================================================================

        private int[] ArrSort(int[] Array, int Pos)
        {
            int i = 0;
            int j = 0;
            int icnt = 0;

            // --------------------------------------------------
            // 버블소트 알고리즘 (선택범위 정렬)
            // --------------------------------------------------
            for (i = Pos; i < Array.Length - 1; i++)
            {
                for (j = Pos; j < Array.Length - 1 - icnt; j++)
                {
                    if (Array[j] > Array[j + 1])
                    {
                        Array = ArrSwitch(Array, j, j + 1);
                    }
                }
                icnt++;
            }
            // --------------------------------------------------
            return Array;
        }



        // ===============================================================================================
        // ArrNext()
        // 제작자 : haebi.kr
        // 작성일 : 2010-02-03
        // 수  정 : 2010-02-03
        // 내  용 : 배열에서 시작위치(stPos)부터 뒤로 스캔하여 입력값(Num)보다 바로 다음으로 큰수를 리턴
        // ===============================================================================================
        private int ArrNext(int[] Array, int stPos, int Num)
        {
            int i = 0;
            byte detect = 0;
            // 입력받은 배열을 tmpArray에 복사
            int[] tmpArray = (int[])Array.Clone();
            // stPos 으로 부터 뒷부분 정렬
            tmpArray = ArrSort(tmpArray, stPos);

            for (i = stPos; i < tmpArray.Length; i++)
            {
                // 바로 같은 값이 발견된 상태이면
                if (detect == 1)
                {
                    // 배열에 같은값이 존재 할 경우...
                    if (tmpArray[i] == Num)
                    {
                        detect = 0; // 발견 플래그 초기화
                    }
                    else
                    {
                        return i; //바로 다음 항목 출력
                    }
                }

                // 입력받은값과 배열의 값이 같은경우
                if (Num == tmpArray[i])
                {
                    detect++; // 발견 플래그 설정
                }
            }
            return -1;
        }


Posted by 해비
2010. 2. 1. 23:56


C# 으로 만든 초간단 팩토리얼 함수 입니다.
인자로 INT값을 하나 받으면 리턴값 또한 INT입니다.

        // ----------------------------------------------------------------------
        // 팩토리얼 함수
        // 1*2*3* ... *n
        // ----------------------------------------------------------------------
        private int Factorial(int Num)
        {
            if (Num == 0)               // 입력된 값이 0 이면 0을 리턴
            {
                return 0;
            }

            int i=1;
            int Fac_Value=1;

            for (i = 1; i <= Num; i++)  // 1부터 입력받은 수 까지 반복
            {
                Fac_Value *= i;         // Fac_Value에 반복카운트의 수를 계속 곱함
            }
            return Fac_Value;           // 반복이 끝나면 곱한 수의 결과값을 리턴
        }
        // ----------------------------------------------------------------------

Posted by 해비