내부 클래스(inner class)

2021. 12. 10. 18:02·자바/기본적인 개념

1. 내부 클래스란?

- 클래스 내에 선언된 클래스를 말한다.

- 선언하는 이유는 두 클래스 사이에 서로 긴밀한 관계에 있기 때문이다.

 

- 그러나, 내부 클래스는 주로 AWT 또는 Swing과 같은 GUI 어플리케이션의 이벤트 처리 외에는

잘 사용되지 않는다.

 

 

 

2. 내부 클래스의 장점

- 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다.

- 코드의 복잡성을 줄일 수 있다.(캡슐화)

 

 

 

3. 내부 클래스의 종류와 특징

- 변수 선언하는 것과 같은 위치에 선언할 수 있으며, 총 4가지가 있다.

 

(1) 인스턴스 클래스

: 외부 클래스의 인스턴스 멤버들과 관련된 작업에 사용될 목적으로 선언된다.

 

(2) 스태틱 클래스

: 외부 클래스의 static 멤버, 특히 static 메서드에서 사용될 목적으로 선언된다.

: 그렇기 때문에, static 변수는 static 클래스가 아닌 곳에 사용되면 컴파일 에러가 나온다.

 

: 주의) final static은 상수 선언이므로 어느 곳이든 가능하다.

 

(3) 지역 클래스

: 외부 클래스의 메서드나 초기화 블럭 안에 선언하며, 선언된 영역 내부에서만 사용될 수 있다.

 

(4) 익명 클래스

: 클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스이며, 일회용이다.

 

 

 

4.  이해를 돕기 위한 예제(1)

 

           

 

 

 

 

 

 

 

      <위 코드와 비교해보자.>

 

 

( 또한 private, protected, abstract, final과 같은 접근 제어자도 가능하다. )

 

 

 

5. 이해를 돕기 위한 예제(2)

 

( static 클래스에서도 똑같이 같은 개념으로 인스턴스 멤버를 호출 할 수 없다. )

( 호출하고 싶다면, 외부 클래스의 객체 생성해야 한다. 20~21줄 참고 )

 

(그러나, 인스턴스 클래스에서는 외부 클래스 없이 모두 직접 호출 할 수 있다.)

 

 

 

 

6. 이해를 돕기 위한 예제(3)

: static 클래스의 멤버 접근의 관계와 지역 클래스의 변수 접근에 관한 설명한 예제이다.

 

( 외부 클래스의 멤버와 내부 클래스의 멤버들간의 접근 범위를 확인해본 예제이다.)

 

( 27번째 줄에 final을 붙인 이유는 지역 클래스 D 인스턴스가 소멸될 method()의 지역변수를

참조할 수 있기 때문에, 값을 변하지 못하게 하는 것이다. )

 

( JDK 1.8 이후 부터는 지역변수에 final을 안 붙여도 컴파일이 자동으로 붙여주지만, 만약 지역변수의

값을 변경시키는 문장이 나온다면, 컴파일 에러가 발생할 것이다. )

 

 

 

 

7. 이해를 돕기 위한 예제(4)

: 외부 클래스와 내부 클래스의 관계를 설명한 예제이다.

 

( 16~17번째 줄과 20번째 줄에서 각각 어떻게 객체를 생성하는지 확인하자. )

 

 

 

 

8. 이해를 돕기 위한 예제(5)

: 외부 클래스와 내부 클래스, 지역 클래스 간의 멤버 관계를 설명한 예제이다.

 

 

'자바 > 기본적인 개념' 카테고리의 다른 글

예외처리(1)  (0) 2021.12.16
익명 클래스(anonymous class)  (0) 2021.12.16
인터페이스의 default & static 메서드  (0) 2021.12.09
인터페이스 다형성  (0) 2021.12.08
인터페이스  (0) 2021.12.08
'자바/기본적인 개념' 카테고리의 다른 글
  • 예외처리(1)
  • 익명 클래스(anonymous class)
  • 인터페이스의 default & static 메서드
  • 인터페이스 다형성
백_곰
백_곰
  • 백_곰
    친절한 코딩
    백_곰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘 (with JAVA)
        • 기본 알고리즘
        • 완전 탐색
        • 분할 정복 알고리즘
        • 동적 계획법
        • 탐욕법
        • 코딩 테스트 기출 문제
        • 코드트리 조별과제
      • 백준 (with JAVA)
        • 완전 탐색
        • 분할 정복
        • 그 외
      • 자바
        • 개발 환경 구축하기
        • 팁
        • 기본적인 개념
        • 컬렉션 프레임워크
        • 프로세스와 쓰레드
        • 지네릭스
        • 람다식
        • 스트림
        • 입출력 IO
        • 네트워킹
        • 열거형(enums)
        • java.lang 패키지
        • java.time 패키지
        • 유용한 클래스들
        • 형식화 클래스들
      • 안드로이드 with 자바
        • 응용 문제들
        • 자잘한 문제들
        • 오류 보고서
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      소켓 프로그래밍
      문자 기반 스트림
      serializable
      중간연산
      람다식
      안드로이드 스튜디오
      불안정 정렬
      ServerSocket
      snail
      다형성
      코딩테스트
      선택 정렬
      InputStream
      outputstream
      유용한 클래스
      코드트리
      java.lang패키지
      역직렬화
      file
      안정 정렬
      제자리 정렬
      Arrays
      알고스팟
      스트림
      Collections Framework
      TCP 소켓 프로그래밍
      map()
      코딩트리조별과제
      자바 개념
      java.time 패키지
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    내부 클래스(inner class)
    상단으로

    티스토리툴바