2021. 04. 09(금) TIL

Dylan·2021년 4월 9일
0

Java

인터페이스 복습

중첩클래스(내부클래스)

  • 클래스내부에 정의된 클래스다.
  • 중첩클래스를 정의하는 이유
    • 클래스가 특정 클래스와 밀접한 관계를 맺고 있을 때, 클래스의 내부에 선언하는 것이 유리하다.
    • 외부 클래스의 구성요소들을 서로 쉽게 사용할 수 있다.
  • 내부클래스를 포함하고 있는 클래스를 컴파일하면 내부클래스의 갯수만큼 컴파일된 클래스파일이 추가로 생성된다.
    • 내부클래스의 컴파일된 클래스의 파일명 : 외부클래스명$내부클래스.class

중첩클래스의 종류

  • 멤버 내부 클래스
    • 외부클래스의 객체가 생성되면 사용할 수 있는 내부클래스
    • 외부클래스의 모든변수, 모든 메소드를 자유롭게 사용할 수 있다
      public class Outer {
        int x;
        int y;
        public void test1{} {
          수행문;
        }
        // 인스턴스 내부 클래스
        class Inner {
          int a;
          int b;
          public void test2() {
            수행문;
          }
        }      
      }
  • 정적 내부 클래스
    • 외부클래스의 객체 생성여부와 상관없이 사용할 수 있는 내부클래스
    • 외부클래스의 정적변수, 정적 메소드만 사용할 수 있다
      public class Outer {
        int x;
        int y;
        static int z;
        public void test1() {
          수행문
        }
        public static void test2() {
          수행문
        }
        // static 내부 클래스
        static class Inner {
          int a;
          int b;
          public void test3() {
            수행문
          }
        }
      }
  • 로컬 내부 클래스
    • 해당 메소드가 실행되는 동안만 사용할 수 있는 내부클래스
    • 외부클래스의 모든변수, 모든 메소드를 자유롭게 사용할 수 있다.
    • 로컬 내부클래스가 정의된 메소드의 지역변수, 매개변수 중에서 값이 변하는 것은 사용할 수 없다.
    • final 변수 혹은 final변수처럼 동작하는 변수만 사용할 수 있다
      public class Outer {
        int x;
        int y;
        public void test1() {
          수행문;
        }
        public void test2() {
          // 지역내부 클래스
          class Inner {
            int a;
            int b;
            public void test2() {
              수행문;
            }
          }
        }
      }

익명객체

  • 이름이 없는 객체다.
  • 주로 상위클래스를 상속받거나 인터페이스를 구현해서 즉석에서 객체를 생성하는 것이다.
  • 상위클래스나 인터페이스 없이 단독으로 객체를 생성할 수 없다.
  • 단 한번 사용되는 기능이 필요하다면 별도의 클래스 정의없이 익명객체로 생성하는 것이 유리하다.
    • 주로 GUI프로그램의 이벤트처리, 스레드 구현 등에 사용된다.
  • 적용예제
      //인터페이스
      public interface Pen {
        void draw();
      }
      //익명객체 
      Pen p = new Pen() {
        public void draw() {
          // 구현코드
        }
      };
      //인터페이스
      public inteface MouseListener {
        void mouseClicked(MouseEvent e);
        void mouseMoved(MouseEvent e);
      }
      //익명객체
      MouseListener listener = new MouseListener() {
        public void mouseClicked(MouseEvent e) {
          // 구현코드
        }
        public void mouseMoved(MouseEvent e) {
          // 구현코드
        }
      };

0개의 댓글