반응형
자바도 이제 어느 정도 역사를 가진 언어가 된것 같습니다. 지금 와서 자바에 대해 포스팅 한다는 것이 많이 늦은 감이 있지만 그래도 제가 공부했던 언어 중 하나이고 여전히 자바를 사용하는 곳들이 많다고 생각되기 때문에 다시 한번 정리 하는 차원에서 포스트를 시작해 보려 합니다.

먼저 이번 포스트에서는 자바와 C언어를 비교해 보겠습니다!!

 자바와 C 언어는 어떤 차이가 있을까요? 


■ 1. 메모리를 접근하는 방식에 차이가 있습니다.


   C 언어 : pointer를 이용해서 메모리에 접근합니다. 하지만 이 pointer를 사용해서 부트영역을 건드린다면 치명적인 오류가 발생합니다.

   자바 : reference를 사용합니다.
  
C언어는 100번지에 직접 물건을 전달하려 하는데 실수로 101번지에 배달하면 오류가 발생하지만 Java는 우체국을 통해 보내서 주소가 다를 경우 수취인 불명으로 반송되는 정도로 생각하면 좋을 것 같습니다.


■ 2.

   C 언어 : 관련된 데이터를 하나로 모으기 위해 구조체(Structure)공용체(Union)를 사용합니다.

   자바 : 클래스(Class) 개념을 사용합니다.


■ 3. 구성 단위

   C언어 : acb.c 형태의 소스파일, abc.h 형태의 헤더파일 등 파일 단위로 되어 있어 #include를 사용해 문서에 포함합니다.

   자바 : 클래스(Class) 단위로 되어 있어 import를 사용해 포함 시킵니다.


■ 4. 타입(type) 정의

   C언어 : 구조체 등을 사용해 새로운 타입의 정의가 가능합니다.

   자바 : 타입을 정의할 수 없습니다.

■ 5. goto

   C언어 : goto 를 사용합니다.

   자바 : goto라는 예약어는 있지만 사용하지 않습니다.

goto를 사용하면 로직이 복잡해진다고 하네요.


■ 6. 형변환 (casting 캐스팅)

   C언어 : 자동 형변환을 합니다.

   자바 : 자동으로 형변환을 하지 않고 오류를 발생시킵니다.

C언어의 경우 int a = 3.14 라고 정의할 경우 a를 자동으로 3으로 캐스팅합니다. 만약에 이것이 314를 3.14로 잘 못 쓴 것이라면 오류를 찾아내기가 어렵습니다. 자바에서는 이런 사용자의 실수를 방지하기위해 형검사를 엄격하게 한다고 합니다.


■ 7. 상속 (Inheritance)

   C++ : 다중 상속이 가능합니다.

   자바 : 단일 상속만 가능합니다.

다중 상속이 가능할 경우 상속한 각각의 부모에 같은 변수 명이 있는 경우 그 변수가 어디서 온 것 인지 알기 어렵다고 합니다.


■ 8.

   C언어 : 파일 단위 이기 때문에 마음에 드는 부분을 가져다 쓸 수 없고 배껴야합니다.
abc.c → 컴파일(Compile) → abc.obj → 빌드(Build) → abc.exe 과정을 거쳐 최종적으로 바이너리 파일이 됩니다.
그래서 플랫폼에 종속적입니다.  예를 들면 UNIX에서 만든 abc.exe 는 WINDOWS에서는 실행이 안 됩니다. 라이브러리가 다를 수 있기 때문입니다.

   자바 : 클래스(Class) 단위의 객체 지향언어이고, interpreter방식 입니다.
abc.java → 컴파일 → abc.class → interpreter(자바가상머신) → 각 플랫 폼에 맛게 실행 하는 방식으로
바이너리가 아닌 바이트 코드의 클래스 파일을 읽으면서 자기 플랫폼에 맞게 실행됩니다. 즉 플랫폼에 독립적입니다.
반응형
반응형

인터넷에서 글을 쓰거나 '한글' 또는 'MS워드'등 워드프로세서 이외의 공간에서 글을 쓰면서 특수문자를 입력하고 싶을때가 많습니다. 보통 '자음' + '한자키' 를 이용해서 특수 문자를 입력하는데요. 각각의 조합에 어떤 문자들이 있는지 한번 정리해 볼게요^^

보시고 잘 찾아서 사용하시면 편할 것 같습니다.

자음 + 한자키 + Tab 을 누르면 모든 항목을 볼 수 있습니다.^^


■ ㅂ + 한자키 - 선문자

 


■ ㅈ + 한자키 - 숫자




■ ㄷ + 한자키 - 수식기호



■ ㄱ + 한자키 - 기호



■ ㅅ + 한자키 - 한글 원문자,괄호문자



■ ㅁ + 한자키 - 도형



■ ㄴ + 한자키 - 괄호



■ ㅇ + 한자키 - 영어 원문자, 괄호문자



■ ㄹ + 한자키 - 단위



■ ㅎ + 한자키 - 그리스어



■ ㅋ + 한자키 - 한글 자모



■ ㅌ + 한자키 - 한글 옛 자모



■ ㅊ + 한자키 - 분수, 첨자



■ ㅍ + 한자키 - 알파벳



■ ㅃ + 한자키 - 가타카나



■ ㄸ + 한자키 - 히라가나



■ ㄲ+ 한자키 - 유럽 특수문자


■ ㅆ + 한자키 - 키릴 자모

반응형
반응형

파이썬에서 문자열은 어떻게 나타낼까요?

파이썬에서는 인용부호인 ''" "로 묶어서 문자열을 표현합니다. '로 시작했다면 '로 끝나고 "로 시작했다면 "로 끝나야겠지요.

 

그리고 다량의 문자열을 넣기 위해 """ 이나 '''을 사용할 수 있습니다. 이 경우는 줄바꿈이나 탭도 그대로 적용됩니다.



"""이나 '''을 사용하지 않고 줄바꿈이나 탭 등을 표현하고 싶을 때는 몇몇 다른 언어들과 마찬가지로 이스케이프 문자(Escape sequence)를 이용합니다.

\n : line feed 줄바꿈
\t : tab
\r : carriage return
\0 : null
\\ : back slash (한글 글씨체에서는 \가 되겠지요?)
\' : single quotation mark(단일 인용 부호)
\" : double quotation mark(다중 인용 부호)


그리고 문자열 앞에 r 을 붙여서 raw문자열을 만들 우 있습니다. 이 문자열에서는 이스케이프 문자가 적용되지 않고 인용 부호 안의 문자가 그대로 출력됩니다.


반응형
반응형

파이썬에서 수치를 가공하기 위한 연산자는 어떤 것들이 있는지 알아보죠.

우선 치환연산자 또는 대입 연산자라고 불리는 = 이 있고, 사칙 연산을 위한 +, -, *, / 가 있습니다 *는 곱하기고, /는 나누기가 되겠지요.그리고 나머지를 구하기 위한 %연산자와 거듭제곱을 표현하기 위한 ** 연산자가 있습니다. 마지막으로 나눈 결과의 정수부분만을 취하는 // 연산자도 있습니다.

=      +      -      *      /     %     **     // 


각각 어떤 출력을 하는지 확인해 보면 아래와 같군요.



그럼 간단히 원의 넓이와 삼각형의 넓이를 구해볼까요?
우리가 알고 있는 수학 공식을 그대로 써주면 됩니다.

반응형
반응형

이번 포스트에서는 파이썬의 자료형(data type)중 수치에 대해서 알아보겠습니다.

수치형은 숫자를 나타내는 자료형입니다. 종류는 int, long, float, complex 등이 있습니다.
단, 파이썬 2.x 버전에서는 long 형을 제공했지만 파이썬 3.x 버전에서는 long형이 없어지고 모두 int형으로 처리됩니다.

입력한 각 수치의 수치형을 알아보기 위해서 type() 이라는 함수를 사용할 겁니다. type() 함수는 인자로 준 자료형을 반환하는 함수입니다.

int 는 정수(integer)이며, 정수를 입력하면 10진수 정수로 처리합니다.
float 은 정수를 제외한 실수 를 입력하면 10진수 실수로 처리합니다. 소수하고 생각하시면 편할 것 같네요. 그리고 e를 써서 지수형으로 표현할 수 있습니다.




■ 정수 앞에 0b 를 붙이면 2진수, 0o를 붙이면 8진수, 0x를 붙이면 16진수로 처리합니다.



■ 10진수를 입력 받아서 다른 수체계로 변환해주는 함수도 있습니다. 단, 이때 출력되는 결과는 수치형이 아닌 문자열입니다.



■ 파이썬에서는 실수보다 넓은 범위인 복소수를 나타내고 사용할 수 있습니다. 학교에서 배웠던 복소수의 모양 그대로 실수부와 허수부로 입력 해주면 complex 형으로 처리합니다.



imag는 허수(imaginary number)를 나타내고 real은 실수(real number)를 나타냅니다. 그리고 conjugate() 메서드로 켤레복소수(conjugate complex number)를 구할 수 있습니다.
반응형
반응형

 

■ 프로그램이 연산을 수행하기 위해서 값들은 임시로 저장하거나 영구적으로 저장할 곳이 필요한데 이런 저장소를 변수(variable)라고 하고 이런 저장소에 붙인 이름을 변수명이라고 합니다. 변수는 유형에 따라 서로 다른 자료형(type)을 가집니다. 우선 파이썬(Python)에서는 어떤 변수명을 사용할 수 있는지 알아보겠습니다.

■ 파이썬(Python) 에서는 변수(variable)의 이름으로 문자숫자 그리고 밑줄(_)을 사용할 수 있습니다. 
단, 숫자는 변수 이름의 제일 처음에 나올 수 없습니다.

예를 들면  n, number, num3, num_4 , _value 등의 형태는 사용할 수 있지만 2_numberhi~, hello! 등과 같이 숫자가 앞에 있거나 특수 문자가 포함된 변수 명은 사용할 수 없습니다.



사용 가능한 변수명을 입력하면 변수가 정의되지 않았다는 NameError가 뜨는데 사용할 수 없는 변수명을 입력한 경우에는 구문에 맞지 않다는 SyntaxError가 발생하는군요.


 
■ 그리고 파이썬(Python)은 대소문자를 구분하기 때문에 변수를 만들거나 사용할 때 주의해야 합니다.




변수 각각에 값을 대입해서 확인해 보니 대소문자를 구분하는 것을 확인 할 수 있습니다.




■ 또 같은 파이썬(Python)의 예약어는 변수명으로 사용할 수 없습니다.
파이썬의 예약어는 다음과 같습니다.

and,  as,  assert,  break,  class,  continue,  def,  del,  elif,  else,  except,  is,  finally,  for, from,  global,  if,  import,  in,  lambda,  nonlocal,  not,  or,  pass,  raise,  return,  try,  while,  with, yield


예약어 중에 if를 변수 명으로 사용하니 SyntaxError가 나는군요.


■ 마지막으로 보통 변수에 값을 대입할 때 대입연산자(=)를 사용하는데 파이썬에서는 튜플(tuple)이나 리스트(list)를 사용하기도 합니다.


각각의 순서에 따라 변수에 값이 대입된 것을 확인할 수 있었습니다.

리스트는 []로 묶어서 표현하는 값들의 나열로 순서가 있으며 0부터 시작하는 인덱스를 가지고 있습니다. 튜플은 리스트와 유사하나 ()로 묶어서 표현하며 읽기전용 입니다.
반응형
반응형
HTTP를 통해서 주고 받는 자료의 많은 부분은 XML형식으로 조직화 되어 있다고 합니다.
안드로이드에서는 XML Pull Parser를 제공하여 XML 파일을 파싱합니다.

그럼 네트워크에 있는 XML 파일의 파싱을 한번 해 볼까요?
URL객체를 생성하는 것은 웹에서 자료를 읽어올 때와 다를 것이 없습니다.
XMLPullParserFactory를 이용해 XMLPullParser 객체를 생성하고 URL 객체를 이용해 입력 스트림을 파서에 연결해서 적절한 메서드를 루프에서 반복 호출 하면서 XML 문서를 읽어서 파싱하게 됩니다.

아래 코드에서는 파서가 시작 태그를 만났을 때 (START_TAG)만 동작합니다.
시작 태그를 만났을 때 요소의 특성을 조회하고 비교해서 정보를 로그에 기록합니다.
즉 코드에서는 flickr feeds에서 이미지 URL만 뽑아 로그에 기록합니다.

XMLPullParser 의 next()와 getEventType()이 반확하는 속성들은 다음과 같습니다.
START_TAG : 요소의 시작 태그를 만났을 때 반환 (<tag>)
TEXT : 요소의 텍스트를 만났을 때 반환 (<tag>TEXT</tag>에서 TEXT)
END_TAG : 요소의 종료 태그를 만났을 때 반환 (</tag>)
END_DOCUMENT : XML 파일의 끝에 도달했을 때 반환

package net.bment.net;
import java.net.URL;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class XmlparseActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        TextView status = (TextView)findViewById(R.id.status);
        TextView status1 = (TextView)findViewById(R.id.status1);
        TextView status2 = (TextView)findViewById(R.id.status2);
       
        try {
   URL url = new URL("http://api.flickr.com/services/feeds/photos_public.gne"
     + "?id=26648248@N04&amp;lang=en-us&amp;format=atom");
   
  XmlPullParserFactory parserCreator = XmlPullParserFactory.newInstance();
  XmlPullParser parser = parserCreator.newPullParser();
   
   parser.setInput(url.openStream(), null);
   
   status.setText("파싱 중이에요..");
   int parserEvent = parser.getEventType();
   while (parserEvent != XmlPullParser.END_DOCUMENT){
    switch(parserEvent){
    case XmlPullParser.START_TAG:  //parser가 시작 태그를 만나면 실행
     String tag = parser.getName();
     
     if(tag.compareTo("link") == 0){   
      String relType = parser.getAttributeValue(null, "rel");
      
      if(relType.compareTo("enclosure") == 0){
       String encType = parser.getAttributeValue(null, "type");
       
       if(encType.startsWith("image/")){
        String imageSrc = parser.getAttributeValue(null, "href");
        Log.i("Net", "image source = " + imageSrc); //parser에서 받아 온 값을 Log에 기록
        status1.setText(status1.getText()+ ".");

       }       
      }
     }
     break;
    }
    
    parserEvent = parser.next();
   }
   status2.setText("파싱 끝!");
  } catch(Exception e){
         Log.e("Net", "네트워크 에러가..났습니다...", e);
  }
 }
}


로그에 이미지 파일의 URL이 기록됬습니다.

에뮬레이터에도 제가 코딩한데로 메시지가 뜨는군요^^ 히히

반응형
반응형

HttpURLConnection 클래스는 URL 객체가 가리키는 자원의 HTTP 상태와 헤더 등의 정보를 제공합니다.

다음은 HttpURLConnection을 사용해 URL에 대한 정보를 얻어오는 예제입니다.
결과는 LogCat이 친절히 보여주는군요 ^^
해당 URL의 자원 내용을 가져오려면 getInputStream() 을 호출하면 됩니다.

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

//...중략

try {
        URL url = new URL("http://kkoseul.tistory.com/entry/2011080101");
        
        HttpURLConnection http = (HttpURLConnection)url.openConnection();
        Log.i("Net", "length = " + http.getContentLength());
        Log.i("Net", "respCode = " + http.getResponseCode());
        Log.i("Net", "contentType = " + http.getContentType());
        Log.i("Net", "content = " + http.getContent());

 


 
        InputStream isText = http.getInputStream();
         byte[] bText = new byte[2048];
         int readSize = isText.read(bText);
         Log.i("Net", "readSize = " + readSize);
         Log.i("Net", "bText = " + new String(bText));
         isText.close();
         http.disconnect();
 
     }catch(Exception e){
         Log.e("Net", "네트워크 에러가..났습니다...", e);
     }

//...생략


처음에 length 값이 '-1'이라 좀 의아해 했는데 찾아보니 getContentLength()는 명확하지 않으면 -1을 반환하는군요^^ 
반응형
반응형

안드로이드 네트워킹 API를 사용해서 네트워킹을 지원해 보도록할까요?
Java를 해보신 분이라면 한 번쯤 보셨을 java.net 패키지가 사용됩니다.

가장 흔히 쓰이는 HTTP를 위주로 진행해 보겠습니다.
참고로 HTTP로는 대부분의 자료를 캡슐화 할 수 있고 SSL을 적용함으로써 보안 통신을 수행할 수도 있습니다.


■ 웹(Web)에서 자료 읽기!

  웹에서 자료를 읽어 오는 것은 비교적 간단합니다.
  읽고자하는 웹 페이지의 URL을 알기만 하면 java.net 패키지의 URL 클래스를 사용해서 원하는 자료를 읽어 올 수 있습니다.

import java.io.InputStream;
import java.net.URL;

//...

try {
URL url = new URL("http://kkoseul.tistory.com/entry/2011080101");

InputStream isText = url.openStream();
byte[] bText = new byte[250];
int readSize = isText.read(bText);
Log.i("Net", "readSize = " + readSize);
Log.i("Net", "bText = " + new String(bText));
isText.close();
}catch(Exception e){
Log.e("Net", "네트워크 에러가..났습니다...", e);
}

 
읽어올 자료의 URL을 URL객체로 생성합니다. 그다음 URL에 대한  입력 스트림을 열고 자료를 읽으면 됩니다.
  위 코드의 경우는 250byte 만큼만 자료를 읽은 후 스트림을 닫습니다.

  네트워크 상의 자원을 이용할 때에는 통신망의 상태나, 자원이 있는 서버의 상태에 따라 오류가 날 수 있으므로 이 점을 알고 있어야하며 또 URL이 잘 못 되는 경우도 있으니 주의가 필요합니다. (try-catch문을 쓰는 이유가 이것?^^)
  
  그리고 중요한 한 가지! 
  안드로이드 응용프로그램이 네트워크 기능을 사용하려면 적절한 권한이 필요합니다.
  AndroidManifest.xml 파일의 <manifest>요소 하위에 <uses-permission>요소를 추가합니다.

<uses-permission android:name="android.permission.INTERNET"/>

 
  추가하지 않으면..여러분도 저와 같은 메시지를 보게 되실겁니다 ㅠ_ㅠ

 
  위의 한 줄을 추가하니 기분 좋은 로그가 보이는 군요^ㅁ^ 여기까지가 웹에서 자료를 읽어오기 였습니다!  


다음 포스트에서는 HttpURLConnection 클래스를 사용해서 자료에 대한 정보를 가져와 보도록 하겠습니다!!
반응형
반응형

윈도우 서버 2008 을 사용하다 보면 부팅시에 서버관리자가 실행되서 귀찮은 경우가 많습니다.
저는 한번 켜놓은 서버를 다시 설정할 일이 거의 없기에 과감히 윈도우 시작시에 서버 관리자를 실행하지 않도록 하기로 결심했습니다^^ㅋ

1. 먼저 [시작 메뉴] - [실행] - gpedit.msc 를 실행하여 그룹 정책 편집기를 겹니다 !



2. 편집기에서 [로컬 컴퓨터 정책] - [컴퓨터 구성] - [관리 템플릿] - [시스템] 에서
   "로그온 시 서버 관리 페이지를 표시 안 함" 을 찾아서 상태를 "사용" 으로 바꿔 줍니다!!!



 


이제는 윈도우 시작 시에 귀찮은 서버 관리 페이지를 보지 않아도 되겠군요^^ㅋㅋ

 

 

반응형
반응형


특수기호??

#$%$&^@#$^#$%$#@!$%#^$^%$
#  도대체 이건 뭥미?

프로그래밍을 하다보면 여러 특수 기호를 사용하게 되는데, 보통 @는 '골뱅이' 처럼 부르기 편한 말이 있지만 $,& 같은 기호들은 마땅히 부를 우리말이 없을 뿐더러 원래의 명칭도 잘 모르는 경우가 많습니다. 이번 포스트에서 이런 기호들의 영어 명칭이 무엇인지 알아보겠습니다.

 기호  명칭  기호  명칭
 !  Exclamation Point _ Underscore
 " "  Double Quotation Mark  :  Colon
 ' ' Single Quotation Mark   ;  Semicolon
 #  Crosshatch  ^  Circumflex
 $  Dollar Sign  `  Grave
 %  Percent Sign  {  Left Brace(Open Brace)
 @  At Sign  }  Right Brace(Close Brace)
 &  Ampersand  [  Left Braket(Open Braket)
 *  Asterisk  ]  Right Braket(Close Braket)
 -  Hyphen  (  Left Parenthesis(Open ..)
 . Period   )  Right Parenthesis(Close ..)
 ,  Comma  |  Vertical Bar
 /  Slash  ~  Tilde
 \ Back Slash   ' Apostrophe 

위 표에 적힌 명칭도 중요하겠지만 가장 중요한건 기호를 보고 어떤 의미의 기호인지 이해하는 것이 아닌가 하는 생각이 듭니다.

반응형
반응형

리스트 뷰(ListView)는  어댑터 뷰(AdapterView)의 대표 위젯으로서 항목들을수직으로 펼쳐서 보여줍니다.
다른 위젯들 역시 동작 방식이 유사하기 때문에 리스트 뷰만 잘 공부해도 나머지는 쉽게 익힐 수 있습니다.

문자열을 리스트 뷰에 출력해 보겠습니다.


layout/listtest.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
 
  <ListView
   android:id="@+id/list"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   />
      
</LinearLayout>
리니어레이아웃 안에 리스트 뷰 위젯 하나만 배치하고 코드에서 어댑터와 연결하기 위해 리스트 뷰를 참조할 것이므로 list라는 이름으로 id를 줬습니다.


src/TestAdapterViewActivity.java
package net.test.TestAdapterView;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class TestAdapterViewActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listtest);
       
        //배열 데이터
        ArrayList<String> BMENTmember = new ArrayList<String>();
        BMENTmember.add("창환");
        BMENTmember.add("상종");
        BMENTmember.add("슬기");
        BMENTmember.add("예지");
        BMENTmember.add("소정");
       
        //어댑터 준비
        ArrayAdapter<String> Adapter;
        Adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, BMENTmember);
       
        //어댑터 연결
        ListView list = (ListView)findViewById(R.id.list);
        list.setAdapter(Adapter);       
    }
}
리스트 뷰에 표시한 데이터 원본은 ArrayList 객체에 생성하고  그 다음 데이터와 리스트 뷰를 연결해 중 어댑터를 생성했습니다. 항목들이 모두 문자열이니 ArrayAdapter가 가장 적합 하겠죠?

성공!! 다음과 같은 결과가 출력됩니다.!!

배열을 원본으로 사용할 때는 다음 생성자로 어댑터를 초기화 합니다.
ArrayAdapter(Context context, int textViewResourceId, List<T> objects)
ArrayAdapter(Context context, int textViewResourceId, T[] objects)
첫 번째 Context 인수에는 액티비티를 넘겨주면되고, 두 번째 인수는 항목을 표시할 레이아웃의 리소스ID입니다. 세 번째는 원본 데이터겠지요? List 인터페이스를 지원하는 컬렉션 객체(ArrayList, LinkedList, Stack 등)와 단순 배열 두 가지 타입에 대해 오버라이딩되어 있습니다.

두 번째 인수에 들어갈 레이아웃의 리소스 ID는 시스템이 목록용으로 미리 정의해 놓은 것이므로 android.R 뒤에 ID만 다음과 같은 지정하면 됩니다.

 리소스 ID  설명
 simple_list_item_1  하나의 텍스트 뷰로 구성된 레이아웃
 simple_list_item_2   두개의 텍스트 뷰로 구성된 레이아웃
 simple_list_item_checked  오른쪽에 체크 표시가 나타남
 simple_list_item_single_choice  오른쪽에 라이오 버튼이 나타남
 simple_list_item_multiple_choice  오른쪽에 체크 박스가 나타남

기본으로 제공되는 것 외에 더 복잡한 모양으로 레이아웃을 정의하고 싶으면 커스텀 뷰를 만들어야 합니다.


 

반응형

'컴퓨터&IT > 안드로이드 Android' 카테고리의 다른 글

Android - HttpURLConnection 클래스  (0) 2011.08.24
Android - HTTP로 웹에 접근하기!!  (0) 2011.08.24
Android - 어댑터 뷰(AdapterView)  (0) 2011.08.24
Android - 어댑터(Adapter)  (1) 2011.08.24
Android - Activity  (0) 2011.08.24
반응형

어댑터 뷰(AdapterView)는 같은 종류의 뷰들을 특정한 방식으로 반복해서 보여주는데 적합하며, ListView, GridView, Gallery, Spinner가 그런 뷰 컨테이너 위젯에 속합니다.

ListView
뷰 객체들을 수직 방향의 목록 형태로 보여줍니다. 수직 스크롤을 지원하며 일반적으로 목록의 각 항목은 자료를 담은 뷰이고, 사용자는 목록의 한 항목을 선택해서 일정한 작업을 수행합니다.

GridView
뷰 객체들을 고정된 개수의 열들로 이루어진 격자(Grid) 형태(2차원의 표 형태)로 배치합니다. 격자의 각 칸에 이미지 아이콘이 배치되는 경우가 많으며 사용자는 한 항목을 선택해서 일정한 작업을 수행합니다.

Gallery
뷰 객체들을 수평 방향의 목록 형태로 표시합니다. 수평 스크롤을 지원하며 이미지를 표시하는데 흔히 쓰입니다. 사용자는 한 항목을 선택해서 일정한 작업을 수행합니다.

Spinner
목록을 표시한다는 면에서 리스트뷰와 용도가 동일하나 ListView는 항상 펼쳐져 있는데 비해 Spinner는 클릭할 때만 팝업으로 펼쳐집니다. 흔히 콤보박스라고 부르는 컨트롤이 바로 Spinner 위젯이며 화면지 좁은 모바일 환경에서 면적을 적게 차지하는 장점이 있지만 목록을 보려면 팝업을 열어야 하는 단점이 있습니다.


위의 컨테이너 위젯들은 모두 AdapterView 클래스에서 파생된 것이며 AdapterView는 Adapter객체를 통해 특정 데이터 소스로부터 가져온 자료들로 자식 뷰들을 만들어서 부모 컨테이너에 채워 넣을 수 있도록 합니다.

반응형

'컴퓨터&IT > 안드로이드 Android' 카테고리의 다른 글

Android - HTTP로 웹에 접근하기!!  (0) 2011.08.24
Android - 리스트 뷰(ListView)  (0) 2011.08.24
Android - 어댑터(Adapter)  (1) 2011.08.24
Android - Activity  (0) 2011.08.24
Android 인터페이스  (0) 2011.08.24
반응형

어댑터 (Adapter)

어댑터는 데이터를 사용자 인터페이스 뷰와 바인드하는 브리징 클래스 입니다. 어댑터는 각 항목을 표현하는데 사용되는 자식 뷰 생성과 하부에 놓은 데이터에 대한 접근 제공을 담당합니다.

어댑터 바인딩을 지원하는 사용자 인터페이스 컨트롤은 반드시 어댑터 뷰(AdapterView) 추상 클래스를 확장해야 합니다. 그리고 자신만의 어댑터 뷰(AdapterView) 파생 컨트롤을 만들고, 이들을 바인드하기 위한 새로운 어댑터 클래스를 만드는 것이 가능합니다.




어댑터는 데이터를 공급하는 것과 각 항목을 나타내는 뷰를 선택하는 것 모두를 담당하기 때문에 반인드된 컨트롤의 겉모습과 기능을 획기적으로 바꿀 수 있습니다.


어댑터는 원본 데이터를 항목 뷰를 만들어 어댑터 뷰의 항목으로 보여줍니다.


안드로이드가 제공하는 몇가지 어댑터
 ArrayAdapter
ArrayAdapter는 어댑터 뷰 객체를 배열에 바인드하는 일반적인 클래스입니다. 기본 적으로 각 객체의 toString 값을 레이아웃 내에 정의된 TextView 컨트롤에 바인드 합니다.

SimpleCursorAdapter
SimpleCursorAdapter는 뷰를 컨텐트 공급자 질의를 통해 리턴된 커서에 바인드 합니다. XML 레이아웃 정의를 지정한 뒤, 결과 셋의 각 열에 있는 값을 이 레이아웃에 있는 값에 바인드 합니다.
반응형

'컴퓨터&IT > 안드로이드 Android' 카테고리의 다른 글

Android - 리스트 뷰(ListView)  (0) 2011.08.24
Android - 어댑터 뷰(AdapterView)  (0) 2011.08.24
Android - Activity  (0) 2011.08.24
Android 인터페이스  (0) 2011.08.24
Android application의 구조와 Life cycle  (0) 2011.08.24
반응형

◆ ENTITY
선언해 놓은 엔티티의 이름을 속성 값으로 지정할 수 있게 해줍니다.
예를 들면 외부 이미지 파일을 참조하는 SNAPSHOT1이라는 이름의 엔티티를 선언해 놓고 IMAGE라는 이름의 속성을 만들어서 SNAPSHOT1이라는 인티티 이름을 지정할 수 있습니다.
<?xml version = "1.0" standalone="yes"?>
<!DOCTYPE DOCUMENT [                           
<!ELEMENT DOCUMENT (CUSTOMER)*>                
<!ELEMENT CUSTOMER (NAME,DATE,ORDERS)>         
<!ELEMENT NAME (LAST_NAME,FIRST_NAME)>           
<!ELEMENT LAST_NAME (#PCDATA)>                  
<!ELEMENT FIRST_NAME (#PCDATA)>                 
<!ELEMENT DATE (#PCDATA)>                      
<!ELEMENT ORDERS (ITEM)*>                      
<!ELEMENT ITEM (PRODUCT,NUMBER,PRICE)>         
<!ELEMENT PRODUCT (#PCDATA)>                   
<!ELEMENT NUMBER (#PCDATA)> 
<!ELEMENT PRICE (#PCDATA)>                     
<!ATTLIST CUSTOMER
    IMAGE ENTITY #IMPLIED>
<!ENTITY SNAPSHOT1 SYSTEM "image.gif">
]>
<DOCUMENT>
    <CUSTOMER IMAGE="SNAPSHOT1">
.
.
.
    </CUSTOMER>
</DOCUMENT>

◆ ENTITIES
ENTITIES는 공백으로 구분된 엔티티 이름의 목록을 가질 수 있습니다.
같은 속성에 여러 개의 엔티티를 할당하기 위해서 사용합니다.
<?xml version = "1.0" standalone="yes"?>
<!DOCTYPE DOCUMENT [
<!ELEMENT DOCUMENT (CUSTOMER)*>
<!ELEMENT CUSTOMER (NAME,DATE,ORDERS)>
<!ELEMENT NAME (LAST_NAME,FIRST_NAME)>
<!ELEMENT LAST_NAME (#PCDATA)>
<!ELEMENT FIRST_NAME (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT ORDERS (ITEM)*>
<!ELEMENT ITEM (PRODUCT,NUMBER,PRICE)>
<!ELEMENT PRODUCT (#PCDATA)>
<!ELEMENT NUMBER (#PCDATA)>
<!ELEMENT PRICE (#PCDATA)>
<!ATTLIST CUSTOMER
IMAGES ENTITY #IMPLIED>
<!ENTITY SNAPSHOT1 SYSTEM "image.gif">
<!ENTITY SNAPSHOT2 SYSTEM "image1.gif">
]>
<DOCUMENT>
<CUSTOMER IMAGES="SNAPSHOT1 SNAPSHOT2">
.
.
.
</CUSTOMER>
</DOCUMENT>
반응형
반응형

◆ ID
XML에서는 내부 응용 프로그램에서 구성요소들을 구분하기 위해 ID를 사용합니다.
ID 값은 특별한 의미를 가지므로 XML 처리기는 문서에서 ID형식의 속성값이 같은 두 개의 구성요소가 존재할 수 없다는 것을 알고 있습니다.
속성의 형식을 ID 형식으로 지정하기만 하면 속성의 이름에 관계 없이 ID속성이 됩니다.
그리고 #FIXED 속성은 같은 값을 갖기 때문에 ID 형식에서는 #FIXED를 사용할 수 없고 #REQUIRED를 사용합니다.
<?xml version = "1.0" standalone="yes"?>
<!DOCTYPE DOCUMENT [                           
<!ELEMENT DOCUMENT (CUSTOMER)*>                
<!ELEMENT CUSTOMER (NAME,DATE,ORDERS)>         
<!ELEMENT NAME (LAST_NAME,FIRST_NAME)>           
<!ELEMENT LAST_NAME (#PCDATA)>                  
<!ELEMENT FIRST_NAME (#PCDATA)>                 
<!ELEMENT DATE (#PCDATA)>                      
<!ELEMENT ORDERS (ITEM)*>                      
<!ELEMENT ITEM (PRODUCT,NUMBER,PRICE)>         
<!ELEMENT PRODUCT (#PCDATA)>                   
<!ELEMENT NUMBER (#PCDATA)> 
<!ELEMENT PRICE (#PCDATA)>                     
<!ATTLIST CUSTOMER
    CUSTOMER_ID ID #REQUIRED>
]>
<DOCUMENT>
    <CUSTOMER CUSTOMER_ID = "C1232231">
.
.
.
    </CUSTOMER>
    <CUSTOMER CUSTOMER_ID = "C1232232">
            .
.
.
    </CUSTOMER>
</DOCUMENT>

◆ IDREF
IDREF 형식은 문서의 구조에 대한 내용을 지정하기 위한 속성을 사용하고자 할 때 지정합니다. 특히 구성요소들 사이의 관계에 대한 내용을 지정하기 위해 사용하며 IDREF 속성은 문서의 다른 구성요소에 대한 ID값을 저장합니다.
<?xml version = "1.0" standalone="yes"?>
<!DOCTYPE DOCUMENT [                           
<!ELEMENT DOCUMENT (CUSTOMER)*>                
<!ELEMENT CUSTOMER (NAME,DATE,ORDERS)>         
<!ELEMENT NAME (LAST_NAME,FIRST_NAME)>           
<!ELEMENT LAST_NAME (#PCDATA)>                  
<!ELEMENT FIRST_NAME (#PCDATA)>                 
<!ELEMENT DATE (#PCDATA)>                      
<!ELEMENT ORDERS (ITEM)*>                      
<!ELEMENT ITEM (PRODUCT,NUMBER,PRICE)>         
<!ELEMENT PRODUCT (#PCDATA)>                   
<!ELEMENT NUMBER (#PCDATA)> 
<!ELEMENT PRICE (#PCDATA)>                     
<!ATTLIST CUSTOMER
    CUSTOMER_ID ID #REQUIRED
    EMPLOYER_ID IDREF #IMPLIED>
]>
<DOCUMENT>
    <CUSTOMER CUSTOMER_ID = "C1232231">
.
.
.
    </CUSTOMER>
    <CUSTOMER CUSTOMER_ID = "C1232232" EMPLOYER_ID="C1232231">
.
.
.
    </CUSTOMER>
</DOCUMENT>
위와 같이 문서의 일반적인 중첩 구조에 반영되어 있지 않은 부모-자식 관계를 설정하고자 하는 경우 구성요소의 IDREF 속성에 부모에 해당하는 구성요소의 ID를 지정합니다.
XML 처리기는 문서의 ID와 IDREF 구조를 내부 응용 프로그램으로 전달해주고, 응용 프로그램에서는 그 정보를 사용하여 문서의 구성요소 간의 관계를 재구성하루 수 있습니다.
반응형
반응형

◆ NMTOKEN
이 형식은 하나 이상의 알파벳, 숫자, 하이픈(-), 밑줄(_), 콜론(:), 마침표(.)로 구성된 값들만을 허용하며 공백을 포함 시킬 수 없습니다.
NMTOKEN 속성 값은 C++, Java, JavaScript의 변수에 적합한 이름과 매우 유사하므로 이들 이름을 내부 응용프로그램에서 자연스럽게 사용할 수 있습니다.

아래 예는 SHIP_STATE 라는 속성 이름을 선언하여 주문 내용이 선적되는 지역의 2글자 코드를 저장하도록 하고 이 속성을 NMTOKEN으로 하여 속성값이 하나 이상의 단어가 될 가능성을 배제시킵니다.
<?xml version = "1.0" standalone="yes"?>
<!DOCTYPE DOCUMENT [                           
<!ELEMENT DOCUMENT (CUSTOMER)*>                
<!ELEMENT CUSTOMER (NAME,DATE,ORDERS)>         
<!ELEMENT NAME (LAST_NAME,FIRST_NAME)>           
<!ELEMENT LAST_NAME (#PCDATA)>                  
<!ELEMENT FIRST_NAME (#PCDATA)>                 
<!ELEMENT DATE (#PCDATA)>                      
<!ELEMENT ORDERS (ITEM)*>                      
<!ELEMENT ITEM (PRODUCT,NUMBER,PRICE)>         
<!ELEMENT PRODUCT (#PCDATA)>                   
<!ELEMENT NUMBER (#PCDATA)> 
<!ELEMENT PRICE (#PCDATA)>                     
<!ATTLIST CUSTOMER
    SHIP_STATE NMTOKEN #REQUIRED>
]>
<DOCUMENT>
    <CUSTOMER SHIP_STATE = "CA">
        <NAME>
            <LAST_NAME>Smith</LAST_NAME>
            <FIRST_NAME>Sam</FIRST_NAME>
        </NAME>
        <DATE>October 15, 2003</DATE>
        <ORDERS>
            <ITEM>
                <PRODUCT>Tomatoes</PRODUCT>
                <NUMBER>8</NUMBER>
                <PRICE>$1.25</PRICE>
            </ITEM>
            <ITEM>
                <PRODUCT>Oranges</PRODUCT>
                <NUMBER>24</NUMBER>
                <PRICE>$4.98</PRICE>
            </ITEM>
        </ORDERS>
    </CUSTOMER>
    <CUSTOMER SHIP_STATE = "LA">
        <NAME>
            <LAST_NAME>Jones</LAST_NAME>
            <FIRST_NAME>Polly</FIRST_NAME>
        </NAME>
        <DATE>October 20, 2001</DATE>
        <ORDERS>
            <ITEM>
                <PRODUCT>Bread</PRODUCT>
                <NUMBER>12</NUMBER>
                <PRICE>$14.95</PRICE>
            </ITEM>
            <ITEM>
                <PRODUCT>Apples</PRODUCT>
                <NUMBER>6</NUMBER>
                <PRICE>$1.50</PRICE>
            </ITEM>
        </ORDERS>
    </CUSTOMER>
</DOCUMENT>


◆ NMTOKENS
NMTOKENS 속성 형식은 공백으로 구분되는 여러 개의 NMTOKEN들로 속성값을 구성하도록 지정할 수 있습니다.
아래 예는 CONTACT_NAME 속성에 NMTOKENS 형식을 지정해 성과 이름을 공백으로 구분하여 지정하도록 합니다.
<?xml version = "1.0" standalone="yes"?>
<!DOCTYPE DOCUMENT [                           
<!ELEMENT DOCUMENT (CUSTOMER)*>                
<!ELEMENT CUSTOMER (NAME,DATE,ORDERS)>         
<!ELEMENT NAME (LAST_NAME,FIRST_NAME)>           
<!ELEMENT LAST_NAME (#PCDATA)>                  
<!ELEMENT FIRST_NAME (#PCDATA)>                 
<!ELEMENT DATE (#PCDATA)>                      
<!ELEMENT ORDERS (ITEM)*>                      
<!ELEMENT ITEM (PRODUCT,NUMBER,PRICE)>         
<!ELEMENT PRODUCT (#PCDATA)>                   
<!ELEMENT NUMBER (#PCDATA)> 
<!ELEMENT PRICE (#PCDATA)>                     
<!ATTLIST CUSTOMER
    CONTACT_NAME NMTOKENS #IMPLIED>
]>
<DOCUMENT>
    <CUSTOMER CONTACT_NAME = "George Starr">
        <NAME>
            <LAST_NAME>Smith</LAST_NAME>
            <FIRST_NAME>Sam</FIRST_NAME>
        </NAME>
        <DATE>October 15, 2003</DATE>
        <ORDERS>
            <ITEM>
                <PRODUCT>Tomatoes</PRODUCT>
                <NUMBER>8</NUMBER>
                <PRICE>$1.25</PRICE>
            </ITEM>
            <ITEM>
                <PRODUCT>Oranges</PRODUCT>
                <NUMBER>24</NUMBER>
                <PRICE>$4.98</PRICE>
            </ITEM>
        </ORDERS>
    </CUSTOMER>
    <CUSTOMER CONTACT_NAME = "Ringo Harrison">
        <NAME>
            <LAST_NAME>Jones</LAST_NAME>
            <FIRST_NAME>Polly</FIRST_NAME>
        </NAME>
        <DATE>October 20, 2001</DATE>
        <ORDERS>
            <ITEM>
                <PRODUCT>Bread</PRODUCT>
                <NUMBER>12</NUMBER>
                <PRICE>$14.95</PRICE>
            </ITEM>
            <ITEM>
                <PRODUCT>Apples</PRODUCT>
                <NUMBER>6</NUMBER>
                <PRICE>$1.50</PRICE>
            </ITEM>
        </ORDERS>
    </CUSTOMER>
</DOCUMENT>

반응형
반응형

속성을 선언할 때에는 사용할 수 있는 기본값의 형식도 지정할 수 있습니다.

◆ CDATA
가장 간단한 속성 형식으로 간단한 문자 데이터를 가리킵니다.
마크업을 사용할 수 없으며, <, ", & 등의 문자들을 포함하는 문자열을 사용할 수 없습니다. 이런 문자를 사용하기 위해서는 미리 정의된 엔티티 참조(&lt;, &quot;, &amp;)를 사용해야합니다. 이들 엔티티 참조는 문서가 파싱될때 해당 문자로 바뀌게 됩니다.
<!ATTLIST CUSTOMER
    OWES CDATA "0"
    LAYAWAY CDATA "0"
    DEFAULTS CDATA "0"
>
]>


◆ 나열형
사용할 수 있는 값들의 목록을 지정합니다. 사용할 수 있는 각 값들은 첫 번째 글자가 반드시 알파벨 또는 밑줄(_)인 유효한 XML 이름이어야 합니다.
속성에 사용할 수 있는 값의 범위를 설정하고자 할 때 사용할 수 있습니다.(예 : 참|거짓, 요일 등등)
<?xml version = "1.0" standalone="yes"?>
<!DOCTYPE DOCUMENT [                           
.
.
.

<!ATTLIST CUSTOMER
    CREDIT_OK (TRUE | FALSE) "TRUE">
]>
<DOCUMENT>
    <CUSTOMER CREDIT_OK = "FALSE">
.
.
.

    </CUSTOMER>
</DOCUMENT>


◆ NOTATION
비-XML 데이터 형식을 가리키며, 외부 엔티티를 나타내기 위해 사용합니다.
가장 잘 알려진 형식으로는 image/gif, application/xml, text/html 등의 MIME형식이 있습니다.
NOTATION을 선언하려면 DTD에서 <!NOTATION> 구성요소를 사용해야 합니다.
<?xml version = "1.0" standalone="no"?>
<!DOCTYPE DOCUMENT [
.
.
.

<!NOTATION GIF SYSTEM "image/gif">
<!NOTATION JPG SYSTEM "image/jpeg">

<!ATTLIST CUSTOMER
IMAGE NMTOKEN #IMPLIED
IMAGE_TYPE NOTATION (GIF | JPG) #IMPLIED>
]>
<DOCUMENT>
<CUSTOMER IMAGE="image.gif" IMAGE_TYPE="GIF">
.
.
.

</CUSTOMER>
</DOCUMENT>
반응형
반응형

속성에 지정할 수 있는 기본 값의 종류를 살펴보면서, DTD에서 속성을 선언하는 방법을 알아보겠습니다.


◆ 직접적인 값

<!ATTLIST> 구성요소의 속성 선언에서 인용부호에 값을 직접 지정하여 속성의 기본 값을 지정할 수 있습니다.
<?xml version = "1.0" standalone="yes"?>
<!DOCTYPE DOCUMENT [     
.
.
.

<!ELEMENT NUMBER (#PCDATA)> 
<!ELEMENT PRICE (#PCDATA)>                     
<!ATTLIST CUSTOMER
    OWES CDATA "0"
    LAYAWAY CDATA "0"
    DEFAULTS CDATA "0"
>
]>
<DOCUMENT>
    <CUSTOMER OWES="$12.13" LAYAWAY="$0" DEFAULTS="0">
        <NAME>
            <LAST_NAME>Smith</LAST_NAME>
.
.
.

</DOCUMENT>


◆ #REQUIRED

기본값을 직정 지정하지 않지만 DTD를 사용하는 사람이 직접 값을 지정해야만 합니다.
문서에서 구성요소에 대한 추가 정보를 필요로 하는 경우에 유용하게 사용할 수 있습니다.
(이름, 이메일 주소, URI 등등)
<?xml version = "1.0" standalone="yes"?>
<!DOCTYPE DOCUMENT [
.
.
.

<!ELEMENT NUMBER (#PCDATA)>
<!ELEMENT PRICE (#PCDATA)>
<!ATTLIST CUSTOMER
    OWES CDATA #REQUIRED>

]>
<DOCUMENT>
    <CUSTOMER OWES="$0">
        <NAME>
            <LAST_NAME>Smith</LAST_NAME>
.
.
.

</DOCUMENT>


◆ #IMPLIED

속성의 기본 값으로 지정할 만한 것이 없으며, 문저의 작성자들도 이 속성을 사용할 필요가 없는 경우에 사용합니다.
XML 처리기에서 이 속성이 사용되지 않더라도 문제가 발생하지 않기 때문에 문서 작성자가 이 속성을 포함시킬 수는 있지만 반드시 포함시킬 필요는 없습니다.
속성들을 #IMPLIED로 선언하는 것이 일반적이며 그 이유는 작성자에 따라 그 속성들이 구성요소에 필요할 수도 있고 그렇지 않을 수도 있기 때문입니다.
<?xml version = "1.0" standalone="yes"?>
<!DOCTYPE DOCUMENT [
.
.
.

<!ELEMENT NUMBER (#PCDATA)>
<!ELEMENT PRICE (#PCDATA)>
<!ATTLIST CUSTOMER
OWES CDATA #IMPLIED>
]>
<DOCUMENT>
<CUSTOMER OWES="$23.99">
<NAME>
.
.
.

</ORDERS>
</CUSTOMER>
<CUSTOMER>
<NAME>
.
.
.

</ORDERS>
</CUSTOMER>
</DOCUMENT>


◆ #FIXED

#FIXED 키워드를 사용하면 속성들이 항상 고정된 값을 갖도록 구성할 수 있습니다. 속성에 대해 고정된 값을 설정해야 하므로 그 값을 지정해 주어야합니다.
<?xml version = "1.0" standalone="yes"?>
<!DOCTYPE DOCUMENT [
.
.
.

<!ELEMENT NUMBER (#PCDATA)>
<!ELEMENT PRICE (#PCDATA)>
<!ATTLIST CUSTOMER
LANGUAGE CDATA #FIXED "EN">
]>
<DOCUMENT>
<CUSTOMER>
.
.
.


</CUSTOMER>


</DOCUMENT>

위 문서에서는 <CUSTOMER>구성요소에 LANGUAGE 속성을 사용하지 않고 있음을 알 수 있는데 속성이 #FIXED로 선언되어 있기 때문에 XML 처리기에서는 상관하지 않고 그 속성과 값을 내부 응용프로그램에 전달하게 됩니다.
만약 지정해 놓은 기본값을 다지 지정하려고 하면 XML 처리기는 오류를 발생합니다.
반응형
반응형

속성은 이름과 값을 한 쌍으로 이루어 시작 태그와 내용이 빈 태그에 추가 정보를 지정하기 위해 사용합니다.
예를 들면 다음과 같은 형태입니다.
<CUSTOMER LAST_NAME="Smith" FIRST_NAME="Sam" DATA="July 10, 2011 PURCHASE="Tomatoes" PRICE="$1.25" NUMBER="8" />


◆ DTD에서 속성 선언하기

문서가 유효하기를 바란다면 사용하는 모든 속성들을 이전에 미리 선언해놓아야 합니다. 그리고 속성에 기본값을 지정하거나 DTD를 사용하는 XML 작성자가 속성값을 할당하도록 요청할 수도 있습니다.

<!ATTLIST> 구성요소를 통해 구성요소의 목록을 선언합니다.
<!ATTLIST 구성요소_이름
속성_이름   형식   기본값
속성_이름   형식   기본값
.
.
.
속성_이름   형식   기본값>

태그 안의 요소들은
구성요소_이름 : 속성을 사용하고자하는 구성요소의 이름
속성_이름 : 선언하고자 하는 속성의 이름
형식 : 속성의 형식
기본값 : 속성의 기본값
을 가리킵니다.


◆ 속성의 형식에 사용할 수 있는 값들

- CDATA : 아무런 마크업을 포한하지 않는 단순한 문자 데이터
- ENTITIIES : DTD에 선성되어 있는 다중 엔티티 이름으로 공백을 구분
- ENTITY : DTD에 선언되어 있는 엔티티 이름
- "나열형" : 값들의 목록을 타나태며, 목록 중에 있는 어떤 값이 속성 값이 됨
- ID : 고유해야 하는 적절한 XML 이름(ID 형식으로 다른 속성과 공유되면 안 됨)
- IDREF : 어떤 구성요소의 ID 속성값을 저장
- IDREFS : 공백으로 구분된 여러 개의 구성요소 ID
- NMTOKEN : 토큰 이름으로 하나 이상의 글자, 숫자, 하이픈(-), 밑줄, 콜론(:), 마침표(.) 등으로 구성
- NMTOKENS : 목록에 나열되는 여러 개의 공백으로 구분된 NMTOKEN들
- NOTATION : DTD에 선언되어 있는 notation 이름


◆ 기본값 설정으로 사용할 수 있는 것들

- 값(Value) : 인용부호에 포함된 단순한 텍스트값
- #IMPLIED : 해당 속성에 대한 기본값이 없음을 나타내며 이 속성은 사용되지 않을 수 있음
- #REQUIRED : 해당 속성의 기본 값은 없지만 반드시 값을 지정해야만 해당 문서가 유효함
- #FIXED : ""은 속성의 값을 가리키며, 속성은 항상 이 값을 가져야 함

반응형
반응형

파라미터 엔티티는 문서의 DTD에서 사용하는 엔티티를 말합니다.

일반 엔티티는 DTD에서 문서의 내용에 들어가는 텍스트를 삽입하기 위해서는 사용할 수 있지만 DTD의 선언에는 사용할 수 없습니다. 그래서 파라미터 엔티티를 구성요소와 속성 선언 시에 사용합니다.

파라미터 엔티티 참조는 DTD에서만 사용할 수 있으며, DTD에 선언에 사용된 모든 파라미터 엔티티 참조는 DTD의 외부에 존재하는 DTD의 일부분인 외부 서브셋(externet subset)에서만 사용할 수 있습니다. 내부 서브셋에서는 파라미터 엔티티를 사용할 수 있지만 제한적인 방법으로만 가능합니다.

파라미터 엔티티의 참조는 %로 시작하여 ;로 끝나며
<!ENTITY % 이름 정의>
와 같은 형태로 작성합니다.

외부 파라미터 엔티티는 다음과 같이 SYSTEM과 PUBLIC 키워드를 사용하여 선언할 수 있습니다.
<!ENTITY % 이름 SYSTEM URI>
<!ENTITY % 이름 SYSTEM FPI URI>


◆ 내부 파라미터 엔티티

BR 이라는 이름으로 <!ELEMENT BR EMPTY>텍스트를 나타내는 파라미터 엔티티를 선언하는 방법입니다. 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE DOCUMENT [
<!ENTITY % BR "<!ELEMENT BR EMPTY>">
<!ELEMENT DOCUMENT (CUSTOMER)*>
<!ELEMENT CUSTOMER (NAME, DATE, ORDERS)>
<!ELEMENT NAME (LAST_NAME, FIRST_NAME)>
<!ELEMENT LAST_NAME (#PCDATA)>
<!ELEMENT FIRST_NAME (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT ORDERS (ITEM)*>
<!ELEMENT ITEM (PRODUCT, NUMBER, PRICE)>
<!ELEMENT PRODUCT (#PCDATA)>
<!ELEMENT NUMBER (#PCDATA)>
<!ELEMENT PRICE (#PCDATA)>
%BR;
]>

위와 같은 경우 파라미터 엔티티를 선언하는 것 보다 ELEMENT를 직접 추가하는 편이 편합니다. 내부 파라미터 엔티티는 다른 선언문에 사용할 수 없기 때문에 내부 파라미터 엔티티로 할 수 있는 일은 많지 않습니다. 그래서 실제로 파라미터 엔티티의 용도를 이해하는데는 외부 파라미터 엔티티를 살펴보는 것이 좋습니다.


◆ 외부 파라미터 엔티티

DTD의 외부 서브셋 파라미터 엔티티를 사용할 때, 구성요소 선언을 포함한 DTD의 모든 곳에서 그 엔티티를 참조할 수 있습니다.
<!ENTITY % record "(NAME,DATE,ORDERS)">
<!ELEMENT DOCUMENT (CUSTOMER | BUYER | DISCOUNTER)*>                
<!ELEMENT CUSTOMER %record;>         
<!ELEMENT BUYER  %record;>         
<!ELEMENT DISCOUNTER  %record;>         
<!ELEMENT NAME (LAST_NAME,FIRST_NAME)>           
<!ELEMENT LAST_NAME (#PCDATA)>                  
<!ELEMENT FIRST_NAME (#PCDATA)>                 
<!ELEMENT DATE (#PCDATA)>                      
<!ELEMENT ORDERS (ITEM)*>                      
<!ELEMENT ITEM (PRODUCT,NUMBER,PRICE)>         
<!ELEMENT PRODUCT (#PCDATA)>                   
<!ELEMENT NUMBER (#PCDATA)> 
<!ELEMENT PRICE (#PCDATA)>

<CUSTOMER>,<BUYER>,<DISCOUNTER>가 서로 동일한 내용 모델을 가지므로 시간 절약을 위해 record라는 파라미터 엔티티를 지정합니다.

즉, 위와 같이 자주 반복되는 텍스트들을 DTD의 구성요소 선언에서 처리하기 위해 파라미터 엔티티를 사용합니다. 이렇게 파라미터 엔티티를 사용하면 DTD 구성요소의 선언을 수정할 필요가 있을 때 각 선언을 모두 수정하지 않고 파라미터 엔티티만을 수정하면 됩니다.


◆ INCLUDE와 IGNORE 사용하기

INCLUDE와 IGNORE는 DTD의 일부 구역을 포함하거나 제외시키기 위해 사용되는 명령어 입니다..
이 두 DTD명령어를 파라미터화 시켜 놓으면 파라미터 값을 INCLUDE또는 IGNORE로 바꾸기만 하면 DTD의 여러 구역을 포함 시키거나 제외 시킬 수 있습니다.
아래 DTD에서 빨갛게 표시한 INCLUDE 부분을 IGNORE로 바꾸면 PRODUCT_ID,SHIP_DATE, SKU 요소가 DTD에서 제외 되는 것입니다.
<!ENTITY % includer "INCLUDE">
<!ELEMENT DOCUMENT (CUSTOMER)*>                
<!ELEMENT CUSTOMER (NAME,DATE,ORDERS)>         
<!ELEMENT NAME (LAST_NAME,FIRST_NAME)>           
<!ELEMENT LAST_NAME (#PCDATA)>                  
<!ELEMENT FIRST_NAME (#PCDATA)>                 
<!ELEMENT DATE (#PCDATA)>                      
<!ELEMENT ORDERS (ITEM)*>                      
<!ELEMENT ITEM (PRODUCT,NUMBER,PRICE)>         
<!ELEMENT PRODUCT (#PCDATA)>                   
<!ELEMENT NUMBER (#PCDATA)> 
<!ELEMENT PRICE (#PCDATA)>
<![ %includer; [
<!ELEMENT PRODUCT_ID (#PCDATA)>
<!ELEMENT SHIP_DATE (#PCDATA)>
<!ELEMENT SKU (#PCDATA)>
]]>

반응형
반응형

DTD에는 속성(attribute)와 엔티티(entity) 를 선언할 수 있습니다.

엔티티(entity)
 엔티티란 데이터 항목을 참조하기 위한 XML의 방법으로 보통은 텍스트이지만 이진 데이터로 구성될 수도 있습니다.
 엔티티는 DTD에서 선언하며, 문서에서 참조를 통해 사용됩니다.
 XML문서의 내용에 사용되는 일반 엔티티의 참조는  &로 시작하여 ;로 끝나게 되며, DTD에서 사용하는 파라미터 엔티티의 참조는 %로 시작하여 ;로 끝나게 됩니다.


◆ 미리 정의되어 있는 일반 엔티티 참조

&amp;  -  &
&apos;  -  '
&gt  -  >
&lt  -  <
&quot  -  "

<?xml version="1.0" encoding="UTF-8"?>
<TEXT>
 This text about the &quot;S&amp;O Railroad&quot; is the &lt;TEXT&gt; element&apos;scontent.
</TEXT>


자신이 원하는 문자의 문자코드를 인코딩에 맞추어 지정해서 엔티티 참조를 만들 수도 있습니다.
예를 들어 UTF-8 인코딩에서 @의 문자 코드가 #64이므로 &#64; 라는 엔티티 참조는 @를 나타내게 됩니다.
<!ENTITY at "&#64;">
위와 같은 엔티티를 정의하면 &at; 이 @을 나타내게 됩니다.


◆ 내부 일반 엔티티 만들기

문서 내부에 <!ENTITY> 구성요소를 사용하여 <!ENTITY 이름 정의>형식으로 엔티티를 선언합니다.
&엔티티이름; 형태의 엔티티 참조를 통해 정의한 내용으로 바뀌게 됩니다.
<?xml version="1.0" encoding="UTF-8"?>

.
.

.



<!ENTITY TODAY "October 15, 2003">

]>
<DOCUMENT>
 <CUSTOMER>
  <NAME>
   <LAST_NAME>Smith</LAST_NAME> 
   <FIRST_NAME>Sam</FIRST_NAME>
  </NAME>
  <DATE>&TODAY;</DATE>
  <ORDERS>

.
.

.


아래와 같은 결과를 보실 수 있습니다.



일반 엔티티의 참조는 중첩해서 사용할 수 있습니다.
<!ENTITY NAME "Alfred Hitchcock">
<!ENTITY SIGNATURE "&NAME; 14 Mystery Drive">

단 아래와 같이 순환하여 참조하는 경우는 XML 처리기가 그 결과를 예측할 수 없기 때문에 참조할 수 없습니다.
<!ENTITY NAME "Alfred Hitchcock &SIGNATURE;">
<!ENTITY SIGNATURE "&NAME; 14 Mystery Drive">

그리고 일반 엔티티 참조는 아래 처럼 문서 자체가 아닌 DTD 에서만 사용되는 텍스트를 삽입하기 위한 경우도 사용할 수 없습니다.
<!ENTITY TAGS "NAME, DATE, ORDERS)">
<!ENTITY CUSTOMER &TAGS;>



◆ 외부 일반 엔티티 만들기

엔티티는 문서의 외부에 존재할 수 있는데, 이때는 XML 처리기가 엔티티를 찾을 수 있도록 URI를 제공해야 합니다.
외부 엔티티는 단순한 문자열, 문서 전체 또는 문서의 일부분이 될 수 있습니다. 그리고 XML 처리기의 관점에서 그 문서가 잘 구성되어야(well-formed) 하며 유효해야(valid)합니다.

외부의 ex_entity.xml 파일에 "July 6, 2011"이라는 텍스트가 저장되어 있으면

 

<?xml version="1.0" encoding="UTF-8"?>

.
.

.


<!ELEMENT PRICE (#PCDATA)>
<!ENTITY TODAY SYSTEM "ex_entity.txt">
]>
<DOCUMENT>
 <CUSTOMER>
  <NAME>
   <LAST_NAME>Smith</LAST_NAME> 
   <FIRST_NAME>Sam</FIRST_NAME>
  </NAME>
  <DATE>&TODAY;</DATE>
  <ORDERS>

.
.

.

</DOCUMENT>


위와 같이 엔티티 구성요소를 추가해서 TODAY라는 엔티티를 추가할 수 있습니다. 아래와 같은 결과를 볼 수 습니다.



◆ 조각들을 이용해 문서 만들기

외부 일반 엔티티를 사용하여 여러 조각을 이용해 문서를 구성할 수 있습니다. <DOCUMENT>요소 안의 내용을 &data; 로 합니다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE DOCUMENT [
<!ELEMENT DOCUMENT (CUSTOMER)*>
<!ELEMENT CUSTOMER (NAME, DATE, ORDERS)>
<!ELEMENT NAME (LAST_NAME, FIRST_NAME)>
<!ELEMENT LAST_NAME (#PCDATA)>
<!ELEMENT FIRST_NAME (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT ORDERS (ITEM)*>
<!ELEMENT ITEM (PRODUCT, NUMBER, PRICE)>
<!ELEMENT PRODUCT (#PCDATA)>
<!ELEMENT NUMBER (#PCDATA)>
<!ELEMENT PRICE (#PCDATA)>
<!ENTITY data SYSTEM "ch04_06.xml">
]>
<DOCUMENT>
 &data;
</DOCUMENT>

그리고 &data;로 참조될 <DOCUMENT>요소의 하위 요소 들을 외부 파일에 작성합니다.



브라우저에서 두 문서가 합쳐진 아래와 같은 결과를 보실 수 있습니다.

반응형

'컴퓨터&IT > XML' 카테고리의 다른 글

XML - [6] DTD:속성(Attribute)  (0) 2011.08.24
XML - [5] DTD:파라미터 엔티티  (0) 2011.08.24
XML - [3] Well-formed Document 와 Valid Document  (0) 2011.08.24
XML - [2] XML의 장점  (0) 2011.08.24
XML - [1] Markup Language  (0) 2011.08.24
반응형
Activity
액티비티는 하나의 사용자 인터페이스(UI)를 나타내는 단위 입니다.

하나의 앱에 여러개의 액티비티가 존재할 수 있습니다. 이 액티비티들은 각각 다른 액티비티와 독립되어 있지만 하나의 결합도니 인터페이스를 형성하기 위해 함께 동작합니다.

각각의 액티비티는 Activity 클래스를 상속하는 하위 클래스로 구현되며 하나의 윈도우가 기본적으로 제공됩니다. 윈도우 내의 컨텐츠는 VIew 클래스의 계층 구로에 의해 만들어 지고 각각의 View는 윈도우 내의 특정 영역을 제어하며 액티비티와 사용자간의 상호작용을 가능하게 합니다. parent view는 children view의 레이아웃을 포함하고 구조화하게 됩니다.  View는 Activity.setContentView() 메소드로 액티비티 윈도우 내에 위치하게 됩니다.

그리고 하나의 액티비티는  다른 앱의 액티비티를 포함한 다른 액티비티를 시작할 수 있습니다. 이 때 인텐트 객체에 필요한 정보를 추가한 후에 startActivity()의 파라미터로 전달하게 되면 다른 액티비티가 시작되게 됩니다.

이렇게 서로 다른 앱의 액티비티를 같은 Task 내에 유지함으로써 하나의 앱 처럼 사용자들은 사용할 수 있게 됩니다.


Task
태스크는 한의 스택 내에 정렬된 액티비티의 그룹으로 그 태스크를 시작했던 액티비티가스택의 root액티비티가 됩니다.

하나의 액티비티가 다른 액티비티를 시작할때 새로운 액티비티는 Push되어(스택에 올려짐) 실행상태가 됩니다. 이전의 액티비티는 스택에 남아서 사용자가 back키를 누러면 현재 액티비티가 Pop(스택에서 제거)되고, 이전의 액티비티는 resume(재개)되게 됩니다.

스택은 객체들은 포함하므로 태스크가 동일한 액티비티 하위 클래스의 인스턴스를 하나 이상 사지고 있다면 스택은 각각의 인스턴스에 대한 별도의 시작점을 가지게 됩니다.






반응형
반응형

안드로이드의 UI(사용자 인터페이스)는 View와 ViewGroup 객체를 사용하여 만들어집니다.

모든 View와 ViewGroup은 View 클래스의 하위 클래스가 되며 View 객체는 UI를 구성하는 기본 단위가 됩니다.

View 클래스는 버튼 같은 사용자 인터페이스 객체들을 제공하는 Widget에 대한 기반을 제공하고 ViewGroup 클래스는 Linear, Relative 같은 Layout에 대한 기반을 제공합니다.

View 객체는 하나의 데이터 구조로 구조의 속성에는 스크린의 특정 직사각 영역에 대한 제어를 하며, 사용자와 상호작용 지점이 되어 해당 상호작용 이벤트의 Receiver가 됩니다.

사용자 인터페이스는 선언적 방식절차적 방식으로 디자인 될 수 있습니다.

절차적 방식
절차적이란 코드에서 비롯한다는 뜻으로 예를 들면 자바로 코딩하여 JFrame, JButton 등의 모든 사용자 인터페이스 개체를 만들고 조정하는 방식을 말합니다.

선언적 방식
선언적 디자인은 XML이나 HTML같은 markup 언어로 페이지가 어떻게 작동하는지가 아니라 무엇을 나타내는지를 선언하는 방식입니다.

안드로이드는 두 가지 방식으로 만들어진 여러 프로그램 간의 차이를 좁히기 위해 절차적 방식과 선언적 방식 모두를 지원하기 때문에 자바 코드만으로 또는 XML descriptor 만으로 프로그램을 작성할 수 있습니다.
하지만 XML 코드가 자바 코드에 비해 짧고 이해가 쉽기 때문에 선언적 방식을 추천하고 있습니다.
반응형
반응형

XML 브라우저는 문서가 Well-formed Document인지 그리고 Valid Document 인지 확인합니다.
그럼 이 두 가지가 무슨 의미인지 알아보겠습니다.


Well-formed Document (잘 구성된 문서)

W3C에서 XML1.0 규격에 명시해 놓은 문법을 따르는 문서를 말합니다. 비공식적으로는 문서가 하나 이상의 구성요소를 포함해야하며, 하나 이상의 루트 구성요소가 다른 구성요소들을 포함하고 있어야함을 의미합니다. 또한 각 구성요소들은 적절히 쌍을 이루고 있어야합니다. <GREETING>으로 시작했다면 </GREETING>으로 끝나야겠죠? 그래서 아래 문서는 Well-formed Document라고 할 수 없는 것입니다.

<DOCUMENT>
<GREETING>
Hello XML
<MESSAGE>
</GREETING>

Welcome~~~!!
</MESSAGE>
</DOCUMENT>

 
Valid Document (유효한 문서)

대부분의 XML 브라우저들은 문서가 잘 구성되었는지를 확인하는데 일부 브라우저에서는 문서의 유효성까지도 확인합니다. 만약 문서가 DTD(Document Type Definition)이나 XML스키마에 연결되어 있고, 문서가 이들을 만족한다면 Valid Document라고합니다.
반응형

'컴퓨터&IT > XML' 카테고리의 다른 글

XML - [6] DTD:속성(Attribute)  (0) 2011.08.24
XML - [5] DTD:파라미터 엔티티  (0) 2011.08.24
XML - [4] DTD:엔티티(일반 엔티티)  (0) 2011.08.24
XML - [2] XML의 장점  (0) 2011.08.24
XML - [1] Markup Language  (0) 2011.08.24
반응형

쉬운 데이터 교환

일반적으로 응용프로그램끼리 데이터를 교환하려면 변환 프로그램이나 별도의 모듈이 필요합니다. 하지만 고유한 데이터 형식들이 복잡해 지면서 동일한 응용프로그램 조자 다른 버전의 데이터를 이전 버전에서 읽지 못하는 경우도 발생합니다.
XML은 데이터와 마크업은 문자열로 저장되어 직접 구성을 변경할 수 있습니다. 문제가 발생하더라고 모두 문자열로 구성되어 있기 때문에 직접 문서를 수정할 수도 있죠. 그리고 이들 데이터는 특허 또는 저작권 보호를 받는 어떤 방식으로도 코드화되지 않아서 접근성이 좋습니다.


마크업 언어의 사용자 정의

XML을 사용하면 사용자 정의가 가능한 마크업 언어를 만들 수 있습니다. 이미 수백 가지 언어들이 표준화 되어 있는데 한 가지 예를 들자면 CML(Chemical Markup Language)같은 새로운 마크업 언어를 통해 복잡한 분자들을 그래픽으로 표현하기도 합니다.


쉽게 알 수 있는 데이터

XML은 각 구성요소의 이름을 잘 지었다면 그 이름만으로도 어떤 내용인지 쉽게 알 수 있습니다. 이는 XML 문서 자체만으로도 충분한 설명이 될 수 있다는 것을 의미합니다.


구조화된 통합 데이터

XML은 데이터 뿐만 아니라 데이터의 구조도 지정할 수 있어서 다양한 구성요소들을 다른 구성요소에 어떻게 통합할 것인지를 지정할 수도 있습니다.

 
반응형
반응형


XML W3C에서 정의한 언어입니다. XML을 사용하여 자신의 구성 요소(element)들을 구성할 수 있으면 자신의 용도에 맞게 언어를 정의할 수 있습니다. XML에 대해 알아볼까요?


Markup Language(마크업 언어)

XML은 마크업 언어 입니다.
마크업 언어는 문서의 형식을 설명하는 모든 것을 가리킵니다. 예를 들자면 아래와 같이 표준 웹 페이지를 작성할 때 사용 되는 HTML(Hyper Text Markup Language)가 있습니다.

  <TITLE>태그는 제목 표시줄에 나타나는 내용을 의미하고
  <H1> 태그는 헤드라인을 의미합니다.
 

<HTML>
<HEAD>
<TITLE>Hello HTML</TITLE>
</HEAD>
<BODY>
<H1>Hello HTML</H1>
Welcome~~~~!!
</BODY>
</HTML>



HTML은 모든 구성요소들이 미리 정의되어 있어 사용에 충분치 못합니다. 예를 들면 <BODY>슬기</BODY>를 넣으면 그것이 텍스트인지는 알 수 있지만 '슬기'라는 명사인지, 누군가의 이름인지 명확히 구분하지 못합니다.
 
반면에 XML은 자신의 마크업 태그를 정의할 수 있기 때문에 <name>이라는 테그를 사람의 이름으로 정의하고 <name>슬기</name> 라고 적어 준다면 슬기라는 텍스트가 누군가의 이름이라는 의미를 가지게 되는 것이죠.

위와 같은 의미에서 XML을 메타-마크업 언어 라고 하기도 합니다.

그러면 XML은 어떻게 생긴 마크업 언어일까요?

<?xml version\"1.0" encoding="UTF-8"?>
<DOCUMENT>
<GREETING>
Hello XML.
</GREETING>
<MESSAGE>
Welcome~~~~!
</MESSAGE>
</DOCUMENT>


우선 "<?"로 시작하여 "?>"로 끝나는 부분은 XML 처리문 입니다. 현재 사용된 XML 버전과 문자 인코딩 정보 등을 나타냅니다.

모든 XML 태그는 "<" 로 시작하여 ">"로 끝납니다. 태그의 이름으로는 알파벳 또는 밑줄(_)로 시작하여 알파벳, 숫자, 문자, dot(.), 또는 하이픈(-)으로 구성된 모든 이름을 사용할 수 있습니다. 단 공백은 허용 되지 않습니다.

그리고 <DOCUMENT> 와 같은 시작태그로 시작하고 구성요소에는 텍스트나 또는 다른 구성용소 같은 어떤 내용도 포함 할 수 있으며, </DOCUMENT>와 같이 "</"로 시작하는 종료 태그로 끝나게 됩니다.

또 처리문은 제외하고 전체 문서는 하나의 구성요소에 포함 시켜야 하며 이를 root 구성요소라고 합니다. 위의 예에서는 <DOCUMENT>가 root구성요소입니다.

<GREETING>과 <MESSAGE>는 텍스트를 포함하고 있으며 이 둘은 root구성요소인 <DOCUMENT>에 포함됩니다.



HTML문서의 모든 태그는 미리 정의되어 있어 브라우저에서 이들은 처리하는 방식에 대해 잘 알고 있지만 새로 만들어낸 태그를 포함하는 XML 문서를 사용하기 위해서는 사람이 직접 구성요소에 의미를 부여하는 작업을 해야합니다.

새로 만든 구성요소에 의미를 부여하는 방법엔 크게 두가지가 있는데 첫 번째는 스타일 시트를 사용하여 새로 만든 구성요소들의 표시 형힉을 브라우저에 지정하는 것이고 두 번째는 프로그래밍 언어를 사용하여 XML 문서를 프로그래밍 코드로 처리하는 것입니다.



 

반응형
반응형

Windows server 2008 R2의 서버관리자에서 서버의 역할을 추가하거나 제거하고 관리할 수 있습니다.

Windows에서 제공하는 웹서버인 IIS7을 설치해보겠습니다.

먼저 '서버 관리자'를 실행시키고 '역할 추가'를 클릭해서 '역할 추가 마법사'를 실행시키고 각 단계를 진행합니다.

 

'시작하기 전'에서는 몇가지 보안 사항에 대한 확인 절차를 거칩니다. 다음을 클릭!



'서버 역할 선택'에서 우리가 설치하려고 하는 웹서버(IIS)를 선택하고 다음으로 넘어갑니다.


'웹 서버(IIS)'에서 IIS에 대한 간단한 소개와 추가 정보에 대한 링크를 보여줍니다.


'역할 서비스 선택'에서 원하는 기능을 선택한 후 다음으로 갑니다.


'설치 선택 확인'에서 앞에서 선택한 항목에 대한 확인 절차를 거칩니다. 확인하셨으면 설치를 클릭해서 설치를 진행합니다.


설치가 진행되고 있습니다 ^ㅁ^


설치가 완료되면 결과를 확인하고 닫기를 눌러 설치를 마칩니다.


서버 관리자에서 웹 서버(IIS)가 추가된 것을 확일 할 수 있습니다.


별도의 설치파일을 구해야하는 번거러움 없이 웹 서버를 설치할 수 있었습니다.
참 쉽죠!! ^ㅁ^
서버 관리자에 웹 서버 이외에도 DHCP나 DNS 서버 등 여러가지 서버나 서비스를 설치할 수 있습니다.
필요한 서버나 서비스를 설치해 보세요^^

 

 

 

 

 

 

 

반응형
반응형

안드로이드 앱은 task의 집합으로 안드로이드에서는 이 task를 activity라 부릅니다.
다시 말하면 하나의 activity는 앱이 수행하는 고유한 하나의 task라는 말이죠.

intent를 통해 현재 activity에서 다른 activity로 전환할 수 있습니다.
그리고 처음 화면에 띄워질 main activity는 AndroidManifest.xml 파일에서 결정합니다.


Activity의 Life cycle

  안드로이드 앱에서는 한 시점에 단 하나의 응용 프로그램 activity만이 foreground에서 실행됩니다. 우리가 자주 쓰는 윈도우와는 조금 다르죠.
  Activity callback 메서드를 이용해서 앱의 상태 및 자원을 관리합니다. 즉 한 activity의 Life cycle 동안 여러 상태를 거치게 되는데 그 때마다 적절한 callback 메서드가 호출되는 것입니다.



Activity callback 메서드
   
 onCreate(Bundle)
하나의 activity가 처음 시작되면 호출되며, setContentView() 메서드 호출과 같은 데이바인딩과 초기 설정 작업에 관여합니다.

 onStart()
activity가 사용자에게 곧 보여질 것을 나타냅니다.

 onResume()
한 activity가 스택의 제일 상위에 놓이고 foreground process가 되면 호출되는 메서드로 애니매이션이나 음악 같은 activity의 실행에 필요한 자원들을 준비하기에 적합한 메서드 입니다.

 onPause()
다른 activity가 스택의 최상위를 차지하면 현재 activity는 background로 밀려나고 이때 현재 activity의 onPause() 메서드가 호출됩니다. activity가 background에 있는 동안 필요하지 않은 자원을 해제할 마지막 기회로 onPause()메서드에서 자원을 많이 해제할 수록 activity가 background에서 죽을(kill) 가능성이 줄어듭니다.

 onStop()
activity가 사용자에서 더 이상 보여지지 않을 때 호출 되며 메모리가 얼마 남지 않았다면 호출되지 않고 시스템이 프로세스를 종료할 수 있습니다.

 onRestart()
activity가 정지 상태에서 다시 디스플레이될 때 호출됩니다.

 onSaveInstanceState(Bundle)
Activity가 죽어도 스택에서 제거되지는 않고 activity 객체의 상태가 하나의 Bundle객체에 저장됩니다. 예를 들면 텍스트 필드 내의 커서 위치에 대한 정보 처럼 activity의 필수 적이지 않은 상태를 Bundle객체에 저장합니다. 이 메서드는 디폴트 구현 값이 모든 사용자 인터페이스 제어 상태를 자동으로 저장하므로 구지 재정의할 필요는 없습니다.

 onDestroy()
activity의 lifecycle이 끝나거나 자원 부족으로 안드로이드가 activity를 죽일 때 호출 됩니다. 메모리가 얼마 남지 않았다면 호출되지 않고 시스템이 프로세스를 종료할 수 있습니다.

 onRestoreInstanceState(Bundle)
onSaveInstanceState() 메서드가 미리 저장해 둔 상태로부터 activity가 다시 초기화될 때 호출 됩니다.


반응형

'컴퓨터&IT > 안드로이드 Android' 카테고리의 다른 글

Android - Activity  (0) 2011.08.24
Android 인터페이스  (0) 2011.08.24
Android Application 구성요소(Component)  (2) 2011.08.24
Dalvik VM (Dalvik Virtual Machine)  (0) 2011.08.24
안드로이드 ? (Android)  (1) 2011.08.24
반응형

   안드로이드 앱에는 적절한 권한만 있으면 누구나 인스턴스화할 수 있는 4개의 컴포넌트가 있고 main()같은 유일한 진입점이 따로 없이 처음으로 생성되는 인스턴스의 생성자가 실질적 진입점이 됩니다.


4가지 구성요소

  Activity
 사용자 인터페이스의 기본 단위로 눈에 보이는 화면 하나를 뜻합니다. 여러 개의 View로 구성되며 App은  필요한 만큼 Activity를 가질 수 있고 그 중에 어떤 것을 화면에 띄울지 결정합니다.

  Service
UI 없이 백그라운드에서 실행되는 요소로 예를 들면 음악을 재생하는 코드를 들 수 있습니다. UI가 없기 때문에 사용자의 명령을 받아들일 수 있는 Activity와 연결해서 사용합니다.

  Broadcast Receiver(BR)
BR도 UI가 없는 것으로 시스템으로부터 전달되는 Broadcast를 대기하고 있다가 신호가 전달되면 수신하여 적절한 activity를 띄웁니다. 배터리가 떨어졌다는 신호나 데이터 전송이 완료 되었다는 등의 신호를 수신하는 역할로 이해하시면 되겠습니다.

  Content Provider(CP)
서로 다른 Application 사이에 데이터를 함부로 액세스 하지 못하도록 되어 있어 CP를 통해 프로그램간의 데이터를 공유할 수 있게 합니다. 예를 들자면 카카오톡 같은 프로그램에서 주소록의 데이터를 이용하는 것을 들 수 있겠지요.


Application은 4가지 요소 중 일부를 가질 수도 있고 여러 개를 가질 수도 있습니다.
이런 구성요소들의 구성은 manifest파일에 저장 관리 되며 최초 실행 시에 어떤 Activity를 화면에 띄울지도 같은 파일에 저장됩니다.

  구성요소간의 통신 수단 Intent
intent는 각 구성요소간의 통신을 위한 장치로 메시지에 대한 상세한 정보를 가지고 구체적인 행동을 설명하는 메카니즘입니다. 만약 '주소록 편집' activity를 호출하면 '누구의 주소를 어떻게 편집할지'가 intent에 실려 전달 됩니다. 
반응형

'컴퓨터&IT > 안드로이드 Android' 카테고리의 다른 글

Android - Activity  (0) 2011.08.24
Android 인터페이스  (0) 2011.08.24
Android application의 구조와 Life cycle  (0) 2011.08.24
Dalvik VM (Dalvik Virtual Machine)  (0) 2011.08.24
안드로이드 ? (Android)  (1) 2011.08.24

+ Recent posts