<4대 중첩 클래스(내부 클래스)>


 


 


 


 


1. 4대 중첩 클래스의 종류 알아보기.

 

2. 4대 중첩 클래스별 사용법.


 


 

[출처] http://dkatlf900.tistory.com/49

 


 


내부 클래스(inner class) 라 하는 것에는 4종류가 있다. 구분하는 법은 변수의 선언위치에 따른 종류와 같다.내부 클래스의 유효범위 와 성질도 우리가 잘아는 변수 와 유사하여 금방 이해 될 것이다.


 


 


 


1.내부 클래스(inner class)라 불리는 4가지.


 


   내부 클래스 라는 것은 내가 만든 클래스(Class)블록 안에 또 다른 클래스(Class)를 만든


   다는 것이다. 이것들을 다 내부 클래스(inner class)라 하며 어느 위치에 만들 것이냐 에


   따라 4가지 종류로 나뉜다고 보면 된다.


 


 


공통규칙

1.내부 클래스 에서 외부 클래스의 변수들을 사용할수있다. (단, static변수 , 인스턴스 변수 의 규칙이 우선이다.)

 

2.내부 클래스에서는  접근 제어자 private, protected,public 들을 사용할수 있다. 내부클래스는 외부 클래스 에서 보기에 외부클래스의 멤버(변수,함수) 처럼 취급한다.


 


 


 


 


1) 중첩 클래스 또는 인스턴스 클래스(instance class) 


     instance class라 말하는 것 처럼 인스턴스 변수처럼 사용 된다.


 




class Test{ 

 int a=10;

class Joo{

int b=20;

public void joo(){

System.out.println("Joo 클래스가 InstanceClass 입니다.");

}

}

public static void main(String[] args){

Test t=new Test();

Test.Joo j=t.new Joo();

j.joo();

}

}



 


 Joo 클래스가 인스턴스 클래스 이며, 인스턴스 변수 위치에 있다.


  또한 인스턴스 클래스 안의 joo() 를 실행 하기 위해 인스턴스 클래스에 접근 하기 위해선,


  외부 클래스(Test)  객체를 먼저 생성후에 Test.Joo j=t.new Joo(); 라는 문법을 통해


  외부 클래스(Test) 안에 Joo 라는 인스턴스 내부 클래스가 있다 라고 해줘야 한다.


 


 


 


 



경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

2) 정적 중첩 클래스 또는 스태틱 클래스(static class)


     인스턴스 변수 규칙 대신 static 변수의 규칙을 사용 하는 내부 클래스라 생각하자.


 



class Test{     
   int a=10;

   static class Joo{        
       int b=20;
       static int c=30;
       public void joo(){               
             System.out.println("Joo 클래스가 static class 입니다.");
       }
   }

   public static void main(String[] args){
             Test.Joo j=new Test.Joo();
             j.joo();
             System.out.println("static 변수:"+ Test.Joo.c);
   }
} 


 


static 내부 클래스는 class 앞에 static이 붙고 static 변수와 규칙이 유사 하다 보면된다.


static 내부 클래스 의 객체를 생성할때 외부 클래스의 인스턴스를 Test t=new Test(); 생성하지 않아도 된다. 또한, static 내부 클래스의 객체 생성할때는  t.new Joo();가 아닌  new Test.Joo(); 로 할수있다.


 


 


 


 


3) 지역 중첩 클래스 또는 지역 클래스(local class)


     외부 클래스의 메서드나 초기화 블럭 안에 선언되며 지역 변수 규칙을 사용한다.


 



class Test{     
  
   void joo(){
      final int g=300;
		
      class LocalJoo{
         public void hoo(){
            System.out.println("LocalJoo 클래스는 지역 클래스 입니다.");
            System.out.println("g:"+ g);
            }
         }

       System.out.println("이것은 joo() 메서드입니다");
       LocalJoo lo= new LocalJoo();
       lo.hoo();
       }

   public static void main(String[] args){
             Test.Joo j=new Test.Joo();
             j.joo();
             System.out.println("static 변수:"+ Test.Joo.c);
   }
} 


 


지역변수 처럼 joo() 메서드 안에 선언되며 지역 클래스는 외부 클래스의 인스턴스 변수,static 변수 를 모두 사용할수 있고,지역 클래스가 포함된 메서드에 정의된 지역 변수도 사용 가능하다. 단 final 이 붙은 지역 변수만 사용 가능하다.


그 이유는 joo() 메서드가 수행을 끝내어 지역 변수가 소멸되었더라도 지역 클래스의 인스턴스가


소멸된 지역변수를 참조하려는 경우가 발생할수 있기때문이다.


 


 


 


 


4) 익명 중첩 클래스 또는 익명 클래스(anonymous class)


     익명 클래스는 지역 클래스의 변형이라고 할 수도 있다.익명클래스는 class라는 예약어와


     클래스명을 가지지 않고, 단지 instance의 생성과 내용부의 정의만 가진다.


     지역 클래스 처럼 소속되어있는 메서드의 멤버변수등을 사용하기 위해선 변수명 앞에


     final 이 붙어 있어야 한다.또한 기존 클래스의 특정 메소드를 오버라이딩 하여 재정의 할


     수 있다.


 



class AnonymousTest{
   public void abc(){
         System.out.println("Test2 클래스의 abc() 메서드 입니다.");
   }  
}

}
class Test{     
  
   void joo(){
       AnonymousTest at=new AnonymousTest(){
         public void abc(){
          System.out.println("AnonymousTest 클래스의 오버라이딩한 abc() 메서드");
         }
       };
    at.abc(); 
   }

   public static void main(String[] args){
             Test a=new Test();
             a.joo();
             System.out.println(" main() 메서드 입니다.");
   }
} 



 


 


익명 클래스는 문법적으로 생소한 부분이 많다.


AnonymousTest at=new AnonymousTest(){ //여기 메서드입력 }; 와 같이 객체 생성후에 { };  블록이 있고 블록 끝에는 " ; " 세미콜론이 붙는다. 익명 클래스는 일회용으로 코드를 짧게 쓰는등의 일을 하며 , 안드로이드 어플 만들기등에서 쓰이는 java 코드에서 이벤트 처리,쓰레드등을 할때 너무너무 자주 나올 정도로 중요한 것이 익명클래스이며 내부클래스 모두가 중요하다. new AnonymousTest(){ } 여기서 블록안에는 이미 존재하는 클래스의 메서드를 오버라이딩 하고싶을때 위에처럼 재정의 해주면 되며,


 


 


 


간단하게 안드로이드에서는 어떻게 쓰이는지 소스를 한번 보자.이벤트 처리 소스이다.


 



public class HandleEvent extends Activity{
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        View vm=new View(this);
        vm.setOnTouchListener(new View.OnTouchListener(){
             public boolean onTouch(View v,MotionEvent event){
                  if(event.getAction() == MotionEvent.ACTION_DOWN){
                     Toast.makeText(HandleEvent.this, "Touch Event Received",
                     Toast.LENGTH_SHORT).show();
                     return true; 
                  }
                  return false;    
             }
         });
         setContentView(vm);
     }
}     



 


 


이 소스는 이벤트 처리 관련 소스로 안드로이드에서는 흔히 쓰이게 되는 내부클래스 중 익명클래스 이다.vm.setOnTouchListener(new View.OnTouchListener(){//오버라이딩 } 이 부분은


메서드 호출할때 호출안에 익명클래스를 통째로 처리하여 소스코드를 줄인 방법이다.








본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
30 Java XML Parse, Java XML 파싱 샘플 졸리운_곰 2015.03.03 814
» Java Inner class 자바 중첩(내부)클래스 졸리운_곰 2015.03.03 886
28 IzPack으로 GUI 설치 프로그램 만들기 file 졸리운_곰 2015.02.15 638
27 [Java],[AWT],[Layout],[AWT Layout], file 졸리운_곰 2015.02.13 368
26 [Java],[AWT],[SWING], Java GUI file 졸리운_곰 2015.02.13 922
25 [Java][AWT 개요] file 졸리운_곰 2015.02.13 463
24 javac 로 컴파일 시 유니코드(utf-8) 한글 소스 코드 컴파일 문제 졸리운_곰 2015.02.02 1133
23 [스프링] 스프링 Java 어노테이션 file 졸리운_곰 2014.06.11 960
22 [스프링] 스프링 MVC 졸리운_곰 2014.06.11 532
21 [스프링] 어노테이션 졸리운_곰 2014.06.11 1032
20 인코딩 - 8859_1의 비밀(?) file 졸리운_곰 2014.05.06 581
19 [JNI] 안드로이드 JNI 환경에서 C++과 Java 간의 한글 데이터 전송 문제 졸리운_곰 2014.05.06 597
18 자바 암호화 복호화 file 졸리운_곰 2014.04.08 2495
17 파일 존재 여부 판단, 디렉토리 있는지 확인 함수; File Directory Exist 졸리운_곰 2014.03.03 1215
16 NetStat call and get result text in Java 졸리운_곰 2014.02.25 903
15 [Spring] @Autowired 와 Java Spring 졸리운_곰 2014.01.29 1332
14 Java Static 변수 졸리운_곰 2014.01.28 1102
13 Properties 클래스 사용하기. 졸리운_곰 2014.01.28 1024
12 Java => Thread 졸리운_곰 2014.01.28 834
11 [Spring] 내가 Spring을 사랑하는 다섯 가지 이유 file 가을의 곰을... 2013.12.22 970
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED