상황. 이클립스에 F3을 누르면 해당 메소드 or 해당 클래스로 이동을한다.
하지만 이상하게도 JDK 클래스들을 보려하면 이상한 영문으로 표시만되있고 ㅡㅡ 알아볼수가없다.. 
분명 자바는 오픈소스라는데.. 오픈소스면 .. 소스를 볼수있단거라 생각했는데 .. 그게아닌건가? 라는 의문이든다 ㅠㅠ

그렇게 의문을 갖고 알아보니 .. 아 .. 소스를 볼수 있는방법이 있었다. ㅎㅎㅎ

다들 아시겠지만 혹시나 하는 마음에서 글을 올린다.

스텝1. 나는 현재 JDK 1.6 중 swing 패키지 안에있는 JFrame 클래스가 궁금하다.. 웹으로 api를 보는법도 있지만.. f3을 누르면 해당 클래스 나 메소드 변수 명으로 이동하지않았던가 ... 이클립스로 직접 보고싶다 ㅠㅠ 그래서 JFrame에 대고 f3을 눌러보았다.




스텝2. 아니나 다를까 이상한 화면이 나온다.. 이게 대체 머징 ... 왜못봐 .. ㅠㅠ 오픈소스라며!!! 
자자 너무 화내지말고 Change Attached Source... 버튼을 눌러보자 




스텝3. 엥 이상한 창이 뜬다.. 아 알고보니 External File..로 소스를 볼수 있다고 하니 한번 눌러보자 .




스텝 4. 그리곤 자바 가 설치된 곳으로 이동하여 src.zip 파일을 클릭하고는 열기를 눌러준다. 
(자바의 위치 자신이 깐위치 즉 : 필자는 C:\Program Files\Java\jdk1.6.0_18 에있다. 자바가 설치된 폴더에는 분명 jdk1.6.x.x 라는 폴더와 jre6이라는 폴더가 있을것이다. jre6폴더에는 src.zip이없음을 유의하자 )





스텝 5. 설정된것을 확인하고 ok!!!




스텝 6.헉... 드디어 열린다 열려!! 아 오픈소스 맞구나 볼수잇었네? 괜한 오해를하고말았다 ㅎㅎㅎ 
이처럼 String 클래스 List 클래스 등등 원하는 자바 api의 모든 소스를 확인할수 있는 결과를 낳았다. ㅎ

출처 : http://choikyusun.tistory.com
Posted by 미스터네오
,
□ 10장 Object 클래스
  ■ Object : 모든 클래스의 최상위 클래스
     - equals, toString, hashCode, finalize, clone, notify, notifyAl, wait, getClass
 boolean equals(Object obj) String toString() 
 int hashCode() protected void finalize() 
 final void notify(), final void notifyAll() protected Object clone()
 final void wait(), final void wait(Long timeout),
 final void wait(long timeout, int nanos)
final Class getClass() 
     ● 디폴트 toString() : 가장 중요한 정보를 리턴하는 메서드, 객체의 타입과 객체를 구별하는 번호
         - 오버라이딩 : 문자열로 리턴, 객체의 요약 정보를 문자열로 리턴하는 목적으로 사용
     ● 디폴트 equals() : 참조값 비교, 재정의해서 사용자 정의 비교법으로 사용, ==
         - 오버라이딩 : 사용자 정의 객체 비교법
     ● hashCode() : 객체의 고유번호 출력(16진수)
  ■ finallize() : 객체의 메모리가 제거되기 직전에 가비지 콜렉터가 자동으로 호출하는 메서드(protected void finalize())
      - 가비지 콜렉터는 스레드
  ■ clone() 오직 Object의 clone()만이 메모리 차원의 복사가 가능
      - 사용 : protected이기 때문에 상속된 상태에서 사용, Cloneable 인터페이스가 구현된 상태에서 clone()을 사용
      - 접근 : protected이기 때문에 내부에서 재정의한 후 super로 접근
  ■ wait()과 notify() : 메모리와 직접적인 관련이 있고, 데이터 동기화와 많은 관련이 있다.
     ● wait() : 스레드를 NotRunnable 상태로 만든다
     ● notify(), notifyAll() : NotRunnable 상태의 스레드를 Runnable 상태로 만든다.
     ● 공유자원을 synchronized로 동기화 했을때
         - 하나의 스레드가 공유자원을 사용할 때 자동으로 공유자원에 락(Lock)을 걸어준다.
         - 공유자원을 원하는 다른 스레드들은 자동으로 대기한다.
         - 락이 해제되었을때 대기하던 스레드들은 순서대로 공유자원을 사용
  ■ Class getClass() : 클래스의 정보 클래스
     ● 리플렉션(Reflection)을 이용한 프로그램 기법 : 객체를 이용해서 클래스를 얻는다.
□ 11장 자바 Reflection
  ■ Class 클래스 : .class의 등록정보 클래스, 바이트 코드의 등록정보 클래스
     ● 리플렉션(Reflection)을 이용한 프로그램 기법 : 객체를 이용해서 클래스의 정보를 분석해 내는 프로그램 기법
         - 사용 : 형은 알고있지만 형변환을 할 수 없는 상태에서 객체의 매서드를 호출  
         * 이유 : 모르는 클래스를 핸들하고자 하는 것이 아니라, 클래스의 모든 정보는 알지만 형변환을 할 수 없기 때문   
◈ 생성자에 매개변수가 없는 객체 생성하기
◈ 생성자에 매개변수가 있는 객체 생성하기 : 오버로딩에 의해서 여러개의 생성자가 존재할수 있기 때문에 생성자 검색
◈ 매개변수가 없는 메서드 호출하기
◈ 매개변수가 있는 메서드 호출하기
◈ 특정객체에 멤버 필드 값 세팅하기
◈ 특정객체에 멤버 피르 값 얻어내기
     ● Data 클래스 내에 존재하는 인터페이스와 상위 클래스 알아내기
Class c = Data.class;
Class iface = c.getInterface()
Class sc = c.getSuperclass()
     ● 정적 바인딩 클래스 : 컴파일할때 해당 .class 파일이 필요하다면, 해당 클래스를 정적 바인딩으로 사용하는 것이다.
         - 정적 바인딩으로 Class를 생성한 후 객체를 만들었다면 다운캐스팅 할 수 있다.
     ● 동적 바인딩 클래스 : 일반적인 리플렉션 기법
         - 다운 캐스팅 할수 없다.(컴파일할때 해당 클래스의 이름을 사용할 수 없기 때문)
         * 매개변수가 없을때나 있을때 메서드 호출
     ● instanceof : 형 확인이 필요한 상황에 사용
□ 12장 자바 Serialization
  ■ 클래스와 객체의 관계 : 클래스의 형정보와 객체의 메모리 사이의 관계
     ● 직렬화 : 객체를 저장하는 기법(바이트로 저장)
         - 이유 : 객체의 메모리는 순간적이기 때문에 영구적으로 보관하기 위해서
         - 조건 : 반드시 non-static, non-transient로 선언되어야만 직렬화에 포함된다.
직렬화를 위한 인터페이스
  ◈ Serializable 인터페이스 : 인터페이스가 구현되면 저장이나 복원은 Object 스트림이 알아서 한다.
  ◈ Externalizable 인터페이스
         - 객체 직렬화 과정
  ◈ 목표지점에 출력 스트림을 생성
  ◈ 생성된 스트림을 Object 출력 스트림으로 변환(ObjectOutputStream)
  ◈ 직렬화된 객체를 객체스트림을 통해서 전송하거나 읽어낸다.(ObjectOutputStream → writeObject(Object obj))
  ◈ 스트림을 닫는다
     ● 역직렬화 : 직렬화된 객체를 복원하는 기법
         - 객체 역직렬화 과정
  ◈ 목표지점에 입력 스트림을 생성한다.
  ◈ 생성된 스트림을 Object 입력 스트림으로 변환(ObjectInputStream)
  ◈ 객체 스트림을 통해서 직렬화된 객체를 읽어낸다(ObjectInputStream → readObject())
  ◈ 스트림을 닫는다.
     ● 수작업 직렬화 : SerialStream클래스를 역직렬화하기 위해 DeSerialStream 클래스를 두고있다
     ● writeObject()와 readObject()
         - writeObject() : 객체를 스트림에 기록하는데 사용
         - readObject() : 스트림으로부터 객체를 복원하는데 사용
     ● transient 스트림 : 멤버변수를 직렬화의 대상에서 제외할때 사용하는 키워드, 변수앞에 transient명시
□ 13장 자바 AWT & Swing
  ■ AWT와 스윙
     ● AWT(Abstract Window Toolkit) : 윈도우 프로그램을 하기 위한 클래스 라이브러리
         - 장점 : 플랫폼 독립적인 그래픽 프로그램을 작성할 수 있다.
     ● Swing(스윙) : AWT를 디스플레이적인 면과 기능적인 면에서 개선한 그래픽 라이브러리

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

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

□ 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장 언어의 기본
 ■ 자바를 배우려면 클래스를 알아야 한다. 
 ■ 클래스를 정복하는 것이 자바의 최종 목표이다.
 ■ 데이터 타입 : 메모리를 생성하기 위한 도구
 ■ 기본 데이터 타입 : byte(1), char(2), int(4), long(8), float(4), double(8), boolean(1)
    ● 분류
       : 정수형 - byte, char, int, long double
       실수형 - float, boolean
 ■ 자바에서는 모든 데이터 타입이 signed 계열이다.  signed 계열 = 음수와 양수를 함께 표현
 ■ 데이터 타입의 목적
    1) 생성할 메모리의 크기를 지정하기 위한 목적으로 사용.
    2) 메모리의 형태(Type)를 지정하는 목적으로 사용.(메모리의 형태란 비트의 조합을 의미)
 ■ 데이터 타입의 최종 정의
    ● 메모리의 크기(Size)와 형태(Type)를 지정하기 위한 도구
 ■ 자바에는 포인터가 없어서 선언된 변수의 정확한 주소를 확인할 방법이 없다.
 ■ 변수 : 데이터 타입이 명시된 형태의 데이터를 담을 수 있는 메모리
 ■ 변수의 목적 : 데이터를 보관하기 위해서
 ■ 상수 : 데이터 그 자체를 말하여 바꿀 수 없는 데이터를 말한다. 데이터 그 자체를 상수라고 한다.
 ■ 데이터 할당 : 변수에 값을 넣는 것.
 ■ 데이터 할당의 법칙 : 변수에 상수가 존재해도 다른것을 할당하면 마지막에 넣은것이 최종적으로 할당


□ 2장 클래스의 기본
 ■ 자바에는 구조체가 없다. 구조체에서 발전된 개념이 클래스
 ■ 자바의 클래스 개념에서는 반드시 new 연산자로 메모리를 생성하는 부분이 나와야 한다.
 ■ 구조체와 클래스의 정의 : 구조체와 클래스는 데이터 타입 생성기이다.
 ■ 클래스의 역할
     ● Person(인간) 클래스 생성
class Person{
int age;
int height;
int weight;
}
     ● Person 클래스로 사람 생성
Person Hong = new Person();
Person Choi = new Person();
     ● Hong의 정보입력
Hong.age = 20;
Hong.height = 170;
Hong.weight = 60;
     ● Choi의 정보입력
Hong.age = 26;
Hong.height = 183;
Hong.weight = 75;
    ● Person Choi의 메모리는
     □□□□ □□□□ □□□□


□ 3장 클래스
  ■ 클래스의 구성요소
    ● 변수
       * 멤버변수 : 클래스꺼, 자동 초기화.
       * 지역변수 : 메소드꺼, 초기회 해줘야함.
    ● 메서드
      *일만하는 메서드 : void형태 리턴값 없음
       * 일을 한 후 값을 리턴하는 메서드 : 타입 
       → 리턴은 메서드의 종료를 의미한다.
  ■ 메서드는 변수이다.
  ■ 클래스 내의 메서드
    ● 보통 클래스 내에 존재하는 변수나 메서드를 클래스의 멤버라고 부른다.
  ■ 클래스 = 데이터 + 메서드
                = 구조체 + 메서드
  ■ 접근제어 : 메모리를 보유한 객체를 이용해서 멤버에 점을 찍고 접근할 수 있는지 없는지 결정
    ● 이런식의 접근제어를 자료의 은폐화 라고 표현
    ● public(제한없음) > protected(상속관계) > default(같은 패키지내) > private(같은 클래스내)
  ■ 객체의 메모리 생성
    ● 클래스 데이터 타입으로 변수를 선언, 컴퓨터 내의 메모리 속에 데이터 타입에 해당하는 만큼의 메모리를 확보하는 일
        (위의 인간(Person) 클래스에서 사람 객체(Choi) 생성 참조)
    ● 자바에서는 객체 변수를 참조변수라고 말한다.
    ● 참조값이란 객체의 메모리를 생성했을때 메모리와 연결된 유일한 숫자값.
    ● 객체 변수는 참조변수이다.
    ● 레퍼런스는 주소의 참조값


□ 4장 자바의 기본
  ■ Static
    ● 객체를 아무리 많이 만들더라도 스태틱 변수는 오직 하나의 메모리만 생성
    ● 객체를 생성하기 전에 스태틱 멤버에 접근할 수 있다.
    ● 객체 생성 이전의 스태틱의 메모리가 생성된다.
    ● 스태틱 멤버 메서드 내에 일반 멤버 변수를 사용할 수 없다.
  ■ Stack 메모리
    ● 프로그램을 실행하는데 필요한 메모리 공간
    ● 메서드가 호출되는데 필요한 메모리
        - 지역변수(Local Variable), 매개변수(Paremeter), 리턴값이 저장될 곳(Return Value)
    ● 스택 프레임
        - 하나의 메서드를 호출하는데 필요한 메모리 덩어리
        - 메서드 하나당 하나의 스택 프레임이 존재
    ● 자바의 메모리 : 스택, 힙
    ● 가비지 콜렉터 : 자바의 메모리 관리자 역할(힙에 생성되는 객체의 메모리)
  ■ 오버로딩
    ● 메소드의 이름은 같은데, 인수의 갯수나 Type 이 다른 형태의 메소드로써 설계, 사용의 편의성을 위해서 존재한다.
  ■ 생성자
    ● 객체를 만들기 위해서 호출되는 메소드 형태의 것(new 와 함께 호출하면 객체 생성)
  ■ 상속
    ● 하위 클래스가 상위 클래스를 상속받았을때, 하귀 클래스는 상위 클래스의 모든 권한을 갖게 된다.
    ● 생성자는 상속되지 않는다. 상→하 순위로 생성자 호출
    ● Virtual메소드 : 아버지의 이름으로 아들의 메서드를 호출하는 기법
    ● this : 자기자신
    ● super : 상위 클래스


□ 5장 다형성
  ■ 다형성 : 하나로 여러가지 일을 하는것
    ● Abstract
        - 추상클래스 : 몸체없는 메서드({})를 가지고 있는 클래스, 클래스 선언부 앞에 abstract를 붙여준다.
        - 추상메서드 : 몸체없는 메서드({}), 메서드 선언부 앞에 abstract를 붙여준다.
    ● Interface : 골격만 가지고 있는 클래스, 몸체없는 메서드로만 이루어진 클래스
    ● Overriding
    ● Upcasting : 하위 클래스의 객체가 상위 클래스의 형으로 캐스팅 되는 것.
    ● Downcasting : 업캐스팅한 객체를 다시 되돌리는 것.
        - 직렬화 : 객제의 메모리를 통째로 저장할 수 있는 기법
  ■ 다중상속 : 자바는 단일 상속을 기본


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

소설같은 자바 훑어보기 3권!!  (0) 2010.02.22
소설같은 자바 훑어보기 2권!!  (0) 2010.02.19
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 미스터네오
,

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