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

  1. 2010.02.18 <자바 IO>
  2. 2010.02.18 <자바 SE 정리>

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 미스터네오
,

 
1. 자바의 역사
  (1) 1991년 : James Gosling외 개발자들에 의해 Oak 란 언어로 제작
  (2) 1997년 : jdk 1.1 발표
  (3) 1998년 : jdk 1.2 발표
  (4) 2000년 : jdk 1.3 발표
  (5) 2002년 : jdk 1.4 발표
  (6) 2004년 : jdk 1.5 발표 (J2SE 1.5 -> Java SE 5.0)
  (7) 2007년 : jdk 1.6 발표 (Java SE 6)

2. 자바의 특성
  (1) 객체지향언어
  (2) 플랫폼(OS)에 독립적
  (3) 멀티 쓰레드를 지원한다.
  (4) 자동 메모리 관리 : JVM이 자동으로 관리를 해준다.
  (5) 기본적으로 네트워킹 가능 언어이다.

3. 자바의 실행절차 (인터프리터 언어)
  .java 파일 작성 -> javac(컴파일러)를 이용해서 .class 파일 작성
    -> java(Java 실행기)를 이용해서 class 파일 실행 -> JVM 에 의해서 main() 메소드 실행 
        c.f.) JVM (Java Virtual Machine) : 자바 가상 머신, 자바의 실행에 관련한 모든 것을 책임지는 프로그램.  
  운영체제에 상관없이 자바 클래스를 실행하거나, 메모리를 관리해주는 프로그램이다.
    - 가비지 콜렉터(Garbage Collector) : 메모리 관리 프로그램으로써 객체가 더이상 쓰일 가능성이 없으면 자동으로
       메모리에서 삭제를 한다. (JVM에 내장)

4. 객체지향언어 용어 정리
  (1) 객체(Object) : 모든것이다. class 를 통해서 만들어진 구현물, 유형, 무형의 것들을 표현
  (2) 클래스(class) : 객체를 만들어내는 틀(blueprint, 설계도)
  (3) 속성(Field, Property, Member Variable) : 객체의 속성, 성질. 클래스에 정의되어있다.
  (4) 메소드(Method) : 객체가 할 수 있는 기능(행위)
  (5) 생성자(Constructor) : 객체를 만들기 위해서 호출되는 메소드 형태의 것(new 와 함께 호출하면 객체 생성)
       - 클래스 이름과 동일한 단어(대문자로 시작한다)
       - 메소드와 동일한 형태(예 : Hello())
       - 반환타입(return type)이 없다.
       - 생성자가 하나도 없는 경우에는 컴파일러가 기본생성자(default Constructor)를 자동으로 만들어준다.

5. OOP의 특징
  (1) 상속성(inheritance) : 기존의 클래스를 확장(extends)해서 새롭게 기능(method)이나 특성(field)을 정의하거나
                                      추가하는 것을 뜻한다. 부모클래스가 자식클래스에게 멤버변수, 메소드를 물려주는 것을 뜻.
  (2) 다형성(polymorphism) : 상속과 형변환(type casting)과 더불어 사용되는 단어로써, 메소드에서 호출된
                                              객체의 메소드가 객체의 본질(실체)에 따라 다양하게 실행될 수 있다는 뜻.
  (3) 은닉성(Information Hiding) : 객체의 특성과 메소드의 세부구현을 숨김으로써 객체가 완전한 독립성을
                                          유지
하도록 하는 개념 (예전엔 모듈화 라는 개념으로도 불렸다.)
  (4) 캡슐화(Encapsulation) : 은닉성의 대표적인 예로써, 클래스의 속성(Field)의 접근 제한자를 private 으로 하고
                                               메소드에 대해서는 public 을 선언함으로써, 특정 메소드를 빼고는 세부구현 내지는
                                              속성에 대한 것들을 숨김으로써, 마치 알약(캡슐)처럼 안쪽 내용을 전혀 알 수 없게
                                          만드는 형태
를 뜻한다.

6. 자바(class)의 구조
  (1) package 선언
  (2) import 구문
  (3) class 선언

  {
    (4) 속성 선언 및 초기화
    (5) 생성자
    (6) 메소드 선언
  }

7. 자바의 주석
  (1) // 한줄짜리 주석
  (2) 여러줄짜리 주석

    /*
        라인1
        라인2
      */

   (3) javadoc

   /**
     API 문서 작성용 주석
   */

8. 자바의 변수
  (1) 유효범위에 따라서
     <1> 멤버변수 (Member Variable)
            - 클래스의 속성으로서 정의된다.
            - 초기화가 자동으로 된다.(각각의 초기값으로)
     <2> 메소드 지역변수 (Local Variable)
            - 메소드의 안쪽에서만 정의되고 쓰인다.
            - 초기화를 반드시 해줘야 한다.
  (2) 변수 Type에 따라서
     <1> 기본형 변수(Primitive Type) 변수 (8개)
            - 존재이유 : 실행의 효율성 때문이다.(모두 객체로 실행하면 메모리 공간을 많이 차지한다)
            - 형변환 방향
               byte(1) -> short(2) -> int(4) -> long(8) -> float(4) -> double(8)
                                                          |
                                                 char(2)
               boolean
     <2> 참조형 변수(Reference Type) 변수
            - 형변환 방향 (위로)
               Object
                   |
               Human
                   |
             Superman
            - 형변환(Type Casting)의 예

               Human h = new Superman(); // 암시적 형변환
               Superman s = (Superman) h; // 명시적 형변환

9. 제한자
  (1) 정의
       클래스, 인터페이스, 변수, 메소드, 생성자 앞에 붙어서 기능을 제한하는 keyword
  (2) 종류
     <1> 접근 제한자
            public(제한없음) > protected(상속관계) > default(같은 패키지내) > private(같은 클래스내)
     <2> 소유 제한자
           
static
            - static 이 붙으면 class 의 소유가 되고, 안붙으면 객체의 소유가 된다.
            - static 메소드 안에서는 다른 static 메소드나 다른 static 변수만을 쓸 수 있다.
              (객체에 소속되어있는 메소드를 쓰려면 객체를 생성해서 호출한다.)
     <3> 수정 제한자
            
final
            - class, Field, method 앞에 붙어서 더이상의 수정을 할 수 없게 만드는 제한자
            - class 는 상속 불가, Field 수정불가(상수), method 오버라이딩 불가
     <4> 추상 제한자
            abstract
            - class 앞에 붙으면 추상클래스(객체를 생성할 수 없다. 완벽한 설계도가 아니다)
                        : 추상 메소드가 0개 이상 있는 클래스 (1개 이상 있으면 반드시 추상 클래스)
            - method 앞에 붙으면 추상메소드 : body {} 부분이 없는 메소드
     <5> 기타
            synchronized, transient, volatile, native ....

10. 오버로딩과 오버라이딩 (다형성)
  (1) 오버로딩 (over-loading)
     <1> 정의
            메소드의 이름은 같은데, 인수의 갯수나 Type 이 다른 형태의 메소드로써 
            설계, 사용의 편의성을 위해서 존재한다.
     <2> 조건
            - 반환타입이 달라도 된다.
            - 인수(parameter)의 갯수나, Type 이 다르거나 순서가 달라야 한다.
      <3> 종류
            - 생성자 오버로딩
            - 메소드 오버로딩

  (2) 오버라이딩 (over-riding)
     <1> 정의
            상속관계가 있는 클래스에서 부모 메소드의 내용을 자식 클래스에서 재정의 하는 것
     <2> 조건
            - 반환타입이 같아야 한다.
            - 인수(parameter)의 갯수나 Type 이 같고, 순서도 같아야 한다.
            - 부모 메소드의 접근제한자보다 오버라이딩한 메소드의 접근 제한자가 같거나 더 
               범위가 커야 한다.

11. 객체 지시 예약어
  (1) this - 자기 자신(class)의 객체
  (2) super - 바로 위 부모 클래스의 객체

12. 식별자(Identifier)
  (1) 정의
       개발자가 임의로 만드는 패키지명, 클래스명, 메소드명, 변수명 등을 의미
  (2) 규칙(어길시 컴파일 오류 발생)
     <1> 식별자의 첫문자는 특수문자, 숫자여서는 안된다.(_,$는 예외)
     <2> 문자와 숫자, 특수문자(_,$)로 조합할 수 있다.
     <3> 예약어(keyword)를 사용하면 안된다.
     <4> 길이의 제한 없다.
  (3) 관례
     <1> 의미있는 단어를 사용한다.
     <2> 클래스와 인터페이스의 첫문자는 대문자로 한다.
     <3> 메소드와 변수의 첫문자는 소문자로 한다.
     <4> 단어의 결합으로 되어있을 경우 다음 단어의 첫번째글자를 대문자로 하거나
            _로 연결한다. ex) TestClass, getName(), set_name
     <5> $문자는 사용하지 않는다.

13. 연산자
  (1) 산술연산자
        +, -, *, /, %
  (2) 증감연산자
        ++, --
  (3) 대입연산자
        =
  (4) 산술할당(대입)연산자
        +=, -=, *=, /=, %= ...
  (5) 비트연산자
        &, |, ^, ~, 쉬프트연산자(<<, >>, >>>)
  (6) 비교연산자
        ==, !=, <, >, <=, >=
  (7) 논리연산자
        &&, ||, &, |, !
  (8) 조건연산자(삼항 연산자)
        조건식 ? 참일때 : 거짓일때
  (9) instanceof 연산자
        - 형식 : Reference Type 변수 instanceof Class 명
        - 앞의 변수가 뒤의 클래스와 상속관계인지(형변환 가능한지) 알아보는 연산자

14. 조건문
  (1) if(조건식){}문
  (2) if(조건식){} else{} 문
  (3) if(조건식){} else if(조건식) {} 문
  (4) if(조건식){} else if(조건식) {} ... else{} 문
  (5) switch(값) { case : ... default:} 문

15. 반복문
  (1) for(초기식;조건식;증감식) {}
  (2) while(조건식)
  (3) do{}while(조건식);
  (4) 확장 for 문
   for(변수 : 배열 혹은 Collection)

16. 제어의 이동
  (1) break
  (2) continue
  (3) return

17. 인터페이스 (interface)
  (1) 정의 : 명세서(골격), 설계자가 원하는 메소드, 상수값, JavaDoc 을 통해서 다른 객체와
                소통할 수 있는 수단을 만들어 내는 것.
                모든 메소드가 추상 메소드, 모든 Field 가 상수로 구성된 것.
  (2) 특징
     <1> 인터페이스끼리 다중상속이 가능하다.
     <2> 클래스에서 인터페이스를 다중 상속 가능하다.
     <3> 모양
            - Field 에는 public static final 예약어가 생략되어 있다.
            - Method 에는 public abstract 예약어가 생략되어 있다.
     <4> 인터페이스를 상속하는 클래스에서는 반드시 메소드를 재정의(오버라이딩)해야 한다.

18. 배열 Array
  (1) 정의 : 같은 타입(type)의 객체 또는 기본형 자료를 저장하는 저장소로써, 
                생성될 때 그 크기가 고정되는 저장소
  (2) 선언
            -> (저장될 객체나 기본형 Type) + 변수명[];
            ex) int i[]; int[] i; int []i;
  (3) 생성
            -> new int[5];
            -> new int[]{1, 2, 3, 4, 5};
            -> {1, 2, 3, 4, 5};

19. 중첩클래스 (Nested class)
  (1) 정의 : 클래스 안에 클래스
  (2) 종류
     <1> static nested class
     <2> inner class
     <3> anonymous inner class

20. 예외처리
  (1) 예외(Exception)의 정의
       프로그램이 정상적으로 진행되지 못하게 하는 돌발상황
  (2) 계층도
              Throwable
                   |  |
           Error  Exception
                   |  |
 RuntimeException  CheckedException
  (3) 예외처리의 목적
       프로그램 실행시에 발생할 수 있는 상황들을 정해놓고, 해당상황 발생시
       적절한 조치를 취해서 프로그램이 정상적으로 작동하도록 하는데에 목적이 있다.
  (4) 예외처리의 특징
     <1> Exception 은 메소드에서 발생한다.
     <2> 발생시킬때 throw 라는 예약어를 사용한다.
     <3> Error 나 RuntimeException 을 제외하고는 항상 잡거나(try catch) 
            자신이 처리하지 않고 던지게끔 선언해야한다.(throws)
     <4> try catch
            try {
                예외가 발생하는 구문(메소드)
            } catch(Throwable 의 자식 e) {
                예외처리구문
            }
     <5> catch 절에서 2개 이상의 Exception 을 잡을 경우 하위 Exception 부터 잡는다.
     <6> finally 절
            try 와 같이 쓰이며, 어떤 상황하에서도 실행되는 구문.
            (단, System.exit() 는 제외)
     <7> Error, RuntimeException
            1) throws 선언하지 않아도 자동으로 던져진다.(메소드 호출한 곳으로)
            2) try catch 안해도 컴파일 오류 발생하지 않는다.
     <8> 주요 메소드
            1) getMessage() : 익셉션 생성시 생성자에 넣어둔 문자열 가져오는 메소드
            2) printStackTrace() : 익셉션 최초 발생 부분 부터의 stack 메소드 구조를 다 보여주는 메소드

21. Package
  (1) 컴파일 방법
       javac -d . *.java : -d 옵션으로 class 파일이 저장될 위치를 정한다.
  (2) 실행 방법
       java com.study.StudyA 식으로 실제 패키지명을 다 명시해야한다.
  (3) jar 작성
       jar cvf test.jar 디렉토리명

//////////////////////// 주요 클래스 //////////////////////////////
22. Object (가장 상위 root class)
     equals(), hashCode(), toString(), getClass(), finalize()(객체 소멸 직전 호출), 
     clone()(Cloneable interface 상속 Calendar 객체 복사시 유용)
 ※ 참고 : Hashtable 에서 직접 만든 빈즈 객체를 키(key)로 사용하고 싶다면 반드시 equals() 와 hashCode()메소드를
              오버라이드 하는게 좋다. (안하면 키값을 제대로 못찾는 경우 발생)

23. Class (클래스를 대변하는 클래스)
     getName(), getSuperclass(), getDeclaredFields(), getDeclaredMethods()

24. Wrapper class (기본형 변수를 객체형 변수로 변경해야할 경우 사용)
     Byte, Short, Integer, Long, Character, Float, Double, Boolean

25. String class (immutable 불변 클래스 Wrapper class 포함)
  (1) 한번 생성된 객체의 내용을 연산이나 메소드의 사용에 의해  변화시키는 것이 불가능하다.
  (2) 문자열의 비교시는 (== X) equals 메소드를 써야한다.

26. Math (객체 생성 불가)
     수학연산과 관련된 메소드가 존재하는 유틸 클래스

27. Calendar
     날짜 및 시간을 위한 클래스

28. SimpleDateFormat, DecimalFormat
     날짜나 숫자 등을 원하는 방식으로 변환할때 사용

29. System
     exit(0) : 인자값으로 0이면 정상종료, 0 아니면 비정상종료
     gc() : 가비지 컬렉터를 가능한한 빨리 실행되도록 하는 메소드
     arraycopy() : 배열 복사시 사용
     currentTimeMillis() : 시스템의 현재시간을 long 타입으로 가져옴

30. Collection Framwork (자료구조)
  (1) hierachy(계층구조)
            Collection                             Map
             |    |    |                      |
  Set  List   Queue      SortedMap
  |
 SortedSet

  (2) interface
     <1> Collection : 컬렉션 계층구조의 root
     <2> Set : 중복된 요소(element)를 허용하지 않는다.
      ex) 트럼프 카드
     <3> List : 순서가 있는 컬렉션(sequence 라고도 한다.) 중복된 요소 허용, 인덱스로 각 요소에 접근 가능
     <4> Queue : 우선순위를 가지는 여러개의 요소를 가지고 있는 컬렉션 FIFO(First-in First-out)
     <5> Map : key와 value로 이루어진 객체, 중복된 key는 불가
      // 순서가 있는 계열
     <6> SortedSet : 오름차순(ascending)의 순서로 요소를 가진다.
     <7> SortedMap : key 값을 오름차순의 순서로 가진다.
      ex) 사전, 전화번호부
  
     // ETC
     <8> Enumeration : 요소를 나열된 형태로 가지고 있다.
     <9> Iterator : remove 가 가능하다
 
  (3) Implementations (구현체들)
     <1> Set
            1) HashSet : TreeSet 보다 빠르다.
            2) TreeSet : SortedSet 에서 구현
     <2> List
            1) ArrayList : LinkedList 보다 빠르다.
            2) LinkedList : 각각의 요소가 연결되어 있는 리스트
                List 의 계속 요소(element)를 추가하거나 List 를 순환하면서 값을 삭제하거나 하는 일이 많을때 사용
                단, 데이터의 빠른 검색에는 적합하지 않다.(검색시 2번 인덱스를 찾기 위해서 0부터 찾아가기 때문)
               Queue 와 Stack 으로 사용 가능
                  -Queue : offer()(넣기), poll()(가장 앞의것 빼오기), 
                                peek()(삭제안하고 가져오기)
                  -Stack : addLast(), removeLast(), getLast()
     <3> Map
            1) HashMap : 빠르다. null key, null value 허용
            2) TreeMap : 순서가 있다.(SortedMap 구현물)
            3) LinkedHashMap : 집어넣는 순서로 정렬, 거의 
                HashMap 만큼 빠르다.
     <4> synchronized(동기화) 계열
            1) Vector (List 계열)
            2) Hashtable (Map 계열) : null key, null value 허용 안함
  (4) Collections : 각종 Collection 관련 유틸 클래스
  (5) Arrays : 배열 관련 유틸 클래스

31. Thread
  (1) Process : 컴퓨터 OS 내에서 실행중인 프로그램
  (2) Thread
       하나의 프로세스내에서 실행되는 일련의 명령흐름.
       즉, 프로세스의 구성단위
  (3) 특징
       한 프로그램내에서 동시에 두가지 이상의 일 수행하는 것으로 프로세스보다 작은 단위이며 프로세스의 자원
       (resource)을 공유하기 때문에 가볍다는 장점이 있다.
  (4) 생성과 실행
     <1> 쓰레드 대상 생성방법
            1) Thread 클래스를 상속받는 방법

     <2> 쓰레드 생성과 실행
            Thread th = new Thread(대상객체);
            th.start(); 
            start() 메소드를 호출하면 ready 상태가 되고,
            JVM에 의해서 자동으로 run() 메소드가 실행된다.
  (5) 소멸
        run() 의 body를 모두 수행뒤에 terminated 된다.
  (6) Life Cycle - ppt 자료 참조
  (7) 동기화 (synchronized)
        synchronized 블럭에 하나의 쓰레드가 객체에 대한 lock(monitor)을 소유하고 실행이 끝난 뒤 unlock 해주는 것
        즉, 한번에 하나의 쓰레드만 실행된다.
 

Posted by 미스터네오
,