hyeonga_code

Java의 신_Chapter 16_Nested Class 본문

Java

Java의 신_Chapter 16_Nested Class

hyeonga 2024. 3. 29. 06:59
반응형

 

2024.03.28

 

- 중첩 클래스_Nested Class

-- 클래스 안에 클래스를 선언한 것

-- 코드를 간단하게 표현하기 위함

-- 자바 기반의 UI 처리 시 사용자의 입력에 사용

-- 외부의 이벤트에 대한 처리를 하는 곳에서 사용

 

-- 종류

---- Static Nested Class

---- 내부클래스_Inner Class

------ 로컬 내부 클래스_Local Inner Class

------ 익명 내부 클래스_Anonymous Inner Class

Nested Class
    ㄴStatic nested class
    ㄴInner class
        ㄴLocal inner class
        ㄴAnonymous inner class

 

-- Static Nested Class 가 필요한 이유

---- 한 곳에서만 사용되는 클래스를 논리적으로 묶어 처리할 필요가 있는 경우

 

-- Inner Class가 필요한 이유

---- 캡슐화가 필요한 경우(내부 구현을 감추고 싶은 경우)

 

-- Static Nested Class

더보기
package nestclass.inner;

public class OuterOfStatic {
    static class StaticNested {
    	private int value=0;
        
        public int getValue(){
        	return value;
        } //end getValue()
        
        public void setValue(int value) {
        	this.value = value;
        } //end setValue()
    } //end class(StaticNested)
} //end class(OuterOfStatic)

public class NestedSample {
    public static void main(String[] args) {
        NestedSample sample = new NestedSample();
        sample.makeObject();
    }
    
    public void makeObject(){
    	OuterOfStatic.StaticNested staticNested = new OuterOfStatic.StaticNested();
        staticNested.setValue(4);
        System.out.println(staticNested.getValue();	// 4
    }
}

---- OuterOfStaic 클래스를 컴파일하면 내부에 위치한 StaticNested 클래스도 함께 컴파일된다.

OuterOfStatic.class
OuterOfStatic$StaticNested.class

 

-- Inner Class

더보기
package nestclass.inner;

public class OuterOfInner {
    class Inner {
    	private int value=0;
 
        public int getValue(){
        	return value;
        } //end getValue()
        
        public void setValue(int value) {
        	this.value = value;
        } //end setValue()
        
    } //end class(Inner)
} //end class(OuterOfInner)

public class InnerSample {
    public static void main(String[] args) {
        InnerSample sample = new InnerSample();
        sample.makeObject();
    }
    
    public void makeObject(){
    	OuterOfInner outer = new OuterOfInner();
        OuterOfInner.Inner inner = outer.new Inner();
        
        inner.setValue(4);
        System.out.println(inner.getValue();	// 4
    }
}

---- Outer 객체를 생성한 후, outer 객체를 통해 Inner 객체를 생성해야 한다.

--- GUI_Graphic User Interface 관련 프로그램을 개발하는 경우 많이 사용한다.(리스너)

 

-- 익명 클래스

더보기
package nestclass.inner;

public class AnonymousButton {
    public AnonymousButton() {}
    
    private EventListener listener;
    
    public void setListener(EventListener listener) {
        this.listener = listener;
    } //end setListener()
    
    public void process(){
        if(listener != null)
            listener.onClick();
    } //end process()
    
} //end class(AnonymousButton)

public interface EventListener {
    public void onClick();
} //end interface(EventListener)

public class AnonymousSample {
    public static void main(String[] args) {
    	AnonymousSample sample = new AnonymousSample();
        sample.setButton();
    } //end main()

    public void setButton() {
    	AnonymousButton button = new AnonymousButton();
        button.setListener(
            new EventListener() {
                public void onClick(){
                	System.out.println("onclick button");
                } //end onClick()
            } //end EventListener()
        );
        btton.process();
    } //end setButton()
} //end class(AnonymousSample)

---- 호출 할 수 없으므로 재사용이 불가능하다.

 

-- Static Class 는 static으로 선언된 변수만 접근이 가능하다.

-- Inner Class 는 모든 변수에 접근이 가능하다.

 

반응형

'Java' 카테고리의 다른 글

Java의 신2_Chapter 2_ java.lang 패키지  (0) 2024.04.02
Java의 신_Chapter 17_Annotation  (0) 2024.03.29
Java의 신_Chapter 15_String  (0) 2024.03.29
Java의 신_Chapter 14_Exception  (0) 2024.03.28
Java의 신_Chapter 13_Interface, enum  (0) 2024.03.28