ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 클래스 03: 내부 클래스와 익명 클래스
    컴퓨터/Java 2019. 9. 4. 08:55

    출처 : 자바 프로그래밍 입문 강좌(인프런)

     

    - 내부 클래스

    클래스 안에 또다른 클래스를 선언하는 것

    두 클래스의 멤버에 쉽게 접근할 수 있다.

    코드가 장황해지기 때문에 자주 사용하지 않는다.

    package lec11Pjt001;
    
    public class OuterClass {
    	int num = 10;
    	String str1 = "java";
    	static String str11 = "world";
        
        // 생성자
    	public OuterClass() {
    		System.out.println("OuterClass constructor");
    	}
        
        //  내부클래스1	
    	class InnerClass() {
    		int num = 100;
    		String str2 = str1;
    		
    		public InnerClass() {
    			System.out.println("InnerClass constructor");
    		}
    		
    	}
    	
        // 내부 클래스2
    	// class도 static을 주면 다른 곳에서 접근 가능
    	static class SInnerClass {
    		int num = 1000;
    		String str3 = str11;
    		
    		public SInnerClass() {
    			System.out.println("static InnerClass constructor");
    		}
    	}
    }
    
    package lec11Pjt001;
    
    import com.java.employeeBank.EmployeeBank;
    
    public class MainClass {
    	public static void main(String[] args) {
    		
    		OuterClass oc = new OuterClass();
    		System.out.println("oc.num : " + oc.num);
    		System.out.println("oc.str1 : "+ oc.str1);
    		
    		System.out.println();
    		
    		// 멤버 inner 클래스
    		OuterClass.InnerClass in = oc.new InnerClass();
    		System.out.println("in.num : " + in.num);
    		System.out.println("in.str2 : " + in.str2);
    		
    		System.out.println();
    		
    		// static inner 클래스
    		OuterClass.SInnerClass si = new OuterClass.SInnerClass();
    		System.out.println("si.num : " + si.num);
    		System.out.println("si.str3 : " + si.str3);
    		
    		System.out.println();
    	}
    }
    

    객체 안에 또다른 객체가 있다는 것, 로직이 꼬일 수 있어서 최근 잘 사용하지 않는다.

     

    - 익명클래스

    이름이 없는 클래스, 주로 메서드를 재정의하는 목적으로 사용된다.

    AnonymousClass.java

    package lec11Pjt001;
    
    public class AnonymousClass {
    	public AnonymousClass() {
    		System.out.println("AnonymousClass constructor");
    	}
    	
    	public void method() {
    		System.out.println("-- AnonymousClass's method START --");
    	}
    }

    MainClass.java

    package lec11Pjt001;
    
    import com.java.employeeBank.EmployeeBank;
    
    public class MainClass {
    	public static void main(String[] args) {
    		
    		// 이름없는 객체를 생성하고 override -> 호출
    		new AnonymousClass() {
    			
    			@Override
    			public void method() {
    				System.out.println(" -- AnonymousClass's Override method START --");
    			};
    		}.method(); // 재정의한 메서드 바로 호출
    		// 이름이 없기 때문에 여기서 끝내면 만들어 놓고도 사용할 수 없다.
    	}
    }
    

    익명클래스는 인터페이스나 추상클래스에서 주로 이용된다.

     

    '컴퓨터 > Java' 카테고리의 다른 글

    클래스 05: 추상클래스  (0) 2019.09.04
    클래스 04: 인터페이스  (0) 2019.09.04
    상속  (0) 2019.09.03
    데이터 은닉  (0) 2019.09.03
    패키지와 static  (0) 2019.09.03

    댓글

Designed by Tistory.