p.624

web.xml

 *web.xml에서 설정해주는일

 - URL의 기본화면 목록

 - ServletContext의 초기 파라미터

 - 서블릿/JSP에 대한 명칭 선언 및 맵핑

 - 세션의 유효시간 설정

 - MIME 타입 맵핑

 - 예외 페이지 설정

 - 리스너 및 필터 등록

 - 보안설정


<welcome-file-list> (URL의 기본 화면 목록 ) : 어떤 URL을 호출했을 때의 기본페이지 의미.

<context-param> (ServletContext의 초기 파라미터 ) : WAS가 기동되었을 때 초기화해야 하는 값이 있을 경우 여기에서 지정.

<servlet>,<servlet-mapping> (서블릿/JSP에 대한 명칭 선언 및 맵핑) : 서블릿 선언시 사용

<listener>,<filter>,<filter-mapping> (리스너 및 필터 등록) : 각종 리스너와 필터를 등록할 때 사용.

<session-config> (세션의 유효시간 설정) : 사용자가 서버에 요청했을 때 생성되는 세션의 유효시간 설정

<mime-mapping> : 파일 확장자에 따른 페이지의 속성을 나타내는  MIME 타입 지정

<error-page> : 에러가 발생했을 때 정보를 표시할 페이지 지정.

<security-constraint>(보안설정): 보안과 관련된 설정 지정.



* mime type :  기본값은 'text/html' 만약 'multipart/form-data'와 같이 지정시 여러가지의 데이터 형식과 함께 요청 가능.


p.637

 - getInstance :  현재 JVM의 기본지역으로 일반적인 목적의 숫자 Format 제공

 - getInstance(Locale inLocale) : 매개 변수로 제공된 지역으로 숫자 format 제공

 - getCurrencyInstance :  현재 JVM의 기본지역(Locale)으로 통화 foramt 제공)

 - getCurrencyInstance(Locale inLocale) : 매개변수로 제공된 지역으로 통화 format 제공.

 - getIntegerInstance() :  현재 JVM의 기본지역(Locale)으로 정수 format 제공.

 - getIntegerInstance(Locale inLocale ) : 매개 변수로 제공된 지역으로 정수 format 제공




p.638 숫자타입(지역관련)

NumberFormat formatter = NumberFormat.getInstance();

String str = formatter.format(숫자변수);

ex) String str = foramtter.format(3.1415927);

 --> 기본설정값이 소수점 4자리이며(4자리이상시 반올림) 3.142

 * 지역에 따른 숫자가 나옴


== 다른지역 숫자 표시할때

 - 먼저 지역 찾기

Formatter NumberFormat.getInstance(locale);

원하는 나라의 지역 Number로 표시할시는

Formatter NumberFormat.getInstacne(Locale.원하는나라);

원하는나라 지역의 숫자를 표시가능함(콤마나 점등의 표시부분)


p.642

setMaximumFractionDigits(int newValue) : 소수점 이하의 최대 표시 개수 지정

setMaximumIntegerDigits(int newValue) : 정수형의 최대 표시 개수 지정

setMinimumFractionDigits(int newValue) : 소수점 이하의 최소 표시 개수 지정

setMinimumIntegerDigits(int newValue) : 정수형의 최소 표시 개수 지정.


p. 648

getInstance : 날짜와 시간을 현재 JVM의 기본지역 및 짧은 형식으로 생성하는 foramt 제공

getDateInstance :  날짜를 기본지역 및 기본 형식으로 생성하는 format 제공

getDateInstance(int style) : 날짜를 기본지역 및 style에 지정된 형식으로 생성하는 format 제공

getDateInstance(int style, Locale aLocale) : 날짜를 aLocale에 지정된 지역 및 style에 지정된 형식으로 format 제공

getTimeInstance :  시간을 기본지역(Locale) 및 기본형식(DEFAULT)으로 생성하는 format 제공

getTimeInstance(int style) :  시간을 기본지역 (Locale) 및 style에 지정된 형식으로 생성하는 format 제공

getTimeInstance(int style, Locale aLocale) : 시간을 aLocale에 지정된 지역 및 style에 지정된 형식으로 foramt 제공

getDateTimeInstance() :  날짜와 시간을 기본 지역 (Locale) 및 기본형식(DEFAULT)으로 생성하는 format 제공

getDateTimeInstance(int dateStyle, int timeStyle) :  기본지역(Locale)에 날짜는 dateStyle에, 시간은 timeStyle에 지정된 형식으로 생성하는 format제공

getDateTimeInstance(int dateStyle, int timeStyle, Locale aLocale) : aLocale에 지정된 지역, 날짜는 dateStyle에, 시간은 timeStyle에 지정된 형식으로 생성하는 format 제공.



p.658 

MessageFormat

ex)

public void Message1(String s, int p){

 String format = "{0}" 은 {1}이다";

 String reult = MessageFormat.foramt(format,s,p);

 System.out.println(result);

}

-> String값은 int값이다. (이런식으로 나옴)

* MessageFormat을 이용해서 원하는 변수에 맞게 값을 넣어 알람문을 작성가능.



p.661

Formatter의 매개변수 선정

 1. 절대적인 위치 사용

  - 매개 변수의 절대적인 위치사용하며 그 위치는 1부터 시작(*0부터 사용x)

 2. 상대적인 위치 사용

  - 매개 변수의 상대적인 위치사용하며 앞에서 사용한 워치를 재활용하여 사용('<' 사용)

 3. 순서에 따른 위치 사용.

 - 매개변수의 나열된 순서를 별도의 위치 지정없이 사용

ex)

  - 1) String.format("1$s %2$s %3$s", "A", "B", "C");

       result ) ABC

   -2) String.format("%s %<s %s %s", "A","B","C")';

       result ) AABC * 같은값을 '<' 사용하여 표현

   -3) String.format("%s %s %s", "A","B","C");

       result) ABC


p.663

 일반적인 문자열과 숫자 형식

 %[argument_index$] [flags] [width][.precision] conversion

 - argument_index:  매개변수 목록의 위치 의미

 - flags: 출력 foramt을 명시적으로 지정할 때 사용, 이 flags 값은 가장 끝에 지정하는 conversion의 값에 따라 미리 지정되어 있음

 - width:  출력되는 값의 최소길이를 의미-> 공란이 있을시 공백이 추가되어 표시

 - precision :  소수점 이하 값의 길이 지정

 - conversion :  매개 변수가 어떤 형태로 출력되는지 보여줌.


날짜와 형식

 %[argument_index$] [flags] [width] conversion

 




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는 데이터를 받는 서버가 시작 여부 및 데이터 송수신 가능여부와 상관 없이 데이터를 전송 할수 있다.



8월 15일

 p.386

 -NIO Buffer Class

  위치변경 method

  - flip: limit 값을 현재 position으로 지정한 후, postion을 0(가장 앞으로) 이동 (limit 값 변경, rewind는 limit 값 변경x)

  - mark: 현재 포지션을 mark

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

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

  - remaining : limit-position 계산 결과를 리턴

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

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



p.394

 *TCP: 데이터 전송은 보장, 느리다, 비싸다

 *UDP: 데이터 유실이 있음, 빠르다, 싸다.


-ServerSocket

 * ServerSocket(): 서버 소켓 객체만 생성

 * ServerSocket(int port) : 지정된 포트를 사용하는 서버 소켓을 생성

 * ServerSocket(int port, int backlog) : 지정된 포트와 backlog 개수를 가지는 소켓을 생성

 * ServerSocket : 지정된 포트와 backlog 개수를 가지는 소켓을 생성하며, bindAddr에 있는 주소에서의 접근만을 허용.


*backlog 개수를 지정하지 않을시 50개가 default


  * server.Accept새로운 소켓 연결을 기다리고, 연결이되면 Sockect 객체를 리턴

  * server.close :  소켓연결을 종료.


- Socket

 * Socket: 소켓 객체 생성

 * Socket(Proxy proxy) : 프록시 관련 설정과 함께 소켓 객체만 생성

 * Socket(SocketImpl impl) : 사용자가 지정한 SocketImpl 객체를 사용하여 소켓 객체만 생성

 * Socket(IntetAddress address, int port): 소켓 객체 생성 후 address와 port를 사용하는 서버에 연결

 * Socket(InetAddress address, int port, InetAddress localAddr, int localPort) : 소켓 객체 생성 후 address와 port를 사용하는 서버에 연결하며, 지정한 localAddr와 localPort에 접속.

 * Socket(String host, int port) : 소켓 객체 생성 후 host와 port를 사용하는 서버에 연결

 * Socekt(String host, int port, InetAddress localAddr, int localPort): 소켓에 객체 생성 후 host와 port를 사용하는 서버에 연결하며, 지정된 localAddr와 localPort에 접속


- Socket 관련 에러

  *java.net.BindException : Address alreay in use 

   - 서버를 띄워놓고 또 띄웠을때 발생, 이미 지정된 port 번호를 사용하고 있기 때문에 동일한 port 번호를 사용할 수 없기 때문. 이미 띄워놓은 프로세스가 있는지 jps라는 명령으로확인.

     * jps - 자바 가상머신 프로세스 상태 도구(Java Virtual Machine Process Status Tool)

 

  *java.net.ConnectException : Connection refused 

   - 서버를 뛰워놓지 않고 클라이언트 프로그램만 수행했을때 발생한다. 받을 서버가 없어 던질 곳도 없기 때문임. 서버재시작















 p.342

- I/O, 디렉터리에 있는 목록을 살펴보기 위한 list method

 * listRoots : JVM이 수행되는 oS에서 사용중인 파일시스템 루트 디렉토리 목록을 File배열로 리턴

 * list : 현재 디렉터리 하위 목록을 String 배열로 리턴

 * listFiles :  현재 디렉터리 하위 목록을 File 배열로 리턴.


-FileFilter

 * accpet:  매개변수로 넘어온 File 객체가 조건에 맞는지 확인


-FilenameFilter

 * accept :  매개변수로 넘어온 디렉터리에 있는 디렉터리나 파일이름이 조건에 맞는지 확인.


*p.344


 String fileName = file.getName();


if(fileName.endWith(".png")) return true;;


JDK 1.7이상이면 java.nio.file 패키지 사용해야할듯..(↑↑ 옛날..방식 인가봐)


*p.348

- InputStream method

 *avaliable : 스트림에서 중단없이 읽을 수 있는 바이트의 개수 리턴

 *mark(int readlimit) :  스트림의 현재 위치 표시(mark), 여기서 매개 변수로 넘긴 int 값은 표시해둔 자리의 최대 유효 길이.

                         이값을 넘어가면 표시해둔 자리는 더 이상 의미가 없어진다.


 *reset : 현재 위치를 mark() 메소드가 호출되었던 위치로 되돌린다.

 *markSupported : mark나 reset메소드가 수행 가능한지를 확인

 *read : 스트림에서 다음 바이트를 읽는다. 이 클래스에 선언도니 유일한 abstract 메소드(중요!!!)

 *read(byte[] b) : 매개변수로 넘어온 바이트 배열에 데이터를 담는다. 리턴 값은 데이터를 담은 개수(중요!!)

 *read(byte[] b, int off, int len) : 매개변수로 넘어온 바이트 배열에 특정위치(off)부터 지정한 길이(len) 만큼의 데이터를 담는다. 리턴 값은 데이터를 담은 개수(중요!)

 * skip : 매개변수로 넘어온 길이(n) 만큼의 데이터를 건너 뛴다.

 * close : 스트림에서 작업중인 대상을 해제한다. 이 메소드를 수행한 이후에는 다른 메소드를 사용하여 데이터를 처리할수 없다(중요!!)

*** 데이터를 읽을시에는 read() 사용하고 해당 리소스를 닫을시 close() 사용

*** close()안하면 에러 발생하니 주의할것!!


 p.350 

 - Stream의 종류

* FileInputStream : 파일을 읽는 데 사용, 주로 이미지파일의 바이트코드로된 데이터 읽을때 사용

* FilterInputStream :  다른입력 스트림을 포괄하며, 단순히 InputStream 클래스가 Override되어 있음.

* ObjectInputStream : ObjectOutputStream으로 저장한 데이터를 읽는데 사용.


-OutputStream method

 *write (byte b):  매개변수로 받은 바이트 배열 저장

 *write[byte[] b, int off, int len): 매개변수로 받은 바이트 배열의 특정위치부터 지정한 길이만큼 저장

 *write(int b) : 매개변수로 받은 바이트 저장, 타입은int이나 저장은 byte로 저장.

 *flush: 버퍼에 쓰려고 대기하고 있는 데이터를 강제로 사용

 *close: 쓰기 위해 열은 스트림 해제.



p.355 

 -FileWriter

  *FileWriter : File객체를 매개변수로 받아 객체를 생성

  *FileWriter(File file, boolean append ): File객체를 매개변수로 받아 객체 생성, 

   append값을 통하여 해당 파일의 뒤에 붙일지(append=true) 해당 파일 덮어 쓸지(aapend=false)를 정함.


p.358

 - FileWriter 객체 생성시 IOEXcepction 일반적 발생상황

   * 매개변수로 넘어온 파일 이름이 파일이 아닌 경로를 의미할 경우

   * 해당 파일이 존재하지는 않지만, 권한 등의 문제로 생성할 수가 없는 경우

   * 파일이 존재하지만, 여러가지 이유로 파일을 열 수가 없는 경우.



p.372

- Serializable

 * 작업한 클래스가 파일에 읽거나 쓸수 있도록 다른서버로 보내거나 받을수 있도록 하기위해서는 Serializable 인터페이스를 구현해야함.

 * 구현하면 JVM이 해당 객체를 저장허간 다른 서버로 전송.

 * DTO 생성시 implement Serializable 필요..

    (p.376 모든 DTO 생성시 필요한건지.. 설명이 조금 부족.. 아님 선언할때 Serializable관련 부분이 되어있거나)

 error!! -> java.io.NotserializableException 에러시 implements Serializable 해주도록!!



p.380

 static final long SerialVersion UID =1L;  <-- DTO 클래스 값을 변경할때 

 object, value 둘다 에러표시를 막아줌. !! 변경시 null 또는 변경된 값으로 치환되어 나옴. 다만 이리하면 로직이 꼬이거나 데이터가 잘못들어갔을경우 찾기가 어려우니 추천X)

 변경될일이 있다면 SerialVersion UID값을 변경하여 사용하자.


p.382 transient 예약어 : 해당 예약어 사용시 선언한 변수는 Serializable 대상에서 제외. 해당객체 무시

ex) transient private int 변수명;

 why?(언제사용하는가.?)

  - 보안상 중요한 변수나 꼭 저장해야할 필요가 없는 변수일때 사용..

 




p.385 NIO의 Buffer class

 - capacity: 버퍼에 담을수 있는 크기 리턴 (qjvjzmrl)

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

 - position : 현재 버퍼의 위치 리턴.


상관관계 : 0 <= mark<=position <= limit <=크기(capacity)


Buffer type

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

 *mark: 현재 postion을 mark

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

 *rewind: 현재버퍼의 postion을0으로 이동

 *remaining : limit-position 계산 결과를 리턴

 *hasRemaining : postion과 limit 값에 차이가 있을 경우 true 리턴

 *clear: 버퍼를 지우고 현재 position을 0으로 이동, limit값을 버퍼의 크기로 변경.
















8/8일

p.190

*set

 - Serializable : 원격으로 객체를 전송하거나, 파일에 저장할수 있음을 지정

 - Cloneable : Object 클래스의 clone() 메소드가 제대로 수행될 수 있음을 지정, 즉 복제가능

Iterable<E> : 객체가 For-Each 문장 사용 가능

Collection<E> : 여러 개의 객체를 하나의 객체에 담아 처리할 때의 메소드 지정

Set<E> : Set 데이터 처리하는 것과 관련된 메소드 지정.

*set은 순서 X, 중복X


p.191

* HashSet

 - HashSet : 데이터를 저장할수 있는 객체 생성



-- 중복값 없이 데이터를 가져올때 사용 for문을 돌려 넣고 가져오고함.

ex)

넣기)

HashSet<String> test = new HashSet<String>();

for(String 객체: 리스트){

  test.add("값");

}


빼기

Iterator<string> iter1 = test.iterator();


while(iter1.hasNext(){

 System.out.println(iter1);

}


** hashMap을 위주로 썻지 set은 많이 안써봤네..


*.p200


LinkedList

넣기

 * LinkedList 객체의 가장 앞에 데이터추가 : addfirst,offerFirst,push

 * ListedList 객체의 가장 뒤에 데이터 추가 : addLast,offer,offerLast

 * LinkedList 객체의 특정 위치에 데이터 추가 : add

 * LinkedList 객체 특정 위치에 있는 데이터 수정, 기존 데이터 리턴 :  set

 * 매개변수로 넘긴 Collection의 데이터 추가 : addAll


빼기

첫번째 : getFirst(), peekFirst,Peek,element

마지막 : getLast,peekLast

특정: get(int)


삭제 

첫번째 : remove, removeFirst,poll,pollFirst,pop

마지막 : pollLast,removeLast

지정위치 : remove(int)

* 매개변수로 넘겨진 객체와 동일한 데이터중 앞에서부터 가장 처음에 발견된 데이터 삭제 : remove(object), removeFirstOccurrence(object)


* 매개 변수로 넘겨진 객체와 동일한 데이터 중 끝에서부터 가장 처음에 발견된 데이터 삭제 : removeLstOccurrence(Object)


기타 : size(),clear(),clone 등등..



p.210

*MAP

 - 모든데이터는 키,값 존재(둘중하나라도 없음 안됨)

 - 키는 Map에서 고유해야함

 - 값은 중복ok


put: 추가

get: 가져오기 -> get.key(), get.value();

remove: 삭제 


*key, value  유무확인(boolean)


 - map.containskey();

 - map.containsValue();


*데이터 개수 확인 : size()!!!!!!!!!!!


 

-HashMap : 순서상관없이 

-TreeMap :  순서고려 (firstKey(), LastKey() 메소드 사용하여 키검색 유리)



p.248


Calender

 - add : 지정한 field의 값을 amount 만큼 더함

 - roll : 지정한 field의 값을 amount만큼 더하고 상위값은 변경 X 

 * 아마 날짜관련해서 달은 0부터 시작하는데 달을 더할때 연도도 더해질때 해당 월만 더할때 사용하는듯


p.250

*Collections

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

정렬:sort

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

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

데이터복사:copy, nCopies

데이터삭제:emptySet,emptyList,emptyMap

데이터추출:newSetFromMap

데이터비교:disjoint

타입변환:enmeration,list,asLifoQueue

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

쓰레드 안전 여부 속성

:synchronizedCollection,synchronizedSet,synchronizedSortedSet,synchronizedList,synchronizedMap,synchronizedSortedMap

데이터 타입 안전 여부 속성

checkedCollection,checkedSet, checkedSortedSet,checkedList,checkedMap,checkedSortMap

싱글톤

singleton,singletonList,singletonMap


*Arrays

정렬:sort

검색:binarySearch

비교:qeuals,deepEquals

데이터변경:fill

복사:copyOf,CopyOfRange

변환:asList

해시코드:hashCode, deepHashCode

문자열변환:toString



p.258

-StringTokenizer : 문자열을 원하는 구분자로 분리 method.

 * split이랑 같은기능이지만 메모리관리가 효율적인 큰 문자열 의 일부값만 처리할때 주로사용.


p.263

BigDecimal : 정확한 숫자계산을위한 method

 - add:더하기

 - subtract:빼기

 - multiply: 곱하기

 - divide :나누기..



p.121

math method

절대값/부호 : abs, signum (??)

최대 최소값 : max,min

올림/버림 관련 : ceil(올림),floor(버림),

*round(반올림) - float:int, dobule:long

*rint(반올림) - dobule:double.


제곱/제곱근 관련 : pow(제곱),scalb세제곱,sqrt(제곱근),cbrt(세제곱근),

hypot( 첫번재 매개변수 제곱+ 두번째 매개변수 제곱) 

 ex) (int) Math.hypot(3, 4); =   //√25 = 5


p.127

삼각함수 : toRadians(각도->라디안), toDegrees(라디안->각도), sin, cos, tan

* 삼각함수를 쓰기위한 값들은 다 라디안으로 치환해서 사용

ex) 

double num1 = 45;

double rad45 = Math.toRadians(num1);

Math.sin(rad45);

Math.cos(rad45);

Math.tan(rad45);




p.140 제네릭 타입

E:요소(Element, 자바 컬렉션(Collection)에서 주로 사용

K:키

N:숫자

T:타입

V:값

S,U,V: 두번째, 세번째, 네번째에 선언된 타입.


p.158

ArrayList

Serializable :  원격으로 객체를 전송하거나, 파일에 저장할 수 있음.

Cloneable : Ojbect 클래스의 clone()메소드가 제대로 수행될 수 있음을 지정, 즉 복제가 가능한 객체임을 의미.

Iterable<E>: 객체가 'for-Each' 문장 사용할수 있음을 지정

Collection<E> : 여러 개의 객체를 하나의 객체에 담아 처리할때의 메소드 지정

List<E> :  목록형 데이터를 처리하는것과 관련된 메소드 지정

RandomAccess :  목록형 데이터에 보다 빠르게 접근할 수 있도록 임의로 접근하는 알고리즘.

* List -> add , Map -> put


* length: 배열의 길이 

* size : 컬렉션 타입의 길이 확인, 객체수.?

* length() : string 글자수 check.;


- length 배열에 넣을수있는 공간의 개수,

-  size : 데이터의 개수 

데이터의 수만큼이면 보통 list.size()로 가져오겠네.(헷갈..림)



p.188

*set

 - HashSet : 순사가 전혀 필요없는 데이터를 해시테이블에 저장, *set중에 가장 빠름 (속도 ↑↑)

 - TreeSet : 저장된 데이터의 값에 따라서 정렬 (속도 ↓)

 - LinkedHashSet :  연결된 목록 타입으로 구현된 해시 테이블에 데이터 저장 / 저장된 순서에 따라서 값 정렬, (속도 ↓↓



p.77

-substring : 문자열의 일부값을 잘라냄 

  ex) substring(5) :  공백포함 6번부터 나옴

  ex) substring(3,7) : 3번째와 7번째 사이의 값이 나옴.

* 시작값이 끝값보다 크면 error

-split : 문자열을 여러개의 string 배열로 나눔


p.82

-trim : 공백 제거

if(text!=null && text.tirm().length() >0 ){

 // 공백확인 if문

}


 * replace : 교체. replace("a","b") : a->로.

 * 대소문자 구분.


* format

 - %s:string

 - %d:정수

 - %f:소수

 - %%:%


p.86 대소문자 change

 - toLowerCase : 모든 문자열의 내용 소문자

 - toLowercase(Locale locale): 지정한 지역정보에 맞추어 모든 문자열의 내용을 소문자로 변경

 - toUpperCase(): 모든문자 내용 대문자

 - toUppercase(Locale locale): 지정한 지역정보에 맞추어 모든 문자열 내용 대문자.



p.90

 -intern 메소드 사용금지.


 속도 : StringBuilder> StringBuffer

 안전성 : StringBuffer> StringBuilder


* 문자열 생성하여 더할시에는 StringBuilder

여러 쓰레드에 접근시에는 StringBuffer



p.114 시간조회

 - currentTimeLillis(): 현재시간 밀리초 단위로 리턴 - 보통 현재시간 확인.

 - nanoTime(): 현재시간 나노초 단위로 리턴. - 보통 시간측정


p.119

객체 출력시는 toString -> vlalueOf() 

*이건 나중에 많이 해봐야알듯.

7/26 

 - public : 언제든 사용 가능한 class

 - final : 있는 그대로 사용.?

 - protected :  상속받은 클래스만 사용가능

 - public static  :값 변하지 않음..

euc-kr : 한글일이 4byte

utf-16 : 6byte


문자열 길이 length (공백포함)

*ignorecase(대소문자 무시) : 해당문구가 들어간 method 대소문자 무시

compareTo : string 객체가 알파벳순으로 앞에있으면 양수 

                                       뒤에 있으면 음수

                                       같으면 '0'


특정조건에 맞는 문자열이 있는지 확인

Starts with :  매개변수 값으로 시작하는지 확인

ends with : 매개변수 값으로 끝나는거 확인

contains : 매개변수값으로 중간에 존재 유무 확인


regionMatches (boolean ignoreCase, int toffset, String other, int ooffset,int len): 매개변수로 넘어온 문자열과 동일한지 비교

 - ignorecase : true일 경우 대소문자 구분없이 값 비교

 - toffset : 비교ㅗ 대상 문자열의 확인 시작 위치 지정

 - other :  존재하는지 확인할 문자열

 - ooffset :  비교객체 시작 위치 지정

 - len : 비교할 글자수..

calender - roll(int field, int amount) // 일자 정도 구할때만 사용 상위값은 변환 x  //p.249


=====================================================


쓰레드에 안전하게 후견하기 위해선 synchronizedList 생성


ex) List list = Collections.synchronizedList(new ArrayList());


Araay 에서 fill = 특정문자로 채워주는것


ex )

 int[] emptyArray = new int[10];

 Array.fill(emptyArray,0,5,9);


첫번째 는 채울 객체, 두번째 배열의 시작위치, 세번째 배열의 끝위치, 바꿀숫자 p.254



=====================================================


문자열 구분자 분리 StringTokenizer 


ex)

String data = "this is a book";

//StringTokenizer st = new STringTokenizer(data); //결과1

StringTokenizer st = new STringTokenizer(data,"a"); //결과2

1.결과: this, is, a , book

2.결과 : this is, book //a는 결과에 없음 p.259

 

 ** 보통 split으로 자르고 아주큰 메모리 낭비가 심할경우만 StringTokenizer


=====================================================

돈계산관련 중요 math 메소드

BigDecimal// 아직은 돈관련 프로그램을 만들어보지 않았으므로 pass

=====================================================


쓰래드 //p.275

 - 쓰레드의 사전적 의미는 실타래를 의미, 프로세스를 생성하기위해서는 많은 실타래의 쓰래드가 생성되어짐

 - 쓰레드가 시작하면 수행되는 메소드는 run()

 - 쓰레드를 시작하는 메소드는 start();


=====================================================


1
2
3
4
5
6
7
public void currentTime(){
        //1970년1월1일부터 현재까지의 시간을 밀리초 Nano초로 계산
        long startTime = System.currentTimeMillis();
        long startNanoTime = System.nanoTime();
        System.out.println(startTime);    // 결과: 1495725443222
        System.out.println(startNanoTime);//결과:269033075717973
    }
cs


흠 언제쓸지는 모르겠는데 밀리초와 나노초는..?


올림관련

round(): 반올림, ruturn type : int(float)

rint(): 반올림, return type : double(long) //거의 안쓸듯?


ceil(): 올림,double

floor(): 버림,double


제곱과 제곱근

Math.sqrt():제곱근

Math.cbrt():세제곱근

Math.pow(): 첫번째 매개변수와 두번째 매개변수만큼의 제곱값 구현 

1
2
3
        Integer a = (int) Math.pow(34);
        System.out.println(a);//81
 
cs

Math.scalb(): 첫번째 매개변수 *2^(매개변수) 


1
2
Integer b = (int) Math.scalb(52);
        System.out.println(b);    //20 (5*2^2)

cs






Math.hypot() : 첫번재 매개변수 제곱+ 두번째 매개변수 제곱


1
2
Integer c = (int) Math.hypot(34);
        System.out.println(c);    //√25 = 5

cs




삼각함수(Double)

​Math.toRadians : 각도를 라디안으로 변경

Math.toDegress : 라디안 각도로

Math.sin()

Math.cos()

Math.tan()


 

+ Recent posts