Programming Language/Java

Java 7일차 곡뢀(쀑첩 클래슀, 쀑첩 μΈν„°νŽ˜μ΄μŠ€)

chaerlo127 2022. 2. 23. 15:15
728x90

1. 쀑첩 클래슀(nested class)

: 클래슀 내뢀에 μ„ μ–Έν•œ 클래슀

 μ„œλ‘œ μ‰½κ²Œ μ ‘κ·Όν•  수 있고, μ™ΈλΆ€μ—μ„œλŠ” λΆˆν•„μš”ν•œ 관계λ₯Ό 감좀으둜 μ½”λ“œμ˜ λ³΅μž‘μ„±μ„ 쀄일 수 μžˆλ‹€.

 

 # 멀버 클래슀

 1. μΈμŠ€ν„΄μŠ€ 멀버 클래슀

 static ν‚€μ›Œλ“œ 없이 쀑첩 μ„ μ–Έλœ 클래슀

 μΈμŠ€ν„΄μŠ€ ν•„λ“œμ™€ λ©”μ†Œλ“œ μ„ μ–Έλ§Œ κ°€λŠ₯ / 정적 ν•„λ“œμ™€ λ©”μ†Œλ“œλŠ” μ„ μ–Έ λΆˆκ°€λŠ₯

class A{
	class B{
    	}
}

 

A 클래슀 μ™ΈλΆ€μ—μ„œ B 객체λ₯Ό μƒμ„±ν•˜λ €λ©΄ A 객체λ₯Ό μƒμ„±ν•œ 후에 B 객체λ₯Ό 생성해야 ν•œλ‹€.

A 클래슀 λ‚΄λΆ€μ˜ μƒμ„±μžμ™€ μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œμ—μ„œλŠ” 일반 클래슀처럼 B 객체λ₯Ό 생성할 수 μžˆλ‹€.

A a = new A();
A.B b = a.new B();

ν•˜μ§€λ§Œ, 일반적으둜 A 클래슀 μ™ΈλΆ€μ—μ„œ B 객체λ₯Ό μƒμ„±ν•˜λŠ” 일은 거의 μ—†λ‹€.

 2. 정적 멀버 클래슀

: static ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ 클래슀

 μ •μ  멀버 ν΄λž˜μŠ€λŠ” λͺ¨λ“  μ’…λ₯˜μ˜ ν•„λ“œμ™€ λ©”μ†Œλ“œ μ„ μ–Έ κ°€λŠ₯

class A{
	static class B{
    	}
}

A 클래슀 μ™ΈλΆ€μ—μ„œ 정적 멀버 클래슀 C의 객체λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•΄μ„œλŠ” A 객체λ₯Ό 생성할 ν•„μš”κ°€ μ—†μŒ

A.B b = new A.B();

 

 # 둜컬 클래슀

: λ©”μ†Œλ“œ λ‚΄μ—μ„œ 클래슀 μ„ μ–Έ

 μ ‘κ·Ό μ œν•œμž (public, private) 및 static(정적 ν•„λ“œ, 정적 λ©”μ†Œλ“œ)을 뢙일 수 μ—†λ‹€.

void method(){
	class A{
    	A(){}
        int abc;
        // static int def;
        void methodA(){}
        //static void methodB();
    }
    
    A a = new A();
    a.abc = 1;
    a.methodA();
}

 

-> 주둜 Tread 객체λ₯Ό λ§Œλ“€λ•Œ μ‚¬μš©ν•œλ‹€.

 

2. 쀑첩 클래슀 μ ‘κ·Ό μ œν•œ

# λ°”κΉ₯ ν•„λ“œμ—μ„œ 쀑첩 클래슀 μ‚¬μš©μ‹œ μ ‘κ·Ό μ œν•œ

: μœ„μ—μ„œ λ§ν–ˆλ“―μ΄ instance classλŠ” static μ—μ„œ μ‚¬μš©μ΄ λΆˆκ°€λŠ₯ν•˜λ‹€.

	// instance field
	A a = new A();
	B b = new B();
	
	//method
	void methodA() {
		A ab = new A();
		B bc = new B();
	}
	
	
	// static field
//	static A staticA = new A(); -> μΈμŠ€ν„΄μŠ€μ΄λ―€λ‘œ static λΆˆκ°€λŠ₯
	static B staticB = new B();
	
	
	//static method
	static void methodB() {
//		A aa = new A();
		B bb = new B();
	}
	
	// nested class
	class A{}
	
	//static nested class
	static class B{}

 

# 멀버 ν΄λž˜μŠ€μ—μ„œ μ‚¬μš©μ œν•œ

: μ™ΈλΆ€ ν΄λž˜μŠ€μ—μ„œ ν•„λ“œλ‚˜ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•  λ•Œ

μΈμŠ€ν„΄μŠ€ 쀑첩 ν΄λž˜μŠ€μ—μ„œλŠ” μ •μ , μΈμŠ€ν„΄μŠ€ ν•„λ“œμ™€ λ©”μ†Œλ“œ λ‘˜ λ‹€ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜μ§€λ§Œ,

정적 쀑첩 ν΄λž˜μŠ€μ—μ„œλŠ” 정적 ν•„λ“œ λ©”μ†Œλ“œλ§Œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€.

 

즉, 정적 쀑첩 ν΄λž˜μŠ€μ—μ„œ 정적, μΈμŠ€ν„΄μŠ€ ν•„λ“œμ™€ λ©”μ†Œλ“œλ₯Ό μ„ μ–Έν•˜λŠ” 것은 κ°€λŠ₯ν•˜μ§€λ§Œ μ™ΈλΆ€ ν΄λž˜μŠ€μ—μ„œ ν•„λ“œμ™€ λ©”μ†Œλ“œλ₯Ό κ°€μ Έμ˜¬ λ•ŒλŠ” 정적 ν•„λ“œ, λ©”μ†Œλ“œλ§Œ κ°€λŠ₯ν•œ 것이닀. 

	int field1;
	void method1() {};
	
	static int field2;
	static void method2() {};
	
	class instanceClass{
		void method() {
			field1= 2;
			method1();
			field2 = 2;
			method2();
		}
	}
	
	static class staticClass{
		
		// λ‚΄λΆ€ 선언은 μΈμŠ€ν„΄μŠ€, 정적 λͺ¨λ‘ κ°€λŠ₯(ν•„λ“œ, λ©”μ†Œλ“œ)
		int fieldInstance;
		static int fieldStatic;
		
		
		void method() {
			// μΈμŠ€ν„΄μŠ€ ν•„λ“œ λ©”μ†Œλ“œλŠ” μ ‘κ·Ό λΆˆκ°€
//			field1 = 2;
//			method1();
			
			field2 = 2;
			method2();
		}
	}

 

# 쀑첩 ν΄λž˜μŠ€μ—μ„œ μ™ΈλΆ€ 클래슀 μ°Έμ‘° μ–»κΈ°

class outClass{
	String a = "a";
	void method() {
		System.out.println("a class method1");
	}
	
	class NestedClass{
		String a = "a nested class";
		
		void method() {
			System.out.println("a nested class method1");
		}
		
		void print() {
			System.out.println(outClass.this.a);
			outClass.this.method();
			
			System.out.println(this.a);
			this.method();
		}
	}
}

 

 

3. 쀑첩 μΈν„°νŽ˜μ΄μŠ€

: μΈμŠ€ν„΄μŠ€ 멀버 μΈν„°νŽ˜μ΄μŠ€, 정적 멀버 μΈν„°νŽ˜μ΄μŠ€ λͺ¨λ‘ κ°€λŠ₯ν•˜λ‹€.

 

 μΈμŠ€ν„΄μŠ€ 멀버 μΈν„°νŽ˜μ΄μŠ€ : λ°”κΉ₯ 클래슀 객체가 μžˆμ–΄μ•Ό 접근이 κ°€λŠ₯

 μ •μ  멀버 μΈν„°νŽ˜μ΄μŠ€: λ°”κΉ₯ 클래슀 객체 없이 접근이 κ°€λŠ₯

 

쀑첩 μΈν„°νŽ˜μ΄μŠ€λŠ” 주둜 정적 멀버 μΈν„°νŽ˜μ΄μŠ€κ°€ 많이 μ‚¬μš©λœλ‹€. μ΄λŠ” UI ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 이벀트 처리λͺ©μ μœΌλ‘œ μ‚¬μš©λ˜λŠ” κ²½μš°κ°€ λŒ€λΆ€λΆ„μ΄λ‹€.

 

public class Button {
	
	Click click;
	
	void setClick(Click click) { 
    // Click click = new Call(); μžλ™ νƒ€μž… λ³€ν™˜μ΄ λ˜λ„λ‘ ν•œλ‹€.
		this.click = click;
	}
	
	void touch() {
		click.onClick();
	}
	static interface Click{
		void onClick();
	}
}

//-----------------------------------------------------------------

public class Call implements Button.Click{

	@Override
	public void onClick() {
		System.out.println("μ•„μ•„");
		
	}

}

//-------------------------------------------------------------------

	public static void main(String[] args) {
		Button button = new Button();
		
		button.setClick(new Call()); // Click click = new Call(); 
		button.touch();
	}

[좜처] p. 407~ p. 421

728x90