[Java] 자바 내부 클래스 4종류 (Inner Class)

2022. 7. 5. 01:45·Java/자바 이론

내부 클래스는 하나의 클래스 내부에 선언된 또 다른 클래스를 의미한다.

내부 클래스에서 외부 클래스(Outer Class) 멤버에 접근하기 위해 사용한다.

선언된 위치에 따라서 4가지 형태가 존재한다.

 

( 항상 외부 객체 생성 -> 내부 객체 생성 )


내부 클래스의 장점

1. 내부 클래스는 외부 클래스의 모든 멤버를 자유롭게 사용할 수 있다. 

= 코드가 간결해지고 편리하다.

 

2.  외부에 불필요한 클래스를 감추어서 코드의 복잡성을 줄일 수 있다. (캡슐화) 


내부 클래스의 종류

1. 멤버 이너 클래스 (member inner class)

클래스 내부에서 멤버 변수처럼 선언된 이너 클래스다.

인스턴스 멤버 클래스와 정적 멤버 클래스가 존재한다.

( 이너 클래스에서 필드나 메서드의 이름이 동일한 아우터 클래스 멤버를 참조하고 싶으면

아우터 클래스명.this.멤버 <처럼 사용할 수 있다. )

public class InnerExam {
	private int a;
	private int b;
	private static int c;
	
	public InnerExam() {
		a = 1;
		b = 2;
		c = 3;
	}
	
	//member inner class
	class AInner{ 
		public void disp() {
			System.out.println(a); // 원래 접근이 되면 안되지만, 
			System.out.println(b); // outer의 맴버를 자유롭게 사용가능
			System.out.println(c); // outer 객체 생성 후 inner 객체를 생성해야 한다.
		}						   // 단, static은 outer를 생성하지 않고 사용가능
	}
    
    	public static void main(String[] args) {
		// 1.outer 객체 생성 후
		// outer객체.inner객체 b = outer레퍼런스.new inner();
		InnerExam a = new InnerExam(); 
		InnerExam.AInner b = a.new AInner(); 
		b.disp();
		
		//한 줄로 작성하는 방법
		InnerExam.AInner c = new InnerExam().new AInner();

 

2. 정적 이너 클래스 (static inner class)

static 키워드를 가지고 있는 이너 클래스를 의미한다.

정적 메서드와 동일하게 아우터 클래스의 정적 멤버에만 접근할 수 있다. 

 

정적 이너 클래스도 정적 멤버이므로 객체 생성 없이 클래스명으로 바로 접근할 수 있다.

class A{
	static class B{
    }
}

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

 

3. 지역 이너 클래스 (local inner class)

외부 클래스에 메서드나 초기화 블록에 선언된 이너 클래스를 의미한다.

지역 변수처럼 해당 메서드 내부에서만 한정적으로 사용된다.

(지역 변수는 반드시 final로 선언한다. 생략 시 컴파일러가 삽입)

public class InnerExam {
	private int a;
	private int b;
	private static int c;
	
	public InnerExam() {
		a = 1;
		b = 2;
		c = 3;
	}
	
	//local inner class
	public void output() { 
		class LocalInner{
			public void disp() {
				System.out.println(a);
				System.out.println(b);
				System.out.println(c);
			}
		}
		LocalInner li = new LocalInner(); 
		li.disp();
	}
    
    		//local Inner class
         	   //main에서
		InnerExam d = new InnerExam();
		d.output();

 

4. 익명 이너 클래스(anonymous class)

익명 클래스는 이름이 존재하지 않는 이너 클래스다.

클래스의 선언과 동시에 객체를 생성한다. 단 하나의 객체만을 생성하는 일회용 클래스다.

따라서 생성자를 생성할 수 없다.

//anonymous inner class
new InnerExam() {
    public void disp() {
        System.out.println("익명 이너 클래스입니다.");
    }
}.disp();

 

이러한 익명 클래스는 매우 제한적인 용도에 사용되며, 구현해야 하는 메소드가 매우 적은 클래스를

구현할 때 사용된다.

 


 

Inner Class는 이벤트 핸들러와 안드로이드에서 자주 사용된다고 한다.

특히 1번과 4번의 형태를 가장 많이 사용한다고 한다.

 


참고 문헌 : Do it! 자바 완전정복

http://www.tcpschool.com/java/java_usingClass_innerClass

'Java > 자바 이론' 카테고리의 다른 글

[Java] 자바 컬렉션(Collection) 프레임워크란?  (0) 2022.07.06
[Java] 자바 쓰레드(Thread) & 동기화  (0) 2022.07.06
[Java] 자바 인터페이스(Interface)란?  (0) 2022.07.05
[Java] 추상 클래스와 추상 메서드 (abstract)  (0) 2022.07.04
[Java] 메서드 오버로딩과 오버라이딩  (1) 2022.06.30
'Java/자바 이론' 카테고리의 다른 글
  • [Java] 자바 컬렉션(Collection) 프레임워크란?
  • [Java] 자바 쓰레드(Thread) & 동기화
  • [Java] 자바 인터페이스(Interface)란?
  • [Java] 추상 클래스와 추상 메서드 (abstract)
현기
현기
  • 현기
    현기의 개발블로그
    현기
  • 전체
    오늘
    어제
    • 분류 전체보기 (120)
      • Front-End (39)
        • Next (5)
        • React (8)
        • React Native (11)
        • Flutter (0)
        • Vue (1)
        • JSP (9)
        • HTML, CSS, JS (5)
      • Back-End (16)
        • Node.js (3)
        • Spring (8)
        • Flask (1)
        • AWS (4)
      • DB (5)
        • Oracle (4)
        • MySQL (1)
      • Python (7)
      • Java (27)
        • 자바 이론 (17)
        • 코딩테스트 연습 & 실습 (10)
      • 자료구조 & 알고리즘 (7)
        • 코딩테스트 (6)
        • 알고리즘 (1)
      • 블록체인 (0)
      • 프롬프트 엔지니어링 (0)
      • CS 지식 (5)
      • IT뉴스 (0)
      • 일상 (3)
      • etc (11)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    IS-A
    상속
    node.js
    그리디
    큐
    쓰레드
    자바 스프링
    자바스크립트
    오블완
    REST API
    오라클
    react
    Java
    티스토리챌린지
    React Native Chart
    DI
    react-native-chart-kit
    Python
    서블릿
    파이썬
    Spring
    React Native
    JDBC
    리액트 네이티브
    포스트맨
    JSP
    스택
    Express
    자바
    next-intl
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
현기
[Java] 자바 내부 클래스 4종류 (Inner Class)
상단으로

티스토리툴바