'자바 정리'에 해당되는 글 2건

  1. 2010.02.19 소설같은 자바 훑어보기 2권!!
  2. 2010.02.18 <자바 IO>

□ 6장 배열, 제네릭, 컬렉션
  ■ 배열(Array) 클래스 : 단순 용량적인 측면에서의 데이터 저장공간
     ● 단순 저장공간의 문제 : 자료를 처리하는 방식, 동적인 공간의 문제, 빠른 검색의 문제
  ■  배열
     ● 종류 : 기본 데이터 타입 배열, 객체 배열.
         - 데이터 타입 배열 : 배열생성과 동시에 메모리 생성
         - 객체 배열 : 객체변수의 이름만 생성되고, 메모리는 생성되지 않는다.
     ● 특징 : 같은 데이터 타입의 변수를 한꺼번에 여러개 생성.
     ● 검색 : 첨자를 통해서 배열 내에 존재하는 모든 변수를 검색
     ● 단점 : 배열의 크기를 변경할 수 없다.
  ■ 컬렉션, 맵 : 자료구조적인 측면에서의 데이터 저장공간, 배열의 발전된 구조, 인터페이스이다.
     ● 컬렉션 : 집합적인 저장공간
객체를 삽입 삭제하는 추상 메서드
boolean add(E o); 
boolean remove(Object o);
데이터 확인을 위한 추상 메서드
boolean isEmpty();  --- 비어있는지 확인
boolean contains(Object o); --- 특정 객체가 포함되어 잇는지 확인
int size(); --- 포함된 객체의 수를 리턴
데이터를 배열로 얻기 위한 추상 메서드
T[] toArray(); --- 객체들을 배열 형태로 리턴
         - List : 순서있다, 중복허용
         - Set : 수학적인 집합개념, 중복허용안함

     ● 맵 : 검색적인 저장공간, 데이터 삽입시 Key와 Value의 형태로 삽입, Key를 이용하여 Value를 검색
Object put(Object key, Object value); --- 데이터 삽입
Object remove(Object key); --- 데이터를 제거
Object get(Object key); --- 데이터를 검색
V put(K key, V value); --- 데이터 삽입
V remove(Object key); --- 데이터 제거
V get(Object key); --- 데이터 검색
         - HashMap : 키와 값을 이용해서 데이터 관리, 동기화가 보장되지 않는다.
         - Hashtable : 키와 값을 이용해서 데이터 관리, 동기화가 보장된다.
         - TreeMap : Map계열이면서 검색이 가능한 클래스

     ● Sotred 계열 : Set과 Map인터페이스를 상속바당 정렬 기능이 추가
         - SotredSet : Set 인터페이스를 상속
            * TreesSet : Set계열이면서 검색이 가능한 클래스, 데이터들이 자동으로 오름차순
         - SotredMap : Map 인터페이스를 상속
            * TreeMap : Key, Value로 데이터 관리, Key 기준으로 오름차순

  ■ 배열과 컬렉션,맵의 차이점 : 배열은 크기를 동적으로 늘릴수 없다. 하지만 컬렉션이나 맵계열의 클래스는 동적으로
                                             메모리를 확장할 수 있다

  ■ ArrayList와 HashSet
     ● 공통점 : 객체의 저장공간, 동기화 보장하지 않는다.
     ● ArrayList : List 인터페이스를 구현하는 클래스, 순서의 개념, 데이터 중복 허용
       - Vector와 공통점 : 순서가 있는 collection, List인터페이스 구현, 데이터 중복 허용
                       차이점 : 자동으로 동기화
     ● HashSet : Set 인터페이스를 구현하는 클래스, 집합의 개념, 데이터 중복 허용하지 않음
  ■ 제네릭 : 클래스에 사용할 타입을 클래스를 사용할 때 지정한 후 사용하는 기술
     ● 자바 코드내에서 Top<String>형 클래스의 사용
Top<String> t = new Top<String>();
t.setDate(str);
String str2 = t.getData();
     ● 자바 컴파일러가 제네릭을 처리하는 방식
Top t = new Top();
t.setData(str);
String str2 = (String)t.getData();
  ■ Stack : 후입선출 컬렉션 클래스
     ● push() 메서드 : Stack의 맨 위에 요소를 삽입
     ● pop() 메서드 : Stack의 맨 위에 있는 요소를 삭제하고 데이터를 반환
     ● peek() 메서드 : Stack의 맨 위에 있는 요소를 제거하지 않고 반환
  ■ AutoBoxing : 기본 데이터 타입을 래퍼(Wrapper) 클래스형의 객체로 자동으로 변환해주는 기능
  ■ Enumeration과 Iterator : 컬렉션 내의 데이터에 접근하기 위한 방법
     - 특징 : 모든 데이터에 접근가능
     - 차이 : Itorator는 Fail-Fast방식을 지원한다
     ● Enumeration 메서드 : hasMoreElements() //데이터가 있는지 확인, nextElement(); //다음 위치로 이동
     ● Iterator 메서드 : hasNext(); //데이터가 있는지 확인, next(); //데이터를 얻어내면서 다음 위치로 이동
□ 7장 Exception, 문자열, 자바5.0
  ■ 문자열
     ● 문자상수의 집합, 이중 따음표사용, String 클래스의 객체
     ● length(), concat(), equals(), indexOf(), lastIndexOf(), substring(), replace()
  ■ StringBuffer 클래스 : 동기화를 지원한다.
     ● 수정이 가능한 클래스, 객체는 문자열의 추가, 삭제, 수정, 검색등의 기능을 가지고 있다.
     ● StringBuilder와 차이 : 동기화를 지원하지 않는다.
  ■ Formatting 클래스
  ■ 자바의 상수
     ● 클래스에서 상수 선언 : final 키워드를 상수를 선언, 단한번 초기화, static final로 선언하면 전역적인 상수
     ● 인터페이스에서의 상수선언 : 멤버변수는 상수만 가능, 멤버변수 선언하면 자동으로 public static final이 된다.
  ■ enum(열거형) : 열거형으로 변수를 만들어도 이 변수는 열거형을 선언할 때 명시한 값을 넣을 수 있다.
  ■ Varargs(가변인수) : 필요에따라 매겨변수를 가변적으로 조정할 수 있는 기술.
□ 8장 자바 Thread
  ■ 프로세스와 스레드 : 하나의 프로세스 내에는 여러개의 스레드가 존재할 수 있다.
     ● 프로세스(process) : 하나의 프로그램은 하나의 프로세스에 해당.
     ● 멀티 태스킹(Multi-Tasking) : 운영체제 차원의 프로세스 관리
     ● 스레드(Thread)
         - 하나의 프로그램 내에서 실행되는 메서드
         - 같은 순간에 두 개의 메서드가 동시에 실행되면 두 개의 스레드가 동작하는 것이다. ---> 시퀀셜하게 동작한다.
         * 주의사항 : 우선권, 동기화(공유자원을 상대로 순서대로 작업이 이루어지는 것)
         - 스레드 상태
시작 상태(Start)
동작할 수 있는 상태(Runnable) : 스레드 실행, 스레드가 여러 개 존재할 수 있다.
동작 상태(Run) : Runnable상태에서만 Run 상태가 될 수 있다, 한순간 단 하나의 스레드만 Run 상태가 된다.
대기 상태(NotRunnable) : Run 상태로 진입할 수 없음, sleep()-일정시간, wait()과 notify()-수동으로 제어
종료 상태(Dead) : 스레드의 종료
  ■ 동기화(synchronized) : 줄서서 순서대로 공유자원 사용하기
      - 블록형태로 사용가능 
  ■ 스트림(Stream) : 자료 입출력을 도와주는 중간 매개체
File 입력 스트림의 연결과 작업
FileInputStream fis = new FileInputStream(파일);    //fis.read()를 이용해서 데이터 읽기
File 출력 스트림의 연결과 작업
FileOutputStream fos = new FileOutputStream(파일);    //fos.write()를 이용해서 데이터 쓰기
     ● 스트림이란 빨대다
  ■ File 클래스
     - File f = new File("FileMain.java);
 f.isFile() : 파일인지 아닌지 f.isDirectory() : 디렉터리인지 아닌지  f.isHidden() : 숨김 파일인지 
 f.lastModified() : 마지막 수정 날짜 f.canRead() : 읽기속성가진 파일  f.canWrite() : 쓰기속성가진 파일 
 f.getPath() : 상대 경로  f.getAbsolutePath() : 절대 경로  f.getName() : 디렉터리 또는 파일이름 
 f.toURL() : URL형식의 경로 f.exists() : 파일이 존재하는지  f.length() : 파일의 길이 
  ■ File 스트림
     ● 파일 입출력을 위한 스트림
         - 바이트 단위 : FileInputStream, FileOutputStream
         - 문자 단위 : FileReader, FileWriter
     ● RandomAccessFile : 데이터를 랜덤하게 접근
     ● Memory 스트림 : 목표지점 자체가 메모리, 배열과 문자열 등

'자바' 카테고리의 다른 글

소설같은 자바 훑어보기 3권!!  (0) 2010.02.22
소설같은 자바 훑어보기 1권!!  (0) 2010.02.18
Posted by 미스터네오
,

1. 스트림(Stream)
  (1) 정의 : 데이터의 흐름
  (2) 흐름도
       Source(키보드, 파일...) --> 데이터의 흐름 --> Destination (모니터, 파일...)
  (3) 특징
     <1> FIFO 구조
            --> 흘러가는 데이터의 순서가 바뀔 수 없다.
     <2> 단방향
            --> 흐름의 방향은 일정하다.
     <3> 지연성
            --> 흐름은 지연될 수 있다.
     <4> 유연한 구조
            --> 다른 Stream(FilterStream)으로 연결해서 쓸 수 있다.

                ex) new BufferedReader (new InputStreamReader(System.in));
                     new BufferedReader (new FileReader(""));

  (4) 구분
     <1> by byte
            [1] 1 byte Stream
            [2] 2 byte Stream (문자 스트림) - java언어에만 존재
     <2> by 입출력 - 기준에 따라 달라질 수 있다.
            [1] Input Stream (Reader)
            [2] Output Stream (Writer)

2. NodeStream
  근본 스트림 (ex:수도)
  --> Data Source(원천지) 또는 Data Destination(목적지)와 직접 연결된 Stream
  (1) InputStream (System.in)
       --> read(), read(b), read(b, 0, len)
  (2) OutputStream & PrintStream (System.out)
       --> print(), println(), write()
  (3) FileInputStream
  (4) FileOutputStream
  (5) FileReader (문자스트림 - 2byte)
  (6) FileWriter (문자스트림 - 2byte)

3. FilterStream (내부적으로 buffer를 사용함.)
  응용 스트림 (ex:샤워기)
  --> NodeStream에 연결해서 다양한 기능(메소드)을 쓸 수 있는 Stream
  (1) BufferedInputStream
  (2) BufferedOutputStream //반드시 flush()
  (3) DataInputStream  // 기본형 데이터 & Unicode String을 읽는다.
  (4) DataOutputStream // 기본형 데이터 & Unicode String을 쓴다.
  (5) ObjectInputStream
  (6) ObjectOutputStream
  (7) BufferedReader (문자스트림 - 2byte)
  (8) BufferedWriter (문자스트림 - 2byte) //반드시 flush()
  (9) PrintWriter, PrintStream (문자스트림 - 2byte)
       --> 장점 1.BridgeStream이 필요없다.
                    2.flush() 생략가능 3.메소드다양 
  (10) LineNumberReader
         getLineNumber() 를 이용해서 읽어들인 행의 번호를 알 수 있다.

4. BridgeStream
  다리 스트림
  --> 1byte Stream을 2byte Stream으로 변환해 주는 Stream
  (1) InputStreamReader
  (2) OutputStreamWriter

5. File 클래스
  (1) 설명 : 파일과 디렉토리를 객체로 만들기 위해 설계된 클래스
  (2) 생성자
     <1> File(File parent, String child)
     <2> File(String pathname)
     <3> File(String parent, String child)
     <4> File(URI uri)
   (3) 메소드
     <1> exists()
     <2> getName()
     <3> getPath()
            --> 상대경로를 String으로 리턴
                  getAbsolutePath()
            --> 절대경로를 String으로 린턴
                  getCanconicalPath() throws IOException
            --> 정규화(시스템에서 사용하는 형식)된 절대경로를  String으로 변환
                  ex) 유닉스 --> 심볼릭 링크로 연결된 파일을 실제 경로로 바꾸어준다.
           윈도우 --> 실제 존재하는 파일의 경우 대소문자까지 원래의 경로 및 파일명에 맞추어 준다.    
            참고 ) IOException 은 시스템으로부터 파일시스템 정보를 요청하기 때문에 걸린다.
     <4> getParent()
            --> 전체 경로로 생성해야 결과값이 리턴 됨.
     <5> list()
            --> 파일 객체 하위의 파일과 디렉토리를 String[] 로 리턴
     <6> isDirectory(), isFile(), canRead(), canWrite()
     <7> mkdir()
            --> 부모 디렉토리가 실제 존재해야 자식 디렉토리가 생성
  (4) 필드
     <1> File.separator
            --> OS에 맞는 파일경로 구분자를 리턴해준다.

Posted by 미스터네오
,