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