[Java] 내부 클래스(Inner Class)

2024. 4. 18. 14:52·Language/Java
목차
  1. 내부 클래스란?
  2. 내부클래스의 종류와 특징
  3. 인스턴스 클래스 (Instance Class)
  4. 스태틱 클래스 (Static Class)
  5. 지역 클래스 (Local Class)
  6. 익명 클래스(Anonymous Class)
  7. 내부 클래스의 선언
  8. 내부 클래스의 제어자와 접근성

 

 

 

들어가기 전에..

 

내부 클래스는 클래스 내에 선언된다는 점을 제외하고는 일반적인 클래스와 다르지 않다

내부 클래스는 사용 빈도가 높지 않으므로 내부 클래스의 기본 원리와 특징을 이해하는 정도까지만 학습해도 충분하다

 

내부 클래스란?

  • 클래스 내에 선언된 클래스
  • 클래스 안에 다른 클래스를 선언하는 이유는 두 클래스의 관계가 긴밀하기 때문
  • 내부 클래스를 선언하면 두 클래스의 멤버들 간에 서로 쉽게 접근 할 수 있고
  • 외부에는 불필요한 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있다(캡슐화)는 장점이 있다
class A {
    ...
    class B {
        //내부 클래스
    }
    ...
}

 

이 때, 내부 클래스인 B는 클래스 A를 제외하고는 다른 클래스에서 잘 사용되지 않는 것이어야 한다

 

 

내부클래스의 종류와 특징

인스턴스 클래스 (Instance Class)

외부 클래스의 멤버변수 선언 위치에 선언하며, 외부 클래스의 인스턴스 멤버처럼 다루어진다

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

스태틱 클래스 (Static Class)

외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 static 멤버처럼 다루어진다

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

지역 클래스 (Local Class)

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

익명 클래스(Anonymous Class)

클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스 (일회용)

 

 

내부 클래스의 선언

class Outer {
    int iv = 0;
    static int cv = 0;
    
    void myMethod() {
    	int lv = 0;
    }
}
class Outer {
    class InstanceInner {}
    static class StaticInner {}

    void myMethod() {
    	class LocalInner {}
    }
}

두 코드를 비교해보면 아래 코드는 외부 클래스에 3개의 서로 다른 종류의 내부 클래스를 언언했다

위 코드와 비교했을 때 내부 클래스의 선언위치가 변수의 선언위치와 동일함을 알 수 있다

 

내부 클래스가 선언된 위치에 따라 유효범위와 접근성이 다르다

 

 

내부 클래스의 제어자와 접근성

class Outer {
    int iv = 0;
    static int cv = 0;
    
    void myMethod() {
    	int lv = 0;
    }
}
class Outer {
    private class InstanceInner {}
    protected static class StaticInner {}

    void myMethod() {
    	class LocalInner {}
    }
}

 

다음 코드에서 인스턴스 클래스와 스태틱 클래스는 외부 클래스의 멤버변수와 같은 위치에 선언되며

멤버변수와 같은 성질을 갖는다

따라서 내부 클래스가 외부 클래스의 멤버와 같이 간주되고, 인스턴스 멤버와 static 멤버 간의 규칙이 내부 클래스에도 똑같이 적용된다

저작자표시 (새창열림)

'Language > Java' 카테고리의 다른 글

[Java] 인터페이스  (0) 2024.04.18
[Java] 객체지향 프로그래밍 - 다형성과 추상클래스  (0) 2024.04.08
[Java] 객체지향 프로그래밍 - 제어자  (0) 2024.04.05
[Java] 객체지향 프로그래밍 - package와 import  (0) 2024.04.05
[Java] 객체지향 프로그래밍 - 오버라이딩(overriding)  (0) 2024.04.05
  1. 내부 클래스란?
  2. 내부클래스의 종류와 특징
  3. 인스턴스 클래스 (Instance Class)
  4. 스태틱 클래스 (Static Class)
  5. 지역 클래스 (Local Class)
  6. 익명 클래스(Anonymous Class)
  7. 내부 클래스의 선언
  8. 내부 클래스의 제어자와 접근성
'Language/Java' 카테고리의 다른 글
  • [Java] 인터페이스
  • [Java] 객체지향 프로그래밍 - 다형성과 추상클래스
  • [Java] 객체지향 프로그래밍 - 제어자
  • [Java] 객체지향 프로그래밍 - package와 import
soyeon26
soyeon26
  • soyeon26
    개발 일지
    soyeon26
  • 전체
    오늘
    어제
    • 분류 전체보기 (107)
      • Web (22)
        • Web (1)
        • HTTP (0)
      • Language (29)
        • Java Script (3)
        • Type Srcipt (1)
        • Java (25)
      • Front (19)
        • HTML+CSS (4)
        • React (15)
      • Back (41)
        • Spring(Springboot) (9)
        • JSP (21)
        • Database (5)
        • NestJS (6)
      • Devops (6)
        • Docker (1)
        • Git & SVN (5)
      • App (7)
        • Android (7)
      • IT 정보 (3)
  • 블로그 메뉴

    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    java의 정석
    스프링부트
    SSR
    React
    Spring
    김영한
    프론트엔드
    과학기술인번호 조회
    백엔드
    자바스크립트set
    csr과ssr의 차이
    sql강의
    서블릿
    springboot
    SQL강의 추천
    강의후기
    과학기술인 번호 발급
    중복제거
    강의 후기
    React Next.js
    javascript
    과학기술인 등록번호 발급
    Next.js 필요성
    Next.js
    Java
    인프런
    과학기술인 등록
    데이터베이스 강의
    과학기술인등록번호 조회
    csrvsssr
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
soyeon26
[Java] 내부 클래스(Inner Class)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.