[Java]::Remind - Inner Class

Gentlee's Self-Study Log·2023년 5월 4일
0

Java Reminder

목록 보기
8/19
post-thumbnail

내부 클래스 - Inner Class

한 클래스 내에 멤버로서 변수, 메소드, 생성자와 같이 클래스도 정의될 수 있다. 내부 클래스를 갖고 있는 클래스는 외부 클래스로 불리고, 주로 외부클래스에서만 사용된다.

파일명 표시는 OuterClass.class 와 OuterClass$InnerClass.class 로 표시한다.

Example code

package JavaExample;

public class OuterClass {
	
	private InnerClass head = null;
	
	private class InnerClass{
		
		private String info;
		private InnerClass ic;
		
		private InnerClass(String info) {
			this.info=info;
		}
	}
}

Example(LinkedList)

package JavaExample;

public class MyLinkedList {
	
	private Node head = null;
	
	private class Node{
		
		private String data;
		private Node link;
		
		public Node(String data) {
			this.data = data;
		}
	}
	
	public void add(String data) {
		Node newNode= new Node(data);
		if(head == null) {
			head = newNode;
		}else {
			Node next = head; 
			while(next.link !=  null) {
				next = next.link;
			}
			next.link = newNode;
		}
	}
	
}

내부클래스의 종류

  • Instance Class
  • Static Class
  • Local Class
package JavaExample;

public class OuterClass {

	class InstanceClass{
		
	}
	
	static class StaticClass{
		
	}
	
	public void method1() {
		
		class LocalClass{
			
		}
	}
	
} 

Instance Class

Instance Class는 static 없이 선언된 내부 클래스이고, 외부 클래스를 생성한 후 내부클래스를 생성해야 사용할 수 있다.

Example

public class OuterClass {

	class InstanceClass{
		
		int a;
		
		void method2() {
			System.out.println("Instance Class : "+a);
		}
		
	}
}

선언문

public static void main(String args[]) {
		
		OuterClass outer=new OuterClass();
		OuterClass.InstanceClass instance=outer.new InstanceClass();
		instance.a=123;
		instance.method2();
		
	}

Static Class

Static Class는 static으로 선언된 내부 클래스이며 외부 클래스 생성없이
외부클래스명.내부클래스명.메서드()형태로 사용가능하다.

public class OuterClass {

	static class StaticClass{
		
		int b;
		static int c;
		
		void method3() {
			System.out.println("Static Class :" + b);
		}
		
		static void method4() {
			System.out.println("Static Class :" + c);			
		}
	}
}

선언

public static void main(String args[]) {
		
	OuterClass.StaticClass innerStatic = new OuterClass.StaticClass();
	innerStatic.b=456;
	innerStatic.method3();
		
	OuterClass.StaticClass.c=789;
	OuterClass.StaticClass.method4();
}

Local Class

Local Class는 메서드 안에서 선언된 클래스이며, 메서드 내부에서만 사용 가능하다.

package JavaExample;

public class OuterClass {

	public void method1() {
		
		class LocalClass{
			int d;
			
			void method5() {
				System.out.println("Locals Class : " + d);
			}
		}
		
		LocalClass inner =  new LocalClass();
		inner.d=123;
		inner.method5();
		
	}
}

익명 클래스

  • 익명클래스는 인스턴스를 한번만 생성하고 다시 사용할 일이 없는 경우에 사용한다.
  • 부모 이름으로 인스턴스를 생성하면서 동시에 클래스 바디를 선언한다.

Example Code

Messenger test = new Messenger() {
		
		public void setMessage(String msg) {
			System.out.println("test에서 메시지 설정"+msg);
		}
		
		public String getMessage() {
			return "test"; 
		}
	};
profile
https://github.com/SamGentlee

0개의 댓글