p. 421

제네릭

 - E: 요소 

 - K:키 

 - V:값

 - N: 숫자

 - T:타입

 - S,U,V :  두번째, 세번째, 네번째에 선업되는 타입


* 제네릭의 wildCard 타입

 - 메소드 선언시 제네릭 타입의 제한을 해소하기 위하여 특정 타입대신 <?> 사용

 - 해당 타입을 정확히 모르기 때문에 Ojbect로 받음                                                                                                                                                                                                  


* 제한있는 WildCard 타입                                                                        

 - 아무런 제약없는<?>는 어떤 타입도 올수 있으므로 타입의 제한을 걸어둔다.

 - <? extends TypeName>과 같이 TypeName 클래스를 확장한 모든 클래스를 의미.


* 제네릭한 메소드 선언

 - wildCard 사용시에는 매개 변수로 넘어온 타입을 변경할 수 없음

 - 메소드를 제네릭하게 선언하면 제네릭 타입의 값을 변경 가능


*쓰레드

 - 자바 프로그램 하나 실행시 하나의 프로세스가 추가되고, 그 안에 여러개의 쓰레드가 수행된다. 필요시에 쉽게 쓰레드를 추가하여 실행가능.

 *쓰레드를 시작할 수 있는 인터페이스와 클래스

  - java.lang.Runnable.

  - java.lang.Thread


*쓰레드 정리*

 - Runnable 인터페이스나 Thread 클래스를 직/간접적으로 구현한 클래스만 쓰레드로 처리될 수 있다.

 - 쓰레드 선언시에는 public void run() 메소드를 꼭 선언해야 한다.

 - 쓰레드를 시작하려면 쓰레드 객체의 start() 메소드를 호출하면 선언되어 있는 run() 메소드가 실행된다.

 - 쓰레드는 run() 메소드가 종료되면 끝난다.

 - 단, 쓰레드를 Daemon으로 선언한 경우에는 프로세스 내의 다른 쓰레드들이 종료되면 run() 메소드가 종료되지 않더라도 해당 쓰레드는 종료된다.

 - 쓰레드를 실행한 메소드에서 쓰레드가 종료될 때까지 대기하려면, join() 메소드를 사용하면된다.

 - Ojbect 클래스에 선언된 wait() 메소드를 호출하면 쓰레드는 대기 상태가 되며, notify()나 notifyAll() 메소드를 호출하면 깨어난다.

 - 수행중인 쓰레드를 종료시키려면 interrupt() 메소드를 호출하면된다. intterrupt() 메소드를 호출한다고 모든 쓰데르가 종료되는것은 아니며, join(), sleep(), wait() 메소드가 호출된 상태에서는 중지된다.


- 쓰래드 status

 - NEW: 쓰레드 객체는 생성되었찌만, 아직 시작되지는 않은 상태

 - Runnable :  쓰레드가 실행중인 상태

 - Blocked :  쓰레드가 실행 중지 상태이며, 모니터 락이 풀리기를 기다리는 상태

 - Waiting : 쓰레드가 대기중인 상태

 - Terminated : 쓰레드가 종료된 상태


**Synchronized 

 - 하나의 객체를 공유하는 아무리 많은 쓰레드가 동시에 이 메소드에 접근한다고 하더라도 하나의 쓰레드만 해당 메소드를 수행할수 있다.

 - 이 예약어를 사용하여 synchronized 블록을 만들면  동일한 객체를 공유하는 블록은 하나의 쓰레드에서만 수행 가능


**Object

 - clone: 객체의 복사본을 만들어 리턴

 - equals : 현재 객체와 매개변수로 넘겨받은 객체가 같은지 확인

 - finalize : 현재 객체가 더이상 쓸모가 없어졌을때 GC(가비지 컬렉터)에 의해서 이 메소드가 호출된다.

 - getClass: 현재 객체의 Class 클래스의 객체를 리턴

 - hashCode :  객체에 대한 해시 코드 값을 리턴

 - String to String :  객체를 문자열로 표현하는값을 리턴

 - wait,notify,notifyAll :  쓰레드 처리시 사용하는 메소드들..


** String

 - new를 사용하여 객체를 생성할수 있는 유일한 클래스

 - 더하기 연산이 가능하다.

 - 더하기 연산을 할 경우 String 클래스는 기존 문자열은 버리고 새로운 객체를 생성

 - getBytes :  문자열을 byte 배열로 변경

 - length: 문자열의 길이를 리턴

 - isEmpty: 문자열이 비어있는지 확인 (★★★★★)

 - equals: 두 문자열의 값이 같은지 확인 (★★★★★)

 - startWith, endsWith: 매개변수로 넘어온 문자열로 시작하는지, 끝나는지 확인

 - contains :  매개변수로 넘어온 문자열이 포함되어 있는지 확인

 - indexOf, lastIndexOf :  매개 변수로 넘어온 문자열이 있는 위치를 0부터 시작하는 값으로 리턴, 만약 없으면 -1리턴 (★★★★★)

 - subString, subsequence :  문자열의 특정 범위값을 잘라서 리턴 (★★★★★)

 - split :  문자열을 매개변수로 넘어온 정규 표현식에 따라서 String 배열로 리턴

 - concat :  기존 문자열 뒤에 매개변수로 넘어온 문자열을 합침 (★★★★★)

 - trim :  문자열의 맨 앞과 뒤에 있는 공백 제거(★★★★★)

 - replace :  문자열의 특정 위치의 내용을 매개 변수로 넘어온 값으로 변경

 - format :  문자열을 정해진 포맷으로 변환


**StringBuffer, String Builder

 - String의 단점을 보완하기 위해서 제공되는 클래스

 - StringBuffer는 쓰레드에 안전하고, StringBuilder는 그렇지 못하다.

 - append() 메소드를 사용하여 문자열을 더할수 있다.

 - 만약 문자열을 더하면 컴파일러에서 StringBuilder 클래스로 변환


**System Class

 - 시스템클래스에서는 시스템 속성, 환경, GC 수행, JVM종료(사용x), 현재 시간 조회, 기타 관리용 메소드들 등이 있음

 * getProperties, getProperty : 속성값을 확인할때 사용

 * setProperties, setProperty :  속성 값을 지정할때 사용

 * currentTimeMillis :  밀리초 단위의 현재 시간을 long타입으로 제공(1/1,000)초

 * nanoTime :  시간 측정용 메소드로 현재시간을 얻기위해서 사용하면안됨. (1/1,000,000,000 초)



**Collection 

 - 순서가 있는 목록형

 - 순서가 중요하지 않은 셋(set)형

 - 먼저 들어온 것이 먼저 나가는 큐(Queue)형

 - 키-값(key-value)으로 저장되는 맵(Map)형

 * java.util.Collection

 - List, Set, Queue 타입 구현의 모태가 되는 인터페이스

 - Iterable 인터페이스가 확장되어 있다.

 - Add, AddAll(): 데이터 담기용 메소드

 - Contains(), ContainsAll(), isEmpty(), equals(), size() :  데이터 확인용 메소드

 - clear(), remove(), removeAll() : 데이터 삭제용 메소드


** LIST

 - 각 데이터에 대한 위치가 있다.

 - 위치에 있는 데이터를 꺼내거나 지우고, 원하는 위치에 데이터를 저장하는 작업을 할 수 있다.

 - 특정 데이터의 중복 허용

 - 순서대로 들어오는 데이터를 담아둘 때 용이

 - Collection 인터페이스를 확장

 - 구현 클래스 : AbstractList, AbstractSequentialList, ArrayList(★★★), AttributeList, CopyOnWriteArrayList, LinkedList(★★★), RoleList, RoleUnresolvedList, Stack, Vector


** Set(데이터 순서 x)

 - 데이터를 목록형태로 담아둔다.

 - 데이터 위치는 정해져 있지 않으며, 중복된 데이터가 포함될 수 없다.

 - 중복되는 데이터를 없애고, 유일한 값만을 뽑아 내려고 할 때 용이하다.

 - contains() 메소드를 사용하여 데이터가 포함되어 있는지를 확인할 때 용이

 - Collection 인터페이스를 확장

 - Set 인터페이스를 구현한 클래스로는 AbstractSet, ConcurrentSkipListSet, CopyOnWriteArraySet, EnumSet, HashSet(★★★), JobStateReasons, LinkedHashSet,TreeSet(★★★)


**Queue(데이터를 순차적 처리)

 - FIFO(선입선출) 구조로 되어 있어, 먼저 들어온 데이터를 처리하기 위해서 꺼내면, 그 뒤에 있던 두번째 데이터가 맨 앞에 존재

 - 데이터가 들어온 순서대로 빨리 처리할 때 용이.

 - offer: 데이터 저장시 사용

 - poll: 가장 앞에 있는 데이터를 꺼내고, 지움

 - peek: 가장 앞에 있는 데이터를 꺼내기만 하고, 지우지는 않는다.

 - AbstractQueue, ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedQueue, DelayQueue, LinkedBlockingDeque, LinkedBlockingQueue, LinkedList(★★★), PriorityBlockingQueue, PriorityQueue,

   SynchronousQueue


*** MAP

 - KEY-VALUE 쌍으로 데이터 관리

 - KEY는 중복되어서는 안되며 VALUE는 KEY만 다르다면 중복되어도 상관 없다.

 - MAP은 키로 식별할 수 있는 데이터를 담아두고, 데이터의 위치와 상관업싱 키만으로 쉽게 꺼낼 필요가 있을 때 용이.

 - PUT: 키와 값으로 데이터 저장시 사용

 - GET :  키로 데이터를 꺼낼때 사용

 - MAP 인터페이슨느 부모인터페이스가 존재 X

 - AbstractMap, Attributes, AuthProvider, ConcurrentHashMap, ConcurrentSkipListMap, EnumMap, HashMap(★★★), Hashtable(★★★), IndentityHashMap, LinkedHashMap, PrinterStateReasons, Properties, Provider,

   RenderingHints, SimpleBindings, TabularDataSupport, TreeMap(★★★), UIDefaults, WeakHashMap


*** JAVA.util

 - Date와 Calendar : 날짜와 시간 관리위한 클래스, 

    *Date 클래스는 현재 및 특성 날짜 및 시간을 관리 하기 위한 클래스, 

    *Calendar 클래스는 날짜를 더하고 빼는 드으이 계산 작업을 할때 유용한 클래스

 - Collections

    * 컬렉션을 보다 쉽게 처리하기 위한 메소드를 제공

    * 데이터 검색 : binarySearch, min, max, indexOfSubList, frequency

    * 정렬 : sort

    * 순서변경 : reverse, shuffle, swap, rotate, reverseOrder

    * 데이터 변경 및 추가 : fill, replaceAll, addAll

    * 데이터 복사 : copy, nCopies

    * 데이터 삭제 : emptySet, emptyList, emptyMap

    * 데이터 추출 : newSetFromMap

    * 데이터 비교 : disjoint

    * 타입변환 : enumeration, list, asLifoQueue

    * 변경 가능 여부 속성 변경 :  unmodifiableCollection, unmodifiableSet, unmodifiableSortedSet, unmodifiableList, unmodifiableMap, unmodifiableSortedMap

    * 쓰레드 안전 여부 속성 추가 : synchronizedCollection, synchronizedSet, synchronizedSortedSet, synchronizedList, synchronizedMap, synchronizedSortedMap

    * 데이터 타입 안전 여부 속성 추가 : checkkedCollection, checkedSet, checkedSortedSet, checkedList, checkedMap, checkedSortedMap

    * Singleton : singleton, singletonList, singletonMap


 - Arrays :  배열을 쉽게 처리하기 위한 클래스 

   * sort: 정렬

   * binarySearch : 검색

   * equals, deepEquals : 비교

   * fill: 데이터 변경

   * copyOf, copyOfRange : 복사

   * asList : 변환

   * hashCode, deepHashCode :  해시코드.?

   * toString:  문자열 변환

- Properties :  system 클래스에서 제공하는 속성을 관리하기 위한 클래스

- Random :  임의의 수를 만들기 위한 클래스

** Formatter

  *numberFormat

     - 이미 정해져 있는 포맷으로 숫자 변환을 쉽게 처리

     - 객체는 getInstance(), getCurrencyInstance(), getIntegerInstance 메소드로 생성

     - 숫자 타입의 변환은 format 메소드 사용 리턴타입은 String

     - 정수의 최소 표현 길이는 setMinimumIntegerDigits 메소드로, 최대 표현 길이는 setMaxImumIntegerDigits() 메소드로 지정

     - 소수 부분의 최소 표현 길이는 setMinimumFractionDigits() 메소드로, 최대 표현 길이는 setMaximumFractionDigits() 메소드로 지정

 * DecimalFormat

    - 직접 포맷을 지정하여 숫자 변환을 처리

    - 객체 생성은 생성자로 한다.

    - 숫자 타입의 변환은  format 메소드를 사용하며, 리턴 타입은 String


--날짜/시간

*Date Format

   - 날짜 및 시간을 간단하게 표현할 때 사용

   - 객체는 getInstance, getDateInstance, getTimeInstance, getDateTimeInstance 메소드 사용

   - 날짜 및 시간 타입의 변환은 format 메소드 사용, 리턴 타입 String

   - Default, full, long, medium,short 의 5가지 타입 선택하여 사용

*SimpleDateFormat

  - 직접 포맷을 지정하여 날짜 및 시간 형식으로 변환

  - 객체 생성은 생성자 사용 x

  - 패턴의 지정은 applyPattern() 메소드로, 날짜 및 시간 변환은 format() 메소드 사용


-- 문자열

 *MessageFormat

   - 변환할 문자열에{0},{1}을 지정하여 매개 변수의 순서에 따른 값으로 변환

   - 별도의 객체 생성을 할 필요 없이 foramt 메소드를 사용

 *Formatter

   - C에서 사용하는 printf() 처럼 변환하는 메소드

   - 변환할 문자열에 정수는 %d, 문자열은 %s를 지정하면 매개 변수에 따라서 변환


I/O 관련 클래스 (p.437)

 *I/O의 기본은 Stream

  - 자바 프로그램에서 데이터를 읽을 때에는 InputStream사용

  - 자바 프로그램에서 밖으로 데이터를 쓸 때에는 OutputStream 사용

  - char 기반의 데이터를 읽을 때에는 Reader, 쓸 때에는 Writer 사용


* InputStream 과 Reader

 - read: 스트림의 내용 읽기

 - close:  스트림 닫기


* InputStream  주요 자식 클래스

 - FileInputStream :  바이트 기반의 파일을 읽을 때 사용

 - ObjectInputStream :  저장되어 있는 객체를 읽을 때 사용

 - FilterInputStream :  기타 여러 형태의 스트림을 처리하는 클래스의 부모가 되는 클래스


* OutputStream 과 Writer

 - wirte() :  스트림에 내용 쓰기

 - flush :  강제로 쓰기

 - close :  스트림 닫기


* OutputStream의 주요 자식 클래스

 - InputStream의 주요 자식 클래스의 이름에 OutputStream만 붙여주면됨.


*File  클래스

 - 기본기능

   - exists : 존재여부 확인

   - isFile, isDirectory : 파일인지 경로인지 여부 확인

   - isHidden :  숨겨진 파일 및 경로인지 확인

   - lastModified :  마지막 수정 시간 확인

   - delete :  파일 및 경로 삭제

-파일경우

   - renameTo :  파일 이름 변경

   - createNewFile :  파일 생성

   - canRead, canWrite, canExecute :  읽기 및 쓰기, 실행 가능 여부 확인


-경로경우

  - list, listFiles : 파일 목록 확인

  - mkdir, mkdirs :  경로 생성


Serializable 

  - 객체를 다른서버로 전송하거나, 파일에 쓰고, 읽기 위해서 사용하는 인터페이스

  - Implelemts만 하면 되며, 별도로 구현해야하는 클래스는 없다.

  - static final long serialVersionUID:  객체에 대한 serial 버전 값 지정


transient

 - Serializable로 선언한 객체 내에 전송하거나 저장하지 않은 변수를 선언할 때 사용

 - 변수 선언시 transient라고 지정


NIO

 - 보다 빠른 IO를 위해서 추가된 패키지

 - Channel 기반으로 데이터와 연결하며 Stream 대신 Buffer를 사용하여 데이터를 읽고 쓴다.


Buffer

 - 데이터의 읽기와 쓰기

 - get() :  데이터 읽기

 - put() :  데이터 쓰기

 - 상태 및 속성 확인을 위한 주요 메소드

    * capacity :  버퍼에 담을수 있는 크기 리턴

    * limit : 버퍼에서 읽거나 쓸 수 없는 첫 위치 리턴

    * position : 현재 버퍼의 위치 리턴


위치 변경을 위한 메소드

 - flip : limit값을 현재 postion으로 지정한 후 postion을 0(가장 앞)으로 이동

 - mark :  현재 postion을 mark

 - reset:  버퍼의 postion을 mark 한 곳으로 이동

 - rewind :  현재 버퍼의 position을 0으로 이동

 - remaining : lmit-postion 계산 결과를 리턴

 - hasRemaining : position과 lilmit 값에 차이가 있을 경우 true 리턴

 - clear :  버퍼를 지우고 현재 position을 0으로 이동하며, lilmit 값을 버퍼의 크리고 변경


TCP 처리를 위한 Socket

  -  Socket 클래스는 데이터를 전달하고, 받기 위해서 사용하는 클래스

  - ServerSocket 클래스는 데이터를 수신하기 위해서 사용하는 클래스, 클라이언트에서 데이터를 전달하면 Socket 객체로 받아 처리하면됨.

  - 데이터를 주고 받는 것은 Socket 클래스를 통하여 Stream이나 Reader/Writer 객체로 처리하면 된다.


UDP를 처리하기 위한 Datagram

 - DatagramPacket 클래슨느 데이터를 전달하고, 받기 위하여 사용

 - DatagramSocket은 데이터를 수신하기 위해서 사용하는 클래스. 클라이언트에서 데이터를 전달하면 DatagramPacket 객체로 받아 처리

 - TCP는 연결할 때부터 데이터를 받는 서버가 시작되어 있어야만 데이터를 전송할 수 있지만, UDP는 데이터를 받는 서버가 시작 여부 및 데이터 송수신 가능여부와 상관 없이 데이터를 전송 할수 있다.



+ Recent posts