'중첩 클래스'에 해당되는 글 1건

  1. 2020.06.25 중첩 클래스

중첩 클래스

자바 2020. 6. 25. 23:08

중첩 클래스

- 클래스 내부에 클래스를 만들어서 사용하는 걸 의미한다

 

- 프로그래밍을 할때 여러 군데서 사용하는 클래스가 아니라면 파일을 새로 만들거나 코드의 아래 부분으로 내려서 만들지 않고 바로 만들어서 쓸 수 있도록 하는 개념이다

 

- 경우에 따라서는 객체를 생성할 수 있는 부분이 클래스를 설계한 부분으로 한정되어 있는 경우도 있다

 

- 클래스 내부에 만든 클래스를 Inner Class라고 부르며 Inner 클래스를 감싸고 있는 클래스를 Outer Class라고 부른다

 

일반 중첩 클래스

- 클래스 내부에 클래스를 만들어서 사용하는 경우이다

 

- Inner 클래스의 객체를 만들기 위해서는 반드시 Outer 클래스의 객체를 생성하고 이를 통해 Inner 클래스를 만들어야 한다

 

- Inner 클래스는 Outer 클래스의 멤버에 접근할 수 있지만 Outer 클래스는 Inner 클래스의 멤버에 접근 할 수 없다 Inner클래스의 멤버는 Outer 클래스의 객체가 생성되어 있다는 가정하에 사용하므로 접근이 가능하지만 Outer 클래스는 Inner 클래스의 객체의 생성과 관계가 없으므로 Inner 클래스에 대한 접근이 자유롭지 못하다

 

ReiterationClass1.java

--------------------------------------------------------------------------------------------------------------------------

Outer out = new Outer( );

Outer.Inner inner = out.new Inner( );

 

out.outerMethod( );

inner.innerMethod( );

 

class Outer {

    int outer1 = 10;

 

    void outerMethod( ) {

         System.out.println("Outer의 메서드");

         // System.out.println(Inner1);

    }

    // 중첩 클래스

    class Inner{

        int inner1 = 20;

 

        void innerMethod( ) {

             System.out.println("Inner의 메서드");

             System.out.println(outer1);

        }

    }

}

--------------------------------------------------------------------------------------------------------------------------

 

Console

--------------------------------------------------------------------------------------------------------------------------

Outer의 메서드

Inner의 메서드

10

--------------------------------------------------------------------------------------------------------------------------

 

Static 중첩 클래스

- 일반 중첩 클래스에서 Inner 클래스가 static으로 정의된 경우이다

 

- Inner 클래스가 static으로 정의되어 있어 Outer 클래스의 객체 생성 없이 바로 객체 생성이 가능하다

 

- Inner 클래스에서는 Outer 클래스에 정의된 멤버 중에 static 멤버만 접근이 가능하다 Outer 클래스의 객체 생성 없이 바로 Inner 클래스의 객체를 생성하므로 Outer 클래스의 객체가 생성되지 않았다는 가정 하여 개발을 해야 한다

 

ReiterationClass2.java

--------------------------------------------------------------------------------------------------------------------------

class Outer{

    int outer1 = 10;

    static int outer2 = 20;

 

    void outerMethod( ) {

         System.out.println("Outer의 메서드");

    }

 

    static class Inner {

         int inner1 = 20;

 

         void innerMethod( ) {

              System.out.println("Inner의 메서드");

              // System.out.println(outer1);

              System.out.println(outer2);

         }

     }

}

--------------------------------------------------------------------------------------------------------------------------

 

Console

--------------------------------------------------------------------------------------------------------------------------

Inner의 메서드

20

--------------------------------------------------------------------------------------------------------------------------

 

메서드 내부의 중첩 클래스

- 클래스를 메서드 내부에 만든 경우를 의미한다

 

- 메서드 내부에 만든 중첩 클래스는 다른 곳에서 참존 변수 조차 선언할 수 없다

 

- Inner 클래스에서는 클래스 내부에 선언한 변수만 사용할 수 있으며 클래스를 만든 메서드 내부에 있는 지역 변수 중 final 변수만 접근이 가능하다 그 외의 모든 변수는 접근이 불가능하다

 

ReiterationClass3.java

--------------------------------------------------------------------------------------------------------------------------

public class ReiterationClass3 {

 

     // Inner in;

     int a = 10;

     final int fa = 100;

 

     public static void main(String[ ] args) {

          // TODO Auto-generated method stub

          // int b = 20;

          final int fb = 200;

          class Inner {

 

              void innerMethod( ) {

                   // System.out.println(a);

                   // System.out.println(b);

                   System.out.println(fb);

                   // System.out.println(fa);

              }

           }

           Inner inner = new Inner( );

           inner.innerMethod( );

      }

}

--------------------------------------------------------------------------------------------------------------------------

 

Console

--------------------------------------------------------------------------------------------------------------------------

200

--------------------------------------------------------------------------------------------------------------------------

 

익명 중첩 클래스

- 클래스로부터 객체 생성을 할 때 클래스 내부 코드를 바로 작성하는 것을 의미한다

 

- 원본 클래스가 가지고 있는 메서드를 Overriding 해야 할 경우 상속받은 클래스를 만들지 않고 바로 Overriding을 할 수 있다

 

- 추상 클래스라는 것을 이용할 때 자주 사용하는 기법이다

 

ReterationClass4.java

--------------------------------------------------------------------------------------------------------------------------

Class200 c1 = new Class200( );

c1.disp( );

 

Class200 c2 = new Class200( ) {

    public void disp( ) {

         System.out.println("익명 중첩 클래스의 메서드");

    }

};

c2.disp( );

 

class Class200{

    public void disp( ) {

          System.out.println("원본 클래스의 disp 메서드");

    }

}

--------------------------------------------------------------------------------------------------------------------------

 

Console

--------------------------------------------------------------------------------------------------------------------------

원본 클래스의 disp 메서드

익명 중첩 클래스의 메서드

--------------------------------------------------------------------------------------------------------------------------

 

1. 중첩 클래스는 클래스를 만들 때 파일을 따로 만들거나 다른 쪽으로 이동해서 클래스를 만들고 다시 돌아와야 하는 불편함을 덜어 주기 위해 제공된다

'자바' 카테고리의 다른 글

인터페이스(interface)  (0) 2020.06.27
추상 클래스  (0) 2020.06.26
Final  (0) 2020.06.23
Static  (0) 2020.06.22
캡슐화(Encapsulation)  (0) 2020.06.22
Posted by khon98
,