[JAVA] 내부 클래스

hi·2022년 2월 7일
0

: 클래스 내부에 선언한 클래스

선언하는 이유?
외부 클래스와 밀접한 관련이 있거나, 다른 클래스와 협력할 일이 없는 경우

장점
내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근 가능,
코드의 복잡성을 줄일 수 있음


class A {			// 외부 클래스

	class B {		// 내부 클래스
    
     
    }
}

1. 인스턴스 클래스

  • 외부 클래스의 멤버 변수 선언 위치에 선언
  • 외부 클래스의 인스턴스 멤버처럼 다루어짐
  • 외부 클래스의 인스턴스 멤버들과 관련된 작업에 사용될 목적으로 선언
  • static 멤버 선언 불가
  • 외부 클래스의 private 멤버 접근 가능

class A {
	class B {
    
    }
}

//외부 클래스 객체 생성 후 -> 내부 클래스 객체 생성
A.B b = a.new B();

2. 정적(static) 클래스

  • 외부 클래스의 멤버 변수 선언 위치에 선언
  • 외부 클래스의 static 멤버처럼 다루어짐
  • static 멤버 선언 가능

class A {
	static class C {
    
		void method1() {}
		static void method2() {}
    }
}

//외부 클래스 객체 생성하지 않고 -> 내부 클래스 객체 생성
A.C c = new A.C();

c.method1();
c.method2();	//경고
A.C.method2();	//권장, 클래스 명으로 호출

3. 지역(Local) 클래스

  • 외부 클래스의 메서드, 초기화 블럭 안에 선언
  • 메서드가 실행할 때만 사용 가능
  • 메서드 내에서만 객체를 생성, 사용
  • 접근 제한자 (public, private), static 붙일 수 없음

4. 익명 클래스

  • 클래스의 선언과 객체의 생성을 동시에 하는 이름 없는 클래스 (일회용)
  • 메서드 내부에 구현
  • 방법
    1. 인터페이스/추상 클래스 자료형으로 변수 선언 👉 익명 클래스를 생성해 대입
    2. 인터페이스 자료형으로 변수 선언 👉 인터페이스의 익명 클래스가 구현된 메서드 호출
    • 마지막에 세미콜론 사용

 class Local implements Readable {
 
 	@Override
 	public void read() {
    
     }
 
 }
 
👇 익명클래스로
 
 
//방법 1
 
 return new Readable() {

	@Override
	public void read() {
    
 	}
};
 
 
 
//방법 2

Readable read = new Readable() {

	@Override
	public void read() {
	
	}
};
return read;

0개의 댓글