##Chapter10 내부 클래스

###1. 내부 클래스(inner class)란?

==내부 클래스의 장점==
* 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다.
* 코드의 복잡성을 줄일 수 있다(캡슐화).

 
    class A { //외부 클래스
     //...
     class B { //내부 클래스
         // ...
        }
        //...
    }
   

###2. 내부 클래스의 종류와 특징

|내부 클래스| 특징 |
|---------|-----|
|인스턴스 클래스<br>(instance class)|외부 클래스의 멤버변수 선언위치에 선언, 외부 클래스의 인스턴스 멤버처럼 다루어짐.
|스태틱 클래스<br>(static class)|외부 클래스의 멤버변수 선언위치에 선언, 외부 클래스의 static 멤버처럼 다루어짐.|
|지역 클래스<br>(local class)|외부 클래스의 메서드나 초기화블럭 안에 선언, 선언된 영역 내부에서만 사용.|
|익명 클래스<br>(anonymous class)|클래스의 선언과 객체의 생성을 동시에 하는 클래스(일회용)|

###3. 내부 클래스의 선언
 
    class Outer {
     class InstanceInner {}
        static class StaticInner {}
       
        void myMethod() {
         class LocalInner {}
        }
    }
   

####4. 내부 클래스의 제어자와 접근성

==Ex1==
 
    class InnerEx1 {
     class InstanceInner {
         int iv = 100;
            static int cv = 100; //에러! static변수 선언X
            final static int CONST = 100; //final static은 상수이므로 허용.
        }
       
        static class StaticInner {
         int iv = 200;
            static int cv = 200; //static클래스만 static멤버 정의.
        }
       
        void myMethod() {
         class LocalInner {
             int iv = 300;
                static int cv = 300; //에러! static 변수 선언X
                final static int CONST = 300; //final static은 상수이므로 허용.
            }
           
        }
    }
   

==Ex2==
 
    class InnerEx2 {
     class InstanceInner {}
        static class StaticInner {}
       
        //인스턴스멤버 간에는 서로 직접 접근 가능.
        InstancdInner iv = new InstanceInner();
        //static멤버 간에는 서로 직접 접근 가능.
        static StaticInner cv = new StaticInner();
       
        static void staticMethod() {
       
         //static멤버는 인스턴스 멤버에 직접 접근X
 //  InstanceInner obj1 = new InstanceInner();
      staticInner obj2 = new StaticInner();
           
            //굳이 접근하고자 한다면, 아래와 같이 객체 생성.
            //인스턴스 클래스는 외부 클래스를 먼저 생성해야만 생성할 수 있다.
            InnerEx2 outer = new InnerEx2();
            InstanceInner obj1 = outer.new InstanceInner();
        }
       
        void instanceMethod() {
         
            //인스턴스메서드에서는 인스턴스멤버와 static멤버 모두 접근 가능.
            InstanceInner obj1 = new InstanceInner();
            StaticInner obj2 = new StaticInner();
           
            //메서드 내에 지역적으로 선언된 내부 클래스는 외부에서 접근할 수 없음.
 //  LocalInner lv = new LocalInner();
        }
       
        void myMethod() {
         class LocalInner {}
            LocalInner lv = new LocalInner();
        }
    }
   

==Ex3==

 * class InstanceInner {}
  * 외부 클래스의 private멤버도 접근 가능.
 * static class StaticInner {}
  * static 클래스는 외부 클래스의 인스턴스 멤버에 접근할 수 없음.
 * class LocalInner {}
  * 외부 클래스의 지역변수는 final이 부은 변수(상수)만 접근 가능.


==Ex4==

 public static void main(String args[]) {}
 * 인스턴스클래스의 인스턴스를 생성하려면 외부 클래스의 인스턴스를 먼저 생성해야 함.
 * 스태틱 내부 클래스의 인스턴스는 외부 클래스를 먼저 생성하지 않아도 됨.


==Ex5==

 내부 클래스 내의 메소드에서
    value, this.value, Outer.this.value.

 

ch10내부클래스.md

 

'CDG 3기 > JAVA의정석' 카테고리의 다른 글

ch9 lang패키지  (0) 2015.09.21
ch8 예외처리  (0) 2015.09.21
스터디 실습 문제 2  (0) 2015.09.21
스터디 실습 문제 1  (0) 2015.09.21
스터디 이론 문제  (0) 2015.09.21
Posted by 이선민이★
,

##Chapter9 java.lang패키지

###1. Object클래스

####1.1. equals메서드
매개변수로 객체의 참조변수를 받아 비교하여 결과를 boolean값으로 알려줌.

==equals메서드를 Value클래스에서 오버라이딩?==
 
    public boolean equals(Object obj) {
     if(obj!=null && obj instanceof Person) {
         boolean rt = id == ((Person)obj).id;
         return rt;
        } else {
         return false;
        }
    }
   

####1.2. hashCode메서드
값이 저장된 위치를 알려주는 해시코드(hashcode)를 반환.

 
    String a = "AAA";
    String b = "AAA";
    String c = new String("AAA");
   
* .hashCode()
 * 문자열로.
 * 스트링클래스가 문자열을 대상으로 해시코드를 만듬.

* System.identityHashCode(str1)
 * 주소값으로.
 * 클래스가 조작하지 않은 고유 해시코드.


####1.3. toString메서드
객체의 경우 인스턴스에 대한 정보(클래스이름@해시코드)
String클래스, Date클래스는 문자열 반환

####1.4. clone메서드
.clone()과 System.arraycopy는 동일.

<br>
###2~3 String클래스와 StringBuffer클래스

* 문자열간 결합이나 추출 등 문자열을 다루는 작업이 많이 필요한 경우에는 StringBuffer클래스 사용이 좋음.
* String인스턴스는 저장된 문자열 변경 불가.
* StringBuffer인스턴스는 저장된 문자열 변경 가능.

###2. String클래스

###3. StringBuffer클래스
delete, insert, setLength, reverse.

<br>
###4. Math클래스
 
    Q. 12.36을 소수 첫째자리까지 나타내주세요.
 

<br>
###5. Wrapper클래스
매개변수로 객체를 요구할 때, 기본형 값이 아닌 객체로 저장해야할 때, 객체간 비교가 필요할 때 등.

<br><br>

 

ch9lang패키지.md

 

'CDG 3기 > JAVA의정석' 카테고리의 다른 글

ch10 내부클래스  (0) 2015.09.21
ch8 예외처리  (0) 2015.09.21
스터디 실습 문제 2  (0) 2015.09.21
스터디 실습 문제 1  (0) 2015.09.21
스터디 이론 문제  (0) 2015.09.21
Posted by 이선민이★
,

##Chapter8 예외처리

###1. 예외처리(exception handling)

####1.1.  프로그램 오류

에러(error) - 프로그램 코드에 의해서 수습될 수 없는 심각한 오류.
예외(exception) - 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류.

####1.2. 예외처리의 정의와 목적

예외처리 - 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것.

####1.3. 예외처리구문 - try-catch
 
    try {
     //예외 발생 가능성 있는 문장.
    } catch (Exception1 e) {
     // Exception1 발생 시, 처리를 위한 문장.
    } catch (Exception2 e) {
     // Exception2 발생 시, 처리를 위한 문장.
    }
   

####1.5. 예외 발생시키기

1. 연산자 new를 이용해서 발생시키려는 예외 클래스의 객체를 만든다.
`Exception e = new Exception("고의로 발생");`

2. 키워드 thorw를 이용해서 예외를 발생시킨다.
`thorw e;`

####1.6. 예외 클래스의 계층구조

* RuntimeException
 * IndexOutOfBoundException : 배열의 범위를 벗어남.
 * NullPointerException : 값이 null인 참조변수의 멤버를 호출하려 함.
 * ClassCastException : 클래스간 형변환을 잘못함.
 * ArithmeticException : 정수를 0으로 나누려 함.

* Exception
 * FileNotFoundException : 존재하지 않는 파일의 이름을 입력.
 * ClassNotFoundException : 클래스의 이름을 잘못 적음.
 * DataFormatException : 입력한 데이터 형식이 잘못됨.


```mermaid
graph LR;
  Exception-->IOException;
  Exception-->ClassNotFoundException;
  Exception-->RuntimeException;
  RuntimeException-->ArithmeticException;
  RuntimeException-->ClassCastException;
  RuntimeException-->NullPointerException;
  RuntimeException-->IndexOutOfBoundsException;
```

####1.7. 예외의 발생과 catch블럭
예외가 발생했을 때 생성되는 예외클래스의 인스턴스에는 발생한 예외에 대한 정보가 담겨져 있으며, getMessage()와 printStackTrace()를 통해서 이 정보들을 얻을 수 있다.

printStackTrace() - 예외발생 당시의 호출스택(Call Stack)에 있었던 메서드의 정보와 예외 메시지를 화면에 출력한다.
getMessage() - 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있다.

####1.8. finally 블럭
 
    try {
     //예외 발생 가능성 있는 문장
    } catch (Exception1 e1) {
     //예외 처리 문장
    } finally {
     //예외 발생 여부에 관계없이 항상 수행되어야하는 문장
        //맨 마지막에 위치
    }
   

####1.11. 사용자정의 예외 만들기

 class MyException extends Exception {
 MyExceptino(String msg) { // 문자열을 매개변수로 받는 생성자
     super(msg);  //조상인 Exception 클래스의 생성자를 호출
        }
    }

 

ch8예외처리.md

 

'CDG 3기 > JAVA의정석' 카테고리의 다른 글

ch10 내부클래스  (0) 2015.09.21
ch9 lang패키지  (0) 2015.09.21
스터디 실습 문제 2  (0) 2015.09.21
스터디 실습 문제 1  (0) 2015.09.21
스터디 이론 문제  (0) 2015.09.21
Posted by 이선민이★
,