Skip to the content.

- 학습 목표 달성 확인 목록

- [] 인터페이스 문법을 사용하여 객체 사용 규칙을 정의할 수 있는가?

interface 클래스명

으로 선언이 되며 기본적으로 public static final이 삽입되어 있어서 따로 선언하지 않아도 된다

인터페이스 클래스의 필드는 무조건 final이기때문에 값을 수정할수 없다.

그리고 static이기때문에 클래스명.변수명 으로 데이터를 가져올수 있다.

- [] GRASP의 Creator 패턴의 원리를 이해하는가?

Creator패턴에서 요점은 factory pattern인데

객체를 생성하기 위한 인터페이스를 정의하고 인스턴스 생성은 서브클래스가 결정하게 한다.

객체 생성을 캡슐화하는 패턴이다.

Creator의 서브클래스에 팩토리 메소드를 정의하여 팩토리 메소드 호출로 적절한 ConcreteProduct인스턴스를 반환하게 된다.

구현방법으로 크게 두가지로 나눠지는데

-Creator를 추상 클래스로 정의하고 팩토리 메소드는 abstract로 선언하는 방법

-Creator가 구체 클래스이고 팩토리 메소드의 기본 구현을 제공하는 방법

- [] 패키지 멤버 클래스를 중첩 클래스로 전환하여 다룰 수 있는가?

- [] 스태틱 중첩 클래스와 논스태틱 중첩 클래스의 차이점을 아는가?

public class non {
    int nonN;

    public static class X {
        static int Xa;
    }

    public class Y {
        int Ya;
    }

    public static void main(String[] args) {
        X.Xa = 10;
//         Y.Ya = 20;//인스턴스화를 하여 해당 변수에 접근할 수 있다.
        non n = new non();//먼저 바깥클래스를 인스턴스화 한다.
        n.nonN = 20;//바깥클래스의 인스턴스변수 nonN에 리터럴을 넣는다.
        non.Y nY = n.new Y();//바깥클래스.안쪽클래스 객체명 = 바깥클래스객체명.new 안쪽클래스 의 양식으로 인스턴스화 한다.
        nY.Ya = 30;
    }
}

- [] 로컬 클래스에서 로컬 변수에 접근하는 방법을 아는가?

public class local {
    int a;

    void capsule() {

        class innerLocal {

            void innerPrint(int capsuleA) {
                System.out.printf("inner클래스의 innerPrint메서드가 동작하여 %d 를 출력합니다.",capsuleA);
            }
        }
        innerLocal il = new innerLocal();

        il.innerPrint(100);
    }

    public static void main(String[] args) {
        local l = new local();
        l.capsule();
    }
}

- [] 익명 클래스를 정의할 수 있는가?

클래스의 이름이 없는 경우로 상속받은 추상클래스 또는 인터페이스를 바로 객체로 생성해서 반환한다.

new 부모 추상클래스or인터페이스명{
...
}
public Iterator iterator() throws CloneNotSupportedException {
    return new Iterator() {//객체를 생성해서 바로 return한다.
      int cursor = 0;

      public boolean hasNext() {
        return cursor < List.this.size;
      }

      public Object next() {
        return List.this.get(cursor++);
      }
    };
  }