2013년 5월 31일 금요일

Generic

Generic을 사용하지 않았을 경우

 
-> 이렇게 할 경우 dto2의 인스턴스 변수의 타입이 StringBuilder인지 StringBuffer 인지 혼동될수가 있다.
그래서  이런경우는 instanceOf라는 예약어를 사용하여 타입을 점검해야한다.
 
 
-> 그래서 이런 타입 형 변환에서 발생할 수 있는 문제점을 "사전"에 없애기 위해 만들어진것이 제네릭이다.

 
-> 제네릭을 이용해서 형변환이 필요 없는것을 볼수 있다. 명시적으로 타입을 지정할 때 사용하는 것이 제네릭이다.
 
 
* 제네릭 타입의 이름
  E : 요소 (Element, 자바 컬렉션(Collection)에서 주로 사용)
  K : 키
  N : 숫자
  T : 타입
  V : 값
  S, U, V : 두번째, 세번째, 네번째에 선언된 타입
 
public void wildcardMethod(wildcardGeneric<?> c){
  Object value = c.getWildcard();
  System.out.println(value);
 
-> ?를 이용한 것은 메소드의 매개 변수로만 사용하는 것이 좋다.
 
 
< ? extend s Car> c
-> 이런식으로 정의한것은 제네릭 타입으로 Car을 상속받은 모든 클래스를 사용할 수 있다는 것을 의미
 


 <T extends Comparable<T>> 는 "자신과 비교될 수 있는 모든 타입 T" 라고 읽는다.

 
 
 
 

 
 

 

2013년 5월 30일 목요일

How to handle right to left swipe gestures

http://stackoverflow.com/questions/4139288/android-how-to-handle-right-to-left-swipe-gestures

Math 클래스

round() : 반올림
ceil() : 올림
floor() : 버림

System 클래스

static PrintStream out : 출력값을 처리할때 사용
static InputStream in : 입력값을 처리할 때 사용

System 클랫
   : 시스템 속성(Property) 값 관리
   : 시스템 환경 값 조회
   : GC 수행
   : JVM 종료
   : 현재 시간 조회
   : 기타 관리용 메소드

현재 시간 조회
currentTimeMillis() : 현재시간을 밀리초 단위로 리턴
nanoTime() : 현재 시간을 나노초 단위로 리턴 -> 시간측정시 이용

객체 출력시 toString() 보다는 valueOf()를 사용하는것이 안전.

public void printNull(){
   Object obj = null;
   System.out.println(obj.toString()); -> NullPointerException  발생
   System.out.println(obj + " is object's value"); -> obj+"is object's value" -> 이부분은 에러가 나지 않고 stringBuilder로 append 해준다.
}




팝업 입력창

팝업 입력창 참고사이트

http://bestchoi.tistory.com/8

2013년 5월 29일 수요일

숫자처리 클래스

숫자처리 클래스
 : 자바에서 간단한 계산을 할 때에는 대부분 기본 자료형을 사용
    -> 기본자료형은 자바의 힙(Heap)이라는 영역에 저장되지 않고, 스택(stack)이라는 영역에 저장된다.

기본자료형의 숫자를 객체로 처리해야 할 필요가 있는데 이런 처리하는 클래스들은 감싼(Wrapper) 클래스라고 부르며 모두 Number, abstract 클래스를 확장(extends)한다.

Character 클래스를 제외하고는 공통적인 메소드 ( parse타입이름(), valueOf() )를 제공한다.
parse타입이름() : 기본자료형 리턴
valueOf() : 참조자료형 리턴

참조자료형 중에서 더하기 연산이 가능한것은 String 뿐이지만 숫자를 나타내기 위한 Byte, Short, Integer, Long, Float, Double 타입들은 필요시 기본 자료형처럼 사용 가능.
따라서 new를 사용하여 객체를 만들지 않아도 값 할당 가능하다.

String 값 일부 추출

특정 조건에 맞는 문자열 확인
: startsWith(String prefix)
: endsWith(String suffix)

charAt(int index)
 : 특정 위치의 char값 리턴

getChars (int srcBegin, int srcEnd, char[] dst, int dstBegin)
 : 매개 변수로 넘어온 dst라는 char 배열 내에 srcBegin에서 srcEnd에 있는 char 저장
   이때 dst 배열의 시작위치는 dstBegin

codePointAt(int index)
 : 특정 위치의 유니코드 값을 리턴..

offsetByCodePoints(int index, int codePointOffset)
 : 지정된 index부터 오프ㅡ셋이 설정된 인덱스 리턴
 : 문자열 인코딩과 관련된 문제를 해결하기 위해 사용


char 배열의 값을 String으로 변환하는 메소드

copyValueOf(char[] data) : return -> static String
 : char 배열에 있는 값을 문자열로 변환

 char values[] = new char[]{'J', 'A', 'V', 'A'};
 String javaText = String.copyValueOf(values);

String의 값을 char 배열로 변환하는 메소드

 toCharArray() : return -> char[]

문자열을 합치는 메소드와 공백을 없애는 메소드
concat(String str) : return -> String

trim() : return -> String

특정 형식에 맞춰 값 치환
format(String format, Object... args) : return -> static String

%s : String
%d : 정수형
%f : 소수점
%% : %

String text = "제 이름은 %s입니다. 지금까지 %d 권의 책을 썻고, " +
"하루에 %f  %%의 시간을 책을 쓰는데 할애하고 있습니다.";
String realText = String.format(text, "이상민", 4, 10.5);







기본 자료형을 문자열로 변환

valueOf(...)

String 위치 찾아내는 방법

indexOf, lastIndexOf를 이용
  indexOf : 앞에서
  lastIndexOf : 뒷부분에서

    : return -> int


Git guide

Git guide site

http://rogerdudler.github.io/git-guide/index.ko.html

Git Site
http://git-scm.com/

Git Hub
https://github.com/

Git Proxy setting
http://swbae98.wordpress.com/2011/05/17/git-proxy-설정/git config --global
에서

3) git proxy 설정
$ git config --global http.proxy http://프록시서버:포트번호
 
path 설정
C:\Program Files\Git\cmd

2013년 5월 28일 화요일

Table Layout

TableLayout
    : 표 형태로 UI 구성 요소를 배치하는 레이아웃
    : 가장 구조적으로 레이아웃을 정의할 수 있는 방법
    : LinearLayout 클래스로부터 파생된 클래스.

    : TableLayout : 여러 TableRow들을 수직으로 배치
    : TableRow : 내부

Relative Layout

Relative Layout
    : UI 구성요소들 간의 상대적 위치 관계에 따라 UI 구성 요소를 배치하는 레이아웃
    : 각 UI 구성요소를 세밀하게 배치할 수 있어 좀 더 복잡한 화면을 구성하는데 적합
    : ViewGroup 클래스에서 파생된 클래스
    : xml 화면
    : 결과화면



Linear Layout

LinearLayout
    : 수평 또는 수직으로 UI구성 요소를 배치하는 레이아웃
    : ViewGroup의 속성들을 모두 그대로 사용가능.


    : xml 소스
   : 결과 화면


File Input/Output

InputStream / Reader

  InputStream : byte단위의 데이터 읽기 (1byte단위 처리 : 이미지나 데이터를 주고 받을때 많이 사용)
  Reader : char단위의 데이터 읽기 (2byte인 char단위 : 주로 문자열을 주고 받는 프로그래밍 할때)
 
 
클래스 이름이 InputStream으로 끝나는 경우
  무조건 데이터를 읽어내는 기능을 하는 클래스라고 생각하면 됨
  - FileInputStream :파일에서 데이터를 읽어들이는 기능을 가진 클래스
  - ZipInputStream : zip파일에서 데이터를 읽어들이는 기능을 가진 클래스
 
I/O 프로그래밍의 절차
  1. 원하는 대상을 정한다.
  2. 계열 객체를 구한다.
  3. 대상에 적절한 InputStream 계열의 파이프나 OutPutStream계열의 파이프를 연결
  4. 대상에서 읽거나 쓰기 작업을 한다.
  5. 모든 작업후에는 반드시 close()해서 파이프 연결 종료
 
 
InputStream에서 반드시 기억해야할 메소드 read()
  1. 한바이트의 데이터를 읽음
  2. 원하는 대상에서 데이터를 읽어내기 위해서 빨대를 연결하는 것처럼 InputStream을 연결하는 작업 필요
  3. 연결된 파이프를 통해서 read()해 주면 한 byte내용을 int타입으로 읽어냄
      - 숫자가 양수가 나올 수 있도록 내부적으로 조치함
      - 이때 int값이 -1일 경우 데이상 읽어낼 데이터가 없는 경우
     
      read() -> int : 한 byte에 쓰여진 데이터
      read(byte[]) -> int : 읽어낸 데이터는 byte[]안으로 들어가고 int는 몇개나 새로운 데이터가 읽어냈는지를 말한다.
      read(btte[]) 메서드는 한번에 byte[]만큼씩 데이터를 읽어냄
        : 한번에 4byte를 읽어들이는 보관장치(버퍼)
       

OutputStream : 바이트의 데이터를 기록할 수 있다.
  구하는 방식 두가지
    1. 어떤 클래스의 형태로 제공되는 경우
    2. 어떤 클래스의 어떤 메서드의 실행결과로 OutputStream 계열로 반환해주는 경우
 
  OutputStream 의 핵심기능 - Write()
    - 연결된 파이프를 통해서 write(int) 해주면 대상으로 데이터를 전송
    - write() -> int : 한 byte에 쓰여진 데이터
    - write(byte[]) -> int :읽어낸 데이터는 byte[]안으로 들어가고 int는 몇개나 새로운 데이터가 읽어냈는지를 말한다.
    - write(byte[], int, int) -> byte[]안에 있는 데이터들을 시작위치에서 몇개의 갯수만큼 데이터를 기록
   
  OutputStream의 기능 flush()
    - 스트림에 기록된 데이터를 확실히 보내 버릴때 사용하는 메서드
   
    문자열을 손쉽게 byte[]로 변환할수 있는 메서드 : getBytes();  
   
   
   
   
   
파일복사 프로그램의 원리와 실습
  1. 원본파일에는 FileInputStream 계열로 연결
  2. 복사해서 생성할 대상에는 FileOutputStream계열 파이프 연결(작성)
  3. 원본에서 데이터를 읽어낸다(read)
  4. 대상에서 읽어낸 데이터를 출력한다 (write)
  5. 더 이상 읽을 데이터가 없으면 모든 연결을 close()한다.
 
 
  파일을 한번에 읽고 한번에 쓰는 방법 :byte[]를 이용
 
  빠르고 정확한 파일 복사를 위해서 사용
    - write(byte[], int, int) : 앞으로 모든 java IO 프로그래밍에서 공통적으로 신경써야하는 코드
   
    - int count = in.read(buffer);
      : count변수를 통해 새로이 읽어온 데이터의 개수를 정확히 알 수 있게 되어있음
      : count결과를 이용해서 그 개수만큼만 데이터를 기록
        byte[] :실제 데이터가 담겨있는 byte[]
        int : byte[] 내에서 데이터를 기록할 시작의 인덱스 번호
        int : byte[] 내에서 몇개의 숫자를 기록할지 정하는 번호
             
       
       
ServletOutputStream

  : Provides an output stream for sending binary data to the client. A ServletOutputStream object is normally retrieved via the ServletResponse.getOutputStream() method.
    This is an abstract class that the servlet container implements. Subclasses of this class must implement the java.io.OutputStream.write(int) method.
   
    close, flush, write, write, write : Methods inherited from class java.io.OutputStream
   
   
   

ContentType

Content-Type 의 종류.

1) Multipart Related MIME 타입
  - Content-Type: Multipart/related <-- 기본형태
  - Content-Type: Application/X-FixedRecord
 
2) XML Media의 타입
 - Content-Type: text/xml
 - Content-Type: Application/xml
 - Content-Type: Application/xml-external-parsed-entity
 - Content-Type: Application/xml-dtd
 - Content-Type: Application/mathtml+xml
 - Content-Type: Application/xslt+xml

3) Application의 타입
 - Content-Type: Application/EDI-X12 <--  Defined in RFC 1767
 - Content-Type: Application/EDIFACT <--  Defined in RFC 1767
 - Content-Type: Application/javascript <-- Defined in RFC 4329
 - Content-Type: Application/octet-stream  : <-- 디폴트 미디어 타입은 운영체제 종종 실행파일, 다운로드를 의미
 - Content-Type: Application/ogg <-- Defined in RFC 3534
 - Content-Type: Application/x-shockwave-flash <-- Adobe Flash files
 - Content-Type: Application/json <-- JavaScript Object Notation JSON; Defined in RFC 4627
 - Content-Type: Application/x-www-form-urlencode <-- HTML Form 형태
* x-www-form-urlencode와 multipart/form-data은 둘다 폼 형태이지만 x-www-form-urlencode은 대용량 바이너리 테이터를 전송하기에 비능률적이기 때문에 대부분 첨부파일은 multipart/form-data를 사용하게 된다.

4) 오디오 타입
- Content-Type: audio/mpeg <-- MP3 or other MPEG audio
- Content-Type: audio/x-ms-wma <-- Windows Media Audio;
- Content-Type: audio/vnd.rn-realaudio <--  RealAudio;  등등

5) Multipart 타입
- Content-Type: multipart/mixed: MIME E-mail;
- Content-Type: multipart/alternative: MIME E-mail;
- Content-Type: multipart/related: MIME E-mail <-- Defined in RFC 2387 and used by MHTML(HTML mail)
- Content-Type: multipart/formed-data  <-- 파일 첨부

6) TEXT 타입
- Content-Type: text/css
- Content-Type: text/html
- Content-Type: text/javascript
- Content-Type: text/plain
- Content-Type: text/xml

String 문자열 비교

문자열 비교 method

- equals(Object anObject)
- equalsIgnoreCase(String anotherStr) : 대소문자 무시
- compareTo(String anotherStr)
    : 같으면 0 반환, String 객체가 알파벳 순으로 앞이면 양수, 뒤면 음수,
      알파벳 순서만큼 그 숫자값은 커진다.
- compareToIgnoreCase(String str) : 대소문자 무시
- contentEquals(CharSequence cs)
- contentEquals(StringBuffer sb)

 
 
- 자바에서는 객체들을 재사용하기 위해 Constant Pool이라는 것이 만들어져 있고, String의 경우 동일한 값을 갖는 객체가 있으면, 이미 만든 객체를 재사용한다.
 따라서 text와 text2 객체는 실제로는 같은 객체다. 그래서 결과가 윗부분 처럼 나온다.
 
 String text2 = new String("Check value") 이런식으로 객체를 생성하게 되면 값이 같은 String 객체를 생성한다고 하더라도 Constant Pool의 값을 재활용하지 않고 별도의 객체를 생성한다.
 그래서 결과는 밑에 부분처럼 나오게 된다.
 
 

따라서 값자체를 비교할때는 equlas()를 사용해야 한다.
메모리 주소도 같은지 확인하기 위해서는 == 을 사용한다.

String 문자열 byte로 변환

String 문자열 byte로 변환
    - getBytes()
    - getBytes(Charset charset)
    - getBytes(String charsetName)
       -> Charset은 UTF-8, UTF-16, EUC-KR등등을 나타냄


   

2013년 5월 27일 월요일

User Interface

- 텍스트 뷰

    : 텍스트를 화면에 표한하는 위젯
 

    : TextView에 속성 추가



- 버튼




    : CheckBox 위젯



    : ToggleButton 위젯


    :RadioButton 위젯


- 이미지뷰 및 이미지버튼

<ImageView
   android:id="@+id/ImageView01"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
//이미지 불러오는 부분
   android:src="@drawable/sample"/>





- EditText



    : AutoCompleteTextView




    : Spinner 위젯




        

JAVA Decompiler GUI Download

Eclipse -> Help -> Install New Software

추가
    http://java.decompiler.free.fr/jd-eclipse/update 


Resource 관리



- 리소스 소스코드에서 불러오기




- 리소스를 레이아웃 XML과 같은 다른 XML에서 사용하는 방법
   String Array : @array/이름
   Color : @color/이름
   dimen : @dimen/이름
   image : @drawable/이름




- XML파일 만들어서 불러오기

   /res 밑에 /xml폴더 생성



- 기타 원본 파일 리소스
  mp3, txt등 각종 원본 파일
    -> /res/raw 디렉토리 밑에서 관리됨
        -> openRawResource() 메소드를 호출해서 사용 : return : InputStream 객체







AndroidManifest.xml

- 안드로이드 애플리케이션에 대한 각종 정보를 기술한 애플리케이션 명세서

    1. 애플리케이션의 이름과 버전 정보
    2. 애플리케이션의 컴포넌트들
        (액티비티, 서비스, 브로드캐스트 리시버, 컨텐트 프로바이더 등)
    3. 애플리케이션 실행에 필요한 권한
    4. 기타 다양한 애플리케이션 구성 정보



Activity Lifecycle








Android 애플리케이션 구조

    - 액티비티 : 안드로이드 애플리케이션이 실행되는 기본적인 단위로서 사용자와 상호
                       작용하는 작업을 수행하는 컴포넌트

    - 서비스 : 화면에 표시되지 않고 백그라운드에서 작업을 수행하는 컴포넌트

    - 브로드캐스트 리시버 : 불특정 다수에게 발송된 메시지에 대해 응답하여 해당 작업을
                                        처리할 수 있는 컴포넌트

    - 컨텐트 프로바이더 : 애플리케이션 내의 데이터를 다른 애플리케이션과 공유할 수 있
                                     게 하는 컴포넌트


onCreate : 액티비티가 생성되어 시작될때 처음으로 호출되는 메소드

onStart : 액티비티가 사용자에게 화면을 보여줄 준비가 되었을때 호출되는 메소드
               (주로 사용자에게 액티비티를 보여주기 위해 필요한 리소스 설정

onResume : 액티비티가 액티비티 스택의 최상위에 놓여서 사용자에게 화면을 보여주고 
                    사용자의 입력을 처리할 수 있을 때 호출되는 메소드 
                    (오디오나 동영상, 애니메이션 등과 같이 화면 맨 앞에서 실행되고 있을 때만
                     필요한 리소스들을 설정하기 좋은 메소드)

onPause : 액티비티가 사용자 초점을 잃었을때 호출되는 메소드
                  (onResume)에 대응되는 한쌍의 메소드
                  onResume() 메소드에서 재생을 시작한 오디오나 동영상, 애니메이션을 중단해
                  야 하고, DB와 같은 리소스들도 해제해야 함

onStop : 다른 액티비티가 액티비티 스택의 최상위에 놓이면서, 현재 액티비티는 더 이상 
               화면에 보이질 않게 될때 호출되는 메소드

onDestroy : 액티비티가 파괴되기 전에 호출되는 메소드

onRestart : 액티비티가 더 이상 화면에 보이지 않게 되었다가 다시 화면을 보여줘야 할때 
                    호출되는 메소드
                    (onStart() 메소드가 호출되기전에 필요한 설정 작업을 수행)





First