[기초]클래스,예외처리,Collection,Assertion

2010. 1. 31. 10:05Java

■ 클래스의 기본 구성
형식
 접근_제한자 지정_예약어 class 클래서
 extends 상위 클래스 implements 상위인터페이스

■ 클래스 포함 멤버
 Nested Class : 중첩 클래스
 Field : 데이터 저장 공간 (멤버 필드 , 클래스 안에 있는 필드를 멤버 필드다.)
 Construct : 객체 생성 및 초기화 Method (객체를 생성시키고, 초기화 시키는 생성자)
 Method : 특정 행위의 기술 영역

■ 클래스 사용법 과 메모리
- 객체 생성 : 클래스명 객체명 = new  생성자(매개변수);
(new : 동적 메모리 할당 연산자) -> GC heap 영역에!!!  , 레퍼런스 4byte 로
- 연산자 : .(참조 연산) - 최우선 연산자 
- 객체명.Field or 객체명.메소드
- 객체는  Reference 4byte  , GC 영역 할당
 
■ 생성자 메서드
- 클래스명과 동일
- 결과형 리턴값이 없다.
- 객체 생성 시 반드시 하나의 생성자 호출
- 생성자 오버로딩
  오버로딩 : 생성자가 여러가지가 있을수 있다.(매개변수의 개수 및 매개변수 자료형이 틀리다)
  만약 생성자가 없을때, Jvm에서는 자동으로 default 생성자가 호출됨.
- 멤버 필드 값 초기화
- this 와 this()

■ Garbage Collection
- 더 이상 참조 받지 않는 Garbage Collection 영역의 메모리를 삭제한다.
- 어떤 공간이라도 해당 메모리를 참조하면 삭제 하지 않는다.
  Garbage Collector의 호출
- System.gc();
- Low memory 상태에서 최 하위 Thread로 동작

■ 접근 제한자 와 멤버필드
 - 클래스 내에 멤버에 접근을 제한하기 위한 예약어 => 은닉화 , 제약

■ 접근 제한자의 종류
 - private : 하나의 클래스 내에서만 사용 가능한 멤버를 지정할 때 사용하는 제한자
 - package : 동일 파일 + 동일 폴더
 - protected : 동일 파일 + 동일 폴더 + 상속
 - public : 객체를 가진 모든 영역

■ 멤버필드 와 멤버 메서드
 멤버 필드 (Member Field)
 - 형식 : 접근제한자 [지정예약어] 자료형(클래스형) 필드명 = 값;
 멤버 메서드 (Member Method)
 - 형식 : 접근제한자  [지정예약어] 결과형리턴값(자료형) 메서드명(매개변수들) throws 예외클래스들{
......
}
지정예약어 : static 은 static으로 지정된 곳에서만 사용할수 있데유~

■ 자기자신의 객체를 참조하는 this
 this의 정의 : 클래스 내부에서 자신의 클래스를 지칭하는 객체
 this()의 정의 : 생성자 내부에서 자신 클래스의 또 다른 생성자를 지칭하는 메서드
 메서드의 0번째 매개변수
 - 자신_클래스명 this <- this 는 예약어
 - 0번째 매개변수는 표기할 수 없다.
( Exam_01_Sub this,int x , int y);

■ 공유 필드를 위한 static
static 필드 : 데이터 값의 공유를 위해 선언하는 공간(멤버필드로만 가능)
 - 클래스 이름으로 접근 가능
 - 객체 발생 전 메모리 할당

■ Static 초기화 영역
static 초기화 영역 : static 멤버 필드의 값을 초기화 하기 위한 영역
 : 생성자에서 초기화 하지 않는다.
형식) static { 초기화 구문..}
static 메서드 : static 필드 컨트롤 목적
- this가 0번째 매개변수로 갖고 있지 않는다.

■ 상수 필드와 변수를 위한 final
-final 필드 : 상수 값을 저장하기 위한 공간으로 값이 변경될 수 없음.
 - 지역변수나 멤버 필드 모두 가능
-final 메서드 : 상속 시 오버라이딩 되지 않아야 할 메서드를 지정
 - 만약 overriding 하게 되면 에러 발생.

■ 기타 지정 예약어
transient : (IO) 직렬화 되지 않는 멤버 Data 지정
BufferedReader , 이름,나이 -> 파일로 저장시에 BufferedReader 는 저장시에 빼주세요!!
instanceof : 특정 클래스의 instance 여부를 체크

■ 중첩 클래스(inner Class)
 - 클래스 내부에 또 다른 클래스를 가짐으로 클래스 관리의 효율을 높인 것(static 포함 불가)
 - 중첩 클래스의 형식과 생성 파일
  형식) class Outer{ class Inner{...}}
  생성파일) Outer.class, Outer$Inner.class
 - 중첩 클래스 객체 생성
  Outer.Inner oi = new Outer().new Inner();

■ 정적 중첩 클래스(static Inner Class)
 - 중첩 클래스 내부에 static 멤버를 포함할 수 있는 형태(Outer의 non-static 멤버 포함 불가)
 - 정적 중첩 클래스의 형식과 생성파일
   class Outer { static class Inner{...}}
  생성파일) Outer.class, Outer$Inner.class
 - 정적 중첩 클래스 객체 생성
  Outer.Inner oi = new Outer.Inner();

■ 지역 중첩 클래스(local Inner Class)
 - 메서드 실행 시에 사용되는 클래스를 정의한 형식으로 접근자나 지정어를 가질 수 없다.
 - 지역 중첩 클래스의 형식 및 생성 파일
  class Outer{
    method(){ class Inner{....} }
  }
  생성 파일은 Outer.class, Outer$숫자Inner.class
 - 객체 생성은 외부에서 할 수 없다.

■ 익명 중첩 클래스(anonymous Inner)
 기존 클래스의 특정 메서드를 오버라이딩 하여 원하는 형태로 재정의 하여 사용하는 방식
 외부 멤버 중 final 만 포함 할 수 있다.
 익명 중첩 클래스의 형식 및 생성 파일
 class Inner{...}
 class Outer{method(){ new Inner(){....}}}
 Outer.class , Outer$숫자.class
 new Inner() 자체가 객체 생성임

■ Object 와 super
포함 Object의 단점 : 객체명의 접근
최상위 클래스 : java.lang.Object
자바에서 생략된 형태들
import, default 생성자 , this , 0번째 매개변수, toString(), Object super()

■ this() 와 super()
 - this() : 자신 클래스의 또 다른 생성자 호출
 - super() : 상위 클래스의 생성자 호출

■ 필드와 메서드의 상속
필드 상속과 접근자 : protected (제약어)
super 와 this 예약어를 통한 접근
 - 생략 시 자동 this 인식

■ 메서드의 상속과 메서드 재정의
 - 메서드 오버라이딩 : 접근자와 예외 전가 (상속에서만 나타나는 오버라이딩)
  : 동일한 이름의 메서드
 - 메서드 오버로딩 : 매개변수 개수와 자료형
 - final 메서드의 제약
   private < package < protected < pubilc

■ 다형성의 표현
 다형성이란 : 부모 객체를 통해 자식 객체를 표현하는 방법
 멤버 필드의 다형성 표현
 - 부모 객체의 필드만 사용 가능하다.
 멤버 메서드의 다형성 표현
 -자식 객체의 메서드를 먼저 수행
 -자식 객체에 해당 메서드가 없다면 부모 객체의 메서드 실행
abstract and interface : 둘다 클래스라는 입장에서 바라봐~~~
abstract (추상적이다)
abstract 메서드
 - 메서드의 내용부가 정의 되지 않은 형태로 모델 개념의 메서드
 - 반드시 오버라이딩 되어야 사용 가능
 - 메서드에 abstract가 포함되면... T.T  Class 도 abstract가 들어가야 한데용;
abstract 클래스
 - abstract 메서드를 포함하고 있는 클래스로 다형성 표현으로 사용
 - 객체를 발생시킬 수 없는 것을 제외하면 일반 클래스와 동일
interface
 - abstract 클래스의 한 종류로 포함 멤버의 제약을 가짐(순수 디자인 목적)
 - 다중 상속이 가능한 유일한 클래스

interface의 포함 멤버
 - public static final 멤버 필드
 - public abstract 멤버 메서드
 - public static inner 클래스

■ 멀티 Thread 와 API
 - Thread 는 뭐냥? : 시작점과 진행 그리고 종료점을 가지는 일련된 하나의 작업 흐름
 Thread 생성 클래스 : Thread, Runnable
  : 클래스의 상속(단일 상속), 인터페이스 상속(다중 상속) 의 형태로 존재!!!

■ Thread의 우선 순위
  : 우선 순위의 제어 , 순서를 줘라
 독립 Thread와 데몬 Thread
  : public static void main은 주 Thread 인거야
    메인과 동일하게 끝나면, Deamon - Thread 이래
    안끝나면... 독립 Thread
 기타 Thread APIs :   java.lang 안에도 Thread가 있데유

■  동기화 : 지역 동기화와 메서드 동기화
  synchronized , synchronized(this)

■ 예외와 예외처리
 - 예외 전가(throws Exception)
 - 예외란 : P/G 실행 시 예상치 못한 일로 발생한 에러
 - 예외 처리 관련 예약어
  throw : 예외를 발생시켜라
  throws : 예외를 통과 시켜라!!!
  try ~ catch(XXXXException x){} finally{}
예외 처리의 용도
 - 정상종료, 예외보고, 계속 실행, 대안적 결과
사용자 정의 예외
 Exception Class 상속
 
■ Packages
 - 폴더의 개념
 - package 란 유사 클래스를 묶어서 관리하는 폴더의 개념
 - package 선언
  : 주석을 제외한 상태에서 파일의 최고 상위에 위치 (package 경로.경로.경로....)
 - package 컴파일
  : javac -d 저장경로 파일명.java
 - 사용법
  : import 및 절대경로명

■ Assertion 
 - 예외처리와 일맥상통 ,
 - assertion 이란 : 개발시에  주로 사용
 : 특정 구문 실행 시 결과를 단정지어 표현하는 방법(원하는 결과와 다를 경우 에러발생)
  형식 : assert [boolean 검증] : 에러처리
  java -ea | da | esa  파일명
   :ea는 enable assertion
    da는 disable assertion
    esa는 뭘까?
  지정 옵션:
 - ea:클래스 , -ea:... , -ea:<package명>

■ Collection 과 APIs
 - 무한 데이터 입력,LinkedList 를 좀더 공부해!! (java.util.*)
 - Collection 관련 APIs : Set , Map , List (무한적으로 데이터를 받아낼수 있는 배열이다.)
   Collection은 무한한 데이터를 넣을수 있는것이야!!!
   자기 참조 : java.util.* 

 구분 : 정렬이 되느냐!!(order) , 중첩데이터를 허용하느냐 마느냐
 Set : 복주머니 속의 구슬, 정렬이 안되겠죠 ~ 로또!!!(순서가 없어, 정렬이 안되)
       중첩 객체 허용 안됨!!!
 Map : 깃발을 꽂아 놓았데... 구분이 가능할껍니다
       중첩 개체 강력 허용!!!!
       Ordering은 되지 않습니다.
 List : 기차!!!!!, 먼저 달려있는지 알수 있다.(Ordering이 된다. 집어 넣은순서대로)
       중첩 개체 허용
       Ordering  허용

 Set , Map , List 의 SubClass를 API에서 찾아봅시다.


■ Wrapper 클래스들
 - Class라는 클래스와 Runtime 클래스
 - String 클래스
 - Data 와 Calendar 클래스
 - SimpleDataFormat 클래스 
 - StringTokenizer 클래스
 - For문의 확대, Generic & Auto-boxing
    Generic : ArrayList<String> al = new ArrayList();
     컬렉션 타입 쓸때 따라서 쓰는 것이다