2013년 6월 11일 화요일
2013년 6월 10일 월요일
temp
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/totalNumberLabel"
android:text="@string/total_number" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:id="@+id/total_number_of_people" />
</LinearLayout>
<!-- 2nd Line -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/totalAmountLabel"
android:text="@string/total_amount" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:id="@+id/total_amount" />
</LinearLayout>
<!-- 2nd Line -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/totalAmountLabel"
android:text="장소" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:id="@+id/total_amount" />
</LinearLayout>
<!-- 2nd Line -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/totalAmountLabel"
android:text="날짜" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:id="@+id/total_amount" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="bottom" >
<Button
android:id="@+id/smlManual"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="추가" >
</Button>
<Button
android:id="@+id/smlAuto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="주소록" >
</Button>
<Button
android:id="@+id/smlSendMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="그룹목록" >
</Button>
</LinearLayout>
<ListView
android:id="@+id/smlListView"
android:layout_width="fill_parent"
android:layout_height="0px"
android:layout_weight="1"
android:transcriptMode="alwaysScroll" >
</ListView>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="bottom" >
<Button
android:id="@+id/smlConfirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="2차입력" >
</Button>
<Button
android:id="@+id/smlCancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="전송" >
</Button>
</LinearLayout>
<!-- <LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="bottom" >
<Button
android:id="@+id/smlManual"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/smlManual" >
</Button>
<Button
android:id="@+id/smlAuto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/smlAuto" >
</Button>
<Button
android:id="@+id/smlSendMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/smlSendMessage" >
</Button>
</LinearLayout>
--></LinearLayout>
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/totalNumberLabel"
android:text="@string/total_number" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:id="@+id/total_number_of_people" />
</LinearLayout>
<!-- 2nd Line -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/totalAmountLabel"
android:text="@string/total_amount" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:id="@+id/total_amount" />
</LinearLayout>
<!-- 2nd Line -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/totalAmountLabel"
android:text="장소" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:id="@+id/total_amount" />
</LinearLayout>
<!-- 2nd Line -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/totalAmountLabel"
android:text="날짜" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:id="@+id/total_amount" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="bottom" >
<Button
android:id="@+id/smlManual"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="추가" >
</Button>
<Button
android:id="@+id/smlAuto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="주소록" >
</Button>
<Button
android:id="@+id/smlSendMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="그룹목록" >
</Button>
</LinearLayout>
<ListView
android:id="@+id/smlListView"
android:layout_width="fill_parent"
android:layout_height="0px"
android:layout_weight="1"
android:transcriptMode="alwaysScroll" >
</ListView>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="bottom" >
<Button
android:id="@+id/smlConfirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="2차입력" >
</Button>
<Button
android:id="@+id/smlCancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="전송" >
</Button>
</LinearLayout>
<!-- <LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="bottom" >
<Button
android:id="@+id/smlManual"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/smlManual" >
</Button>
<Button
android:id="@+id/smlAuto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/smlAuto" >
</Button>
<Button
android:id="@+id/smlSendMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/smlSendMessage" >
</Button>
</LinearLayout>
--></LinearLayout>
2013년 6월 9일 일요일
Thread
Thread
: 프로세스가 하나 시작할려면 많은 자원이 필요하다. 만약 하나의 작업을 동시에 수행하려고 할 때 여러 개의 프로세스를 띄워서 실행하면 각각 메모리를 할당해주어야 한다. JVM은 기본적으로 아무런 옵션 없이 실행하면 OS마다 다르지만 36~64MB의 물리 메모리를 점유한다. 그에 반해서 쓰레드를 추가하면 1MB이내의 메모리를 점유한다. 그래서 쓰레드를 경량 프로세스라고 부른다.
Runnable 인터페이스와 Thread 클래스
: run() : 쓰레드가 시작되면 수행되는 메소드
: 프로세스가 하나 시작할려면 많은 자원이 필요하다. 만약 하나의 작업을 동시에 수행하려고 할 때 여러 개의 프로세스를 띄워서 실행하면 각각 메모리를 할당해주어야 한다. JVM은 기본적으로 아무런 옵션 없이 실행하면 OS마다 다르지만 36~64MB의 물리 메모리를 점유한다. 그에 반해서 쓰레드를 추가하면 1MB이내의 메모리를 점유한다. 그래서 쓰레드를 경량 프로세스라고 부른다.
Runnable 인터페이스와 Thread 클래스
: run() : 쓰레드가 시작되면 수행되는 메소드
결과값이 항상 고정된 값이 나오는 것이 아님.
-> 쓰레드라는것을 start() 메소드를 통해서 시작했다는 것은 프로세스가 아닌 하나의 쓰레드를 JVM에 추가하여 실행한다는 것이다. 쓰레드를 기동시키는 runBasic() 메소드에서 runnable이라는 객체를 Thread 클래스의 start() 메소드로 시작한다. 이때 시작한 start() 메소드가 끝날 때까지 기다리지 않고 그 다음 줄에 있는 thread라는 객체의 start() 메소드를 실행한다. 이 줄도 마찬가지로 새로운 쓰레드를 시작하므로 run() 메소드가 종료될 때까지 기다리지 않고, 바로 다음줄로 넘어간다.
2013년 6월 8일 토요일
java.util 패키지
1. Date와 Calendar
: 날짜 처리
: Calendar
-> public abstract class Calendar extends Object
implements Serializable, Cloneable, Comparalbe<Calednar>
: getInstance() 메소드를 통해 객체 생성
: getInstance() : 기본 객체 생성 메소드, 모든 값은 기본값이며, 현재 시간으로 지정된
Calendar 객체 생상
: getInstance(Locale aLocale) : 지정된 지역의 Calendar 객체 생성
: getInstance(TimeZone, zone) : 지정된 타임존의 Calendar 객체 생성
: getInstance() 메소드를 사용하여 Calendar 객체를 생성할수 있지만 TimeZone과 같이
JDK 기본 API에서는 GregorianCalendar라는 클래스를 제공한다.
: add(int field, int amount) : add(Calendar.DATE, amount) : 지정한 field 값을 amount 만큼 더함.
: roll(int field, int amount) : 지정한 field 값을 amount 만큼 더하는데 그 상위값은 변경x
-> 2000년12월 31일에서 roll()메소드를 사용하면 상위값을 변경하지 않으므로
10일을 더한 2000년 12월 10일이 된다.
2. Collections
: 모든 메소드들이 static 메소드이다.
: 1) 데이터 검색 : binarySearch(), min(), max(), indexOfSubList(), lastIndexOfSubList(),
frequency()
2) 데이터 정렬 : sort()
3) 데이터 순서 변경 : reverse(), shuffle(), swap(), rotate(), reverseOrder()
4) 데이터 변경 및 추가 : fill(), replaceAll(), addAll()
5) 데이터 복사 : copy(), nCopies()
6) 데이터 삭제 : emptySet(), emptyList(), emptyMap()
7) 데이터 추출 : newSetFromMap()
8) 데이터 비교 : disjoint()
9) 타입 변환 : enumeration(), list(), asLifoQueue()
10) 쓰레드 안전 여부 속성 추가 : synchronizedCollection().....
: 대부분의 Collection클래스들은 쓰레드에 안전하게 구현되어 있지 않다. 쓰레드에 안전한 클래스로 사용할려면 synchronizedList..등을 이용하면 된다.
3. Arrays
: 배열을 쉽게 처리하기 위해 도움을 주는 클래스
: 1) 정렬 : sort()
2) 검색 : binarySearch()
3) 비교 : equals(), deepEquals()
4) 데이터 변경 : fill() : 특정 값으로 데이터를 채우는 메소드
5) 복사 : copyOf(), copyOfRange()
6) 변환 : asList()
7) 해시코드 : hashCode(), deepHashCode()
8) 문자열 변환 : toString()
4. StringTokenizer
: 문자열 자르기 위한 클래스
: split() 메소드를 사용하기를 권장함.
5. Properties
6. Random
: 이 클래스는 매개변수가 없는 생성자와 long을 매개변수로 받는 생성자가 있다.
: nextBytes(byte[]), nextInt(), nextInt(int), nextLong(), nextBoolean(), nextFloat(), nextDouble(),
nextGaussian()
7. Formatter
8. java.math 패키지의 BigDecimal 클래스
: float 나 double은 정확한값을 제공하지 않고 근사치를 제공한다. 그러므로 정확한 숫자 계산이 필요할 경우에는 BigDecimal을 사용하여야 한다.
: 정확한 계산을 위해서는 문자열을 매개 변수로 받는 생성자를 사용해야 한다.
: 날짜 처리
: Calendar
-> public abstract class Calendar extends Object
implements Serializable, Cloneable, Comparalbe<Calednar>
: getInstance() 메소드를 통해 객체 생성
: getInstance() : 기본 객체 생성 메소드, 모든 값은 기본값이며, 현재 시간으로 지정된
Calendar 객체 생상
: getInstance(Locale aLocale) : 지정된 지역의 Calendar 객체 생성
: getInstance(TimeZone, zone) : 지정된 타임존의 Calendar 객체 생성
: getInstance() 메소드를 사용하여 Calendar 객체를 생성할수 있지만 TimeZone과 같이
JDK 기본 API에서는 GregorianCalendar라는 클래스를 제공한다.
: add(int field, int amount) : add(Calendar.DATE, amount) : 지정한 field 값을 amount 만큼 더함.
: roll(int field, int amount) : 지정한 field 값을 amount 만큼 더하는데 그 상위값은 변경x
-> 2000년12월 31일에서 roll()메소드를 사용하면 상위값을 변경하지 않으므로
10일을 더한 2000년 12월 10일이 된다.
2. Collections
: 모든 메소드들이 static 메소드이다.
: 1) 데이터 검색 : binarySearch(), min(), max(), indexOfSubList(), lastIndexOfSubList(),
frequency()
2) 데이터 정렬 : sort()
3) 데이터 순서 변경 : reverse(), shuffle(), swap(), rotate(), reverseOrder()
4) 데이터 변경 및 추가 : fill(), replaceAll(), addAll()
5) 데이터 복사 : copy(), nCopies()
6) 데이터 삭제 : emptySet(), emptyList(), emptyMap()
7) 데이터 추출 : newSetFromMap()
8) 데이터 비교 : disjoint()
9) 타입 변환 : enumeration(), list(), asLifoQueue()
10) 쓰레드 안전 여부 속성 추가 : synchronizedCollection().....
: 대부분의 Collection클래스들은 쓰레드에 안전하게 구현되어 있지 않다. 쓰레드에 안전한 클래스로 사용할려면 synchronizedList..등을 이용하면 된다.
3. Arrays
: 배열을 쉽게 처리하기 위해 도움을 주는 클래스
: 1) 정렬 : sort()
2) 검색 : binarySearch()
3) 비교 : equals(), deepEquals()
4) 데이터 변경 : fill() : 특정 값으로 데이터를 채우는 메소드
5) 복사 : copyOf(), copyOfRange()
6) 변환 : asList()
7) 해시코드 : hashCode(), deepHashCode()
8) 문자열 변환 : toString()
4. StringTokenizer
: 문자열 자르기 위한 클래스
: split() 메소드를 사용하기를 권장함.
5. Properties
6. Random
: 이 클래스는 매개변수가 없는 생성자와 long을 매개변수로 받는 생성자가 있다.
: nextBytes(byte[]), nextInt(), nextInt(int), nextLong(), nextBoolean(), nextFloat(), nextDouble(),
nextGaussian()
7. Formatter
8. java.math 패키지의 BigDecimal 클래스
: float 나 double은 정확한값을 제공하지 않고 근사치를 제공한다. 그러므로 정확한 숫자 계산이 필요할 경우에는 BigDecimal을 사용하여야 한다.
: 정확한 계산을 위해서는 문자열을 매개 변수로 받는 생성자를 사용해야 한다.
2013년 6월 2일 일요일
Map 인터페이스
Map
put(K key, V value) : 첫번째 매개변수인 키를 갖고 두번째 매개변수인 값을 갖는 데이터를
저장
putAll(Map<? extends K, ? extends V> m) : 매개 변수로 넘어온 Map의 모든 데이터를 저장
get(Object key) : 매개 변수로 넘어온 키에 해당하는 값을 넘겨준다.
remove(Object key) : 매개 변수로 넘어온 키에 해당하는 값을 넘겨주며 map에서 삭제
keySet() : Key의 목록을 Set 타입으로 리턴
values() : 값의 목록을 Collection 타입으로 리턴한다.
: 종류 : HashMap, TreeMap, LinkedHashMap
여러 쓰레드에 동시에 접근하여 처리할 필요가 있을 때
Map m = Collections.synchronizedMap(new Hashmap(...));
HashMap
Object -> AbstractMap<K, V> -> HashMap<K, V>
: Serializable, Cloneable, Map<E>
HashMap<String, String> map = new HashMap<String, String>();
map.put("A", "a");
map.put("C", "c");
map.put("D", "d");
Set<String> keySet = map.keySet();
for(String tempKey : keySet){
System.out.println(tempKey + " = " + map.get(tempKey));
}
-> 현재 map에 저장된 key, value에 대한 값을 가져온다.
Set의 값을 뿌려주기 때문에 데이터가 정렬되어 나오진 않는다.
HashMap에 저장하는 키가 되는 객체를 직접 만들었을 경우 유의사항
-> 직접 어떤 클래스를 만들어 그 클래스를 키로 사용할 때에는 Object 클래스의 hashCode() 메소드와 equals() 메소드를 잘 구현해놓아야 한다
-> HashMap에 객체가 들어가면 hashCode() 메소드의 결과 값에 따른 버켓(bucket) 이라는 List 형태의 저장소가 만들어진다. 만약 서로 다른 키가 저장되었는데, hashCode() 메소드의 결과가 동일하다면 이 버켓에 여러개의 값이 들어갈수 잇다. 따라서 get() 메소드가 호출되면 hashCode()의 결과를 확인하고 버켓에 들어간 목록에 데이터가 여러개일경우 equals() 메소드를 호출하여 동일한 값을 찾게 된다.
정렬된 키의 목록을 원한다면 TreeMap 사용
put(K key, V value) : 첫번째 매개변수인 키를 갖고 두번째 매개변수인 값을 갖는 데이터를
저장
putAll(Map<? extends K, ? extends V> m) : 매개 변수로 넘어온 Map의 모든 데이터를 저장
get(Object key) : 매개 변수로 넘어온 키에 해당하는 값을 넘겨준다.
remove(Object key) : 매개 변수로 넘어온 키에 해당하는 값을 넘겨주며 map에서 삭제
keySet() : Key의 목록을 Set 타입으로 리턴
values() : 값의 목록을 Collection 타입으로 리턴한다.
: 종류 : HashMap, TreeMap, LinkedHashMap
여러 쓰레드에 동시에 접근하여 처리할 필요가 있을 때
Map m = Collections.synchronizedMap(new Hashmap(...));
HashMap
Object -> AbstractMap<K, V> -> HashMap<K, V>
: Serializable, Cloneable, Map<E>
HashMap<String, String> map = new HashMap<String, String>();
map.put("A", "a");
map.put("C", "c");
map.put("D", "d");
Set<String> keySet = map.keySet();
for(String tempKey : keySet){
System.out.println(tempKey + " = " + map.get(tempKey));
}
-> 현재 map에 저장된 key, value에 대한 값을 가져온다.
Set의 값을 뿌려주기 때문에 데이터가 정렬되어 나오진 않는다.
HashMap에 저장하는 키가 되는 객체를 직접 만들었을 경우 유의사항
-> 직접 어떤 클래스를 만들어 그 클래스를 키로 사용할 때에는 Object 클래스의 hashCode() 메소드와 equals() 메소드를 잘 구현해놓아야 한다
-> HashMap에 객체가 들어가면 hashCode() 메소드의 결과 값에 따른 버켓(bucket) 이라는 List 형태의 저장소가 만들어진다. 만약 서로 다른 키가 저장되었는데, hashCode() 메소드의 결과가 동일하다면 이 버켓에 여러개의 값이 들어갈수 잇다. 따라서 get() 메소드가 호출되면 hashCode()의 결과를 확인하고 버켓에 들어간 목록에 데이터가 여러개일경우 equals() 메소드를 호출하여 동일한 값을 찾게 된다.
정렬된 키의 목록을 원한다면 TreeMap 사용
2013년 6월 1일 토요일
Set 인터페이스
Set은 순서에 상관없이, 어떤 데이터가 존재하는지를 확인하기 위한 용도로 많이 사용된다.
-> 중복되는것을 방지하고, 원하는 값이 포함되어 있는지를 확인하는 것.
: 주요 클래스 : HashSet, TreeSet, LinkedHashSet
HashSet : 순서가 전혀 필요 없는 데이터를 해시 테이블에 저장한다. Set 중에 성능이 제일 좋음
TreeSet : 저장된 데이터의 값에 따라서 정렬되는 셋이다. red-black이라는 트리타입으로 값이
저장되며 HashSet보다 약간 느리다.
LinkedHashSet : 연결된 목록 타입으로 구현된 해시 테이블에 데이터를 저장한다.
저장된 순서에 따라서 값이 정렬. 제일 느림
p.s : red-black : http://ko.wikipedia.org/wiki/레드-블랙_트리
HashSet
: Object -> AbstractCollection<E> -> AbstractSet<E> -> HashSet<E>
AbstractSet은 3개의 메소드만 구현되어 있다.
-> equals(), hashCode(), removeAll()
-> equals()와 hashCode() 메소드를 ㄱ현하는 부분은 Set에서 매우 중요.
: 로드팩터 : (데이터 개수) / (저장 공간) 을 의미.
주요 메소드
add(E e) : 데이터 추가
clear() : 모든 데이터 삭제
clone() : HashSet객체를 복제한다. 하지만 담겨있는 데이터들은 복제하지 않는다.
contains(Object o) : 지정한 객체가 존재하는지 확인
isEmpty() : 데이터가 있는지 확인
iterator() : 데이터를 꺼내기 위한 Iterator 객체를 리턴
-> 중복되는것을 방지하고, 원하는 값이 포함되어 있는지를 확인하는 것.
: 주요 클래스 : HashSet, TreeSet, LinkedHashSet
HashSet : 순서가 전혀 필요 없는 데이터를 해시 테이블에 저장한다. Set 중에 성능이 제일 좋음
TreeSet : 저장된 데이터의 값에 따라서 정렬되는 셋이다. red-black이라는 트리타입으로 값이
저장되며 HashSet보다 약간 느리다.
LinkedHashSet : 연결된 목록 타입으로 구현된 해시 테이블에 데이터를 저장한다.
저장된 순서에 따라서 값이 정렬. 제일 느림
p.s : red-black : http://ko.wikipedia.org/wiki/레드-블랙_트리
HashSet
: Object -> AbstractCollection<E> -> AbstractSet<E> -> HashSet<E>
AbstractSet은 3개의 메소드만 구현되어 있다.
-> equals(), hashCode(), removeAll()
-> equals()와 hashCode() 메소드를 ㄱ현하는 부분은 Set에서 매우 중요.
: 로드팩터 : (데이터 개수) / (저장 공간) 을 의미.
주요 메소드
add(E e) : 데이터 추가
clear() : 모든 데이터 삭제
clone() : HashSet객체를 복제한다. 하지만 담겨있는 데이터들은 복제하지 않는다.
contains(Object o) : 지정한 객체가 존재하는지 확인
isEmpty() : 데이터가 있는지 확인
iterator() : 데이터를 꺼내기 위한 Iterator 객체를 리턴
LinkedList 클래스
: A라는 하나의 값이 추가되면 열차의 맨 앞칸에 데이터를 집어 넣는다. 이때 LinkedList의 가장 앞의 값도 A이며, 가장 끝에 있는 값도 A이다. 이 상태에서 B라는 데이터를 더 집어 넣으면 가장 앞에 있는 값은 A가 되고 가장 뒤에 있는 값은 B가 된다.
여기서 A는 뒤에 B가 있다는 것을, B는 A가 앞에 있다는 것을 기억하고 있다.
그 다음에 C라는 값을 집어 넣으면 가장 앞에는 A, 그 다음에는 B 마지막에는 C가 위치한다.
여기서 LinkedList는 앞에 있는 애와 뒤에 있는 애만 기억한다. 다시 말해서 A는 뒤에 있는 값이 B라는 것만 알고, C가 있따는 것을 생각도 안한다.
배열의 중간에 있는 데이터가 지속적으로 삭제되고, 추가될 경우에는 LinkedList가 배열보다 메모리 공간 측면에서 훨씬 유리하다.
그 이유는 LinkedList는 중간에 있는 데이터를 삭제하면, 지운 데이터의 앞에 있는 데이터와 뒤에 있는 데이터를 연결하면 그만이다.
LinkedList가 자체가 List이면서 Queue, Deque가 된다.
: Object -> AbstractionCollection<E> -> AbstractList<E> -> AbstractSequentialList<E> -> LinkedList<E>
: 구현한 인터페이스 : Serializable, Cloneable, Iterable<E>, Collection<E>, Deque<E>, List<E>, Queue<E>
: addFirst(Object) : LinkedList객체의 가장 앞에 데이터를 추가한다.
: addLast(Object) : LinkedList 객체의 가장 뒤에 데이터를 추가한다.
: set(int, Object) : LinkedList 객체의 특정 위치에 있는 데이터를 수정한다. 그리고 기존에
있던 데이터를 리턴한다.
: getFirst(), peekFirst(), peek(), element() : 객체의 맨 앞에 있는 데이터를 리턴한다.
: getLast(), peekLast() : 객체의 맨뒤에 있는 데이터를 리턴.
: remove(), removeFirst(), poll(), pollFirst() : 객체의 가장 앞에 있는 데이터를 삭제하고 리턴
: pollLast(), removeLast() : 객체의 가장 끝에 있는 데이터를 삭제하고 리턴
: remove(int) : 매개 변수에 지정된 위치에 있는 데이터를 삭제하고 리턴
: listItreator(int) : 매개변수가 지정된 위치로부터의 데이터를 검색하기 위한 ListIterator 객체를 리턴한다.
: Set : 중복된 데이터를 처리
: Queue : 먼저 들어온 데이터를 먼저 처리 FIFO
: 여러 쓰레드에서 들어오는 작업을 순차적으로 처리할대 많이 사용
Shallow copy And Deep copy
Shallow copy와 Deep copy
Shallow copy : list2 = list와 같이 다른 객체에 원본 객체의 주소 값만을 할당하는 것.
Deep copy : 객체의 모든 값을 복사하여 복제된 객체에 있는 값을 변경해도 원본에 영향이
없도록 할 때.
ex) 배열을 복사 할때 System클래스의 arraycopy()와 같은 메소드를 이용하면 Deep copy를
쉽게 처리할 수 있다.
Shallow copy : list2 = list와 같이 다른 객체에 원본 객체의 주소 값만을 할당하는 것.
Deep copy : 객체의 모든 값을 복사하여 복제된 객체에 있는 값을 변경해도 원본에 영향이
없도록 할 때.
ex) 배열을 복사 할때 System클래스의 arraycopy()와 같은 메소드를 이용하면 Deep copy를
쉽게 처리할 수 있다.
각 인터페이스 및 용도
Serializable : 원격으로 객체를 전송하거나, 파일에 저장할 수 있음을 지정
Cloneable : Object 클래스의 Clone() 메소드가 제대로 수행될 수 있음을 지정. 즉 복제가 가능한
객체임을 의미
Iterable<E> : 객체가 "for-each"문장을 사용할수 있음을 지정
Collection<E> : 여러 개의 객체를 하나의 객체에 담아 처리할 때의 메소드ㅡ 지정
List<E> : 목록형 데이터를 처리하는 것과 관련된 메소드 지정
RandomAccess : 목록형 데이터에 보다 빠르게 접근할 수 있도록 임의로 접근하는 알고리즘에
적용된다는 것을 지정
Deque<E> : 맨 앞과 맨 뒤의 값을 용이하게 처리하는 큐와 관련된 메소드 지정
Cloneable : Object 클래스의 Clone() 메소드가 제대로 수행될 수 있음을 지정. 즉 복제가 가능한
객체임을 의미
Iterable<E> : 객체가 "for-each"문장을 사용할수 있음을 지정
Collection<E> : 여러 개의 객체를 하나의 객체에 담아 처리할 때의 메소드ㅡ 지정
List<E> : 목록형 데이터를 처리하는 것과 관련된 메소드 지정
RandomAccess : 목록형 데이터에 보다 빠르게 접근할 수 있도록 임의로 접근하는 알고리즘에
적용된다는 것을 지정
Deque<E> : 맨 앞과 맨 뒤의 값을 용이하게 처리하는 큐와 관련된 메소드 지정
List 인터페이스
List 인터페이스를 구현한 클래스
: ArrayList, Vector, Stack, LinkedList
ArrayList, Vector : 크기 확장이 가능한 배열
ArrayList의 객체는 여러 명이 달려들어 값을 변경하려고 하면 문제가 발생하지만
Vector은 그렇지 않다.
ArrayList는 Thread safe하지 않고 Vector은 Thread safe하다.
Stack : Vector 클래스를 확장하여 만들었다.
LIFO(List in First Out)를 지원하기 위해.
LinkedList : List에 속하면서 Queue에도 속한다.
ArrayList
: Object -> AbstarctCollection<E> -> AbstractList<E> -> Arraylist<E>
: ArrayList에서 구현한 각 인터페이스
-> Serializable, Cloneable, Iterable<E>, Colleciton<E>, List<E>, RandomAccess
Stack 클래스
: Object -> AbstractCollection<E> -> AbstractList<E> -> Vector<E> -> Stack<E>
: 구현한 인터페이스는 ArrayList와 동일
peek() : 객체의 가장 위에 있는 데이터를 리턴한다.
pop () : 객체의 가장 위에 있는 데이터를 지우고, 리턴한다.
push(E item) : 매개 변수로 넘어온 데이터를 가장 위에 저장한다.
search(Object o) : 매개 변수로 넘어온 데이터의 위치를 리턴한다.
: ArrayList, Vector, Stack, LinkedList
ArrayList, Vector : 크기 확장이 가능한 배열
ArrayList의 객체는 여러 명이 달려들어 값을 변경하려고 하면 문제가 발생하지만
Vector은 그렇지 않다.
ArrayList는 Thread safe하지 않고 Vector은 Thread safe하다.
Stack : Vector 클래스를 확장하여 만들었다.
LIFO(List in First Out)를 지원하기 위해.
LinkedList : List에 속하면서 Queue에도 속한다.
ArrayList
: Object -> AbstarctCollection<E> -> AbstractList<E> -> Arraylist<E>
: ArrayList에서 구현한 각 인터페이스
-> Serializable, Cloneable, Iterable<E>, Colleciton<E>, List<E>, RandomAccess
indexOf () : 앞에서부터 찾을때
lastIndexOf() : 뒤에서부터 찾을 때
toArray() : 객체에 있는 데이터들을 배열로 뽑아낼 때 사용
-> toArray()는 리턴 타입이 Object[]이므로 toArray(T[] a)를 사용하는것이 좋다.
String[] strList = list.toArray(new String[0]);
removeAll()사용
ArrayList<String> temp = new ArrayList<String>();
temp.add("A");
list.removeAll(temp); (removeAll(Collection<?> c)
ArrayList를 여러 쓰레드에서 덤벼도 안전하게 만들려면 아래와 같이 객체 생성
Stack 클래스
: Object -> AbstractCollection<E> -> AbstractList<E> -> Vector<E> -> Stack<E>
: 구현한 인터페이스는 ArrayList와 동일
peek() : 객체의 가장 위에 있는 데이터를 리턴한다.
pop () : 객체의 가장 위에 있는 데이터를 지우고, 리턴한다.
push(E item) : 매개 변수로 넘어온 데이터를 가장 위에 저장한다.
search(Object o) : 매개 변수로 넘어온 데이터의 위치를 리턴한다.
자바 컬렉션
자바에서 데이터를 담는 자료구조
1. 순서가 있는 목록인 List형
2. 순서가 중요하지 않은 목록인 Set형
3. 먼저 들어온 것이 먼저 나가는 Queue형
4. 키-값(key-value) 으로 저장되는 Map형
-> 여기서 유일하게 Map만이 Collection과 관련없는 별도의 인터페이스로 선언되어 있다.
1. 순서가 있는 목록인 List형
2. 순서가 중요하지 않은 목록인 Set형
3. 먼저 들어온 것이 먼저 나가는 Queue형
4. 키-값(key-value) 으로 저장되는 Map형
-> 여기서 유일하게 Map만이 Collection과 관련없는 별도의 인터페이스로 선언되어 있다.
public interface Collection<E> extends Iterable<E>
-> Iterator이라는 인터페이스는 추가 데이터가 있는지 확인하는 hasNext() 메소드ㅡ
현재 위치를 다음 요소로 넘기고 그 값을 리턴해주는 Next() 메소드
데이터를 삭제하는 remove(0 메소드가 있다.
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일 목요일
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 해준다.
}
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 해준다.
}
2013년 5월 29일 수요일
숫자처리 클래스
숫자처리 클래스
: 자바에서 간단한 계산을 할 때에는 대부분 기본 자료형을 사용
-> 기본자료형은 자바의 힙(Heap)이라는 영역에 저장되지 않고, 스택(stack)이라는 영역에 저장된다.
기본자료형의 숫자를 객체로 처리해야 할 필요가 있는데 이런 처리하는 클래스들은 감싼(Wrapper) 클래스라고 부르며 모두 Number, abstract 클래스를 확장(extends)한다.
Character 클래스를 제외하고는 공통적인 메소드 ( parse타입이름(), valueOf() )를 제공한다.
parse타입이름() : 기본자료형 리턴
valueOf() : 참조자료형 리턴
참조자료형 중에서 더하기 연산이 가능한것은 String 뿐이지만 숫자를 나타내기 위한 Byte, Short, Integer, Long, Float, Double 타입들은 필요시 기본 자료형처럼 사용 가능.
따라서 new를 사용하여 객체를 만들지 않아도 값 할당 가능하다.
: 자바에서 간단한 계산을 할 때에는 대부분 기본 자료형을 사용
-> 기본자료형은 자바의 힙(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(...)
: 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(...)
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
에서
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 : 내부
: 표 형태로 UI 구성 요소를 배치하는 레이아웃
: 가장 구조적으로 레이아웃을 정의할 수 있는 방법
: LinearLayout 클래스로부터 파생된 클래스.
: TableLayout : 여러 TableRow들을 수직으로 배치
: TableRow : 내부
Relative Layout
Relative Layout
: UI 구성요소들 간의 상대적 위치 관계에 따라 UI 구성 요소를 배치하는 레이아웃
: 각 UI 구성요소를 세밀하게 배치할 수 있어 좀 더 복잡한 화면을 구성하는데 적합
: ViewGroup 클래스에서 파생된 클래스
: UI 구성요소들 간의 상대적 위치 관계에 따라 UI 구성 요소를 배치하는 레이아웃
: 각 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
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
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)
따라서 값자체를 비교할때는 equlas()를 사용해야 한다.
메모리 주소도 같은지 확인하기 위해서는 == 을 사용한다.
- 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등등을 나타냄
- 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
추가
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() 메소드가 호출되기전에 필요한 설정 작업을 수행)
- 액티비티 : 안드로이드 애플리케이션이 실행되는 기본적인 단위로서 사용자와 상호
작용하는 작업을 수행하는 컴포넌트
- 서비스 : 화면에 표시되지 않고 백그라운드에서 작업을 수행하는 컴포넌트
- 브로드캐스트 리시버 : 불특정 다수에게 발송된 메시지에 대해 응답하여 해당 작업을
처리할 수 있는 컴포넌트
- 컨텐트 프로바이더 : 애플리케이션 내의 데이터를 다른 애플리케이션과 공유할 수 있
게 하는 컴포넌트
onCreate : 액티비티가 생성되어 시작될때 처음으로 호출되는 메소드
onStart : 액티비티가 사용자에게 화면을 보여줄 준비가 되었을때 호출되는 메소드
(주로 사용자에게 액티비티를 보여주기 위해 필요한 리소스 설정
onResume : 액티비티가 액티비티 스택의 최상위에 놓여서 사용자에게 화면을 보여주고
사용자의 입력을 처리할 수 있을 때 호출되는 메소드
(오디오나 동영상, 애니메이션 등과 같이 화면 맨 앞에서 실행되고 있을 때만
필요한 리소스들을 설정하기 좋은 메소드)
onPause : 액티비티가 사용자 초점을 잃었을때 호출되는 메소드
(onResume)에 대응되는 한쌍의 메소드
onResume() 메소드에서 재생을 시작한 오디오나 동영상, 애니메이션을 중단해
야 하고, DB와 같은 리소스들도 해제해야 함
onStop : 다른 액티비티가 액티비티 스택의 최상위에 놓이면서, 현재 액티비티는 더 이상
화면에 보이질 않게 될때 호출되는 메소드
onDestroy : 액티비티가 파괴되기 전에 호출되는 메소드
onRestart : 액티비티가 더 이상 화면에 보이지 않게 되었다가 다시 화면을 보여줘야 할때
호출되는 메소드
(onStart() 메소드가 호출되기전에 필요한 설정 작업을 수행)
피드 구독하기:
글 (Atom)