Java에서 내부 클래스란 무엇입니까?

게시 됨: 2022-04-29

Java에서 내부 클래스의 개념은 Java 프로그래밍의 기본입니다. Java에서 중첩 클래스와 내부 클래스는 클래스 설계에 대한 매우 유사하지만 약간 다른 두 가지 개념이며 종종 함께 사용됩니다.

중첩 클래스는 다른 클래스 내에 정의되며 정적 중첩 클래스와 비정적 중첩 클래스의 두 가지 유형이 있습니다. 반면에 내부 클래스는 정적이 아닌 중첩 클래스의 한 유형이며 멤버 내부 클래스, 익명 내부 클래스 및 로컬 내부 클래스의 세 가지 유형이 있습니다.

그렇다면 이 세 가지 유형의 내부 클래스는 무엇을 의미하며 그 용도는 무엇입니까? Java 내부 클래스에 대한 이 자세한 가이드를 읽으십시오.

목차

Java에서 내부 클래스의 의미

비정적 중첩 클래스 또는 내부 클래스는 다른 클래스 내에 정의되어 있으며 외부 클래스(외부 클래스)의 멤버에 액세스할 수 있습니다. 반대로 정적 중첩 클래스는 다른 클래스 내에 정의된 클래스이기도 하지만 비정적 중첩 클래스와 달리 외부 클래스의 멤버 변수에 액세스할 수 없습니다. 비정적 중첩 클래스의 경우 외부 클래스의 인스턴스를 만들 필요가 없습니다. 그러나 내부 클래스의 경우 먼저 외부 클래스를 인스턴스화해야 내부 클래스를 인스턴스화할 수 있습니다.

원천

Java의 내부 클래스 유형

Java에서 내부 클래스는 다음 세 가지 유형입니다.

  • 멤버 내부 클래스
  • 익명의 내부 클래스
  • 로컬 내부 클래스

이제 예제를 통해 내부 클래스의 각 유형을 이해합시다.

1. 멤버 이너 클래스

Java의 멤버 내부 클래스는 클래스 내부에 있지만 메서드 외부에 생성된 비정적 중첩 클래스입니다. 일반 내부 클래스라고도 하는 멤버 내부 클래스는 private, public, default 및 protected와 같은 액세스 한정자를 사용하여 선언할 수 있습니다.

멤버 내부 클래스의 구문은 다음과 같습니다.

클래스 아우터{

//암호

클래스 내부{

//암호

}

}

Java 예제의 멤버 내부 클래스:

다음은 내부 클래스를 만들고 액세스하는 방법을 보여 주는 프로그램입니다. 내부 클래스를 비공개로 만들고 display_Inner() 메서드를 사용하여 클래스에 액세스합니다.

클래스 DemoOuter {

정수 번호;

// 내부 클래스

개인 클래스 DemoInner {

공개 무효 인쇄() {

System.out.println("내부 클래스입니다.");

}

}

// 내부 메소드에서 내부 클래스에 액세스

무효 display_Inner() {

DemoInner 내부 = new DemoInner();

inner.print();

}

}

공개 클래스 MyClass {

공개 정적 무효 메인(문자열 인수[]) {

// 외부 클래스 인스턴스화

DemoOuter 외부 = new DemoOuter();

// display_Inner() 메서드에 액세스

외부.디스플레이_내부();

}

}

출력: 이것은 내부 클래스입니다.

위의 예에서 OuterDemo는 외부 클래스이고 InnerDemo는 내부 클래스이며 기본 메서드에서 호출되는 display_Inner() 메서드 내부에서 내부 클래스를 인스턴스화하고 있습니다.

인기 있는 소프트웨어 엔지니어링 과정 살펴보기

에스엘. 아니 소프트웨어 개발 프로그램
1 LJMU 및 IIITB의 컴퓨터 과학 석사 Caltech CTME 사이버 보안 인증 프로그램
2 전체 스택 개발 부트캠프 블록체인 PG 프로그램
소프트웨어 개발의 이그 제 큐 티브 포스트 대학원 프로그램 - DevOps 전문화 모든 소프트웨어 엔지니어링 코스 보기

2. 익명의 내부 클래스

Java의 익명 내부 클래스는 클래스 이름 없이 선언되고 단일 객체만 생성되는 내부 클래스입니다. Java의 익명 내부 클래스는 동시에 선언되고 인스턴스화됩니다. 클래스 또는 인터페이스의 메서드를 재정의할 때 가장 유용합니다.

Java의 익명 내부 클래스 구문은 다음과 같습니다.

AnonymousInner an_inner = 새로운 AnonymousInner() {

공개 무효 my_method() {

//암호

}

};

Java의 익명 내부 클래스는 두 가지 방법으로 만들 수 있습니다.

  1. 클래스 사용
  2. 인터페이스 사용

Java 예제의 익명 내부 클래스(클래스 사용):

추상 클래스 식사{

추상 무효 먹다();

}

클래스 TestAnonymousInner{

공개 정적 무효 메인(문자열 인수[]){

식사 m=새로운 식사(){

void 먹다(){System.out.println("맛있어요!");}

};

고기();

}

}

출력: 맛있게 드세요!

Java 예제의 익명 내부 클래스(인터페이스 사용):

인터페이스 게임{

무효 플레이();

}

클래스 TestAnnonymousInner1{

공개 정적 무효 메인(문자열 인수[]){

게임 g=새로운 게임(){

public void play(){System.out.println("야외 게임");}

};

g.play();

}

}

출력: 야외 게임

3. 로컬 이너 클래스

Java의 로컬 내부 클래스는 메소드 내부에서 생성된 클래스입니다. 지역 변수의 경우와 마찬가지로 지역 내부 클래스의 범위는 메서드 내에서 계속 제한됩니다.

로컬 내부 클래스는 블록 내부에 정의됩니다: 메서드 본문, if 절 또는 for 루프. 로컬 내부 클래스는 둘러싸는 클래스의 구성원이 아니라 대신 정의된 블록에 속합니다. 따라서 Java의 로컬 내부 클래스에는 연관된 액세스 수정자가 없을지라도 추상 또는 최종으로 표시할 수 있습니다. 로컬 내부 클래스의 메소드를 호출하려면 메소드 내부의 클래스를 인스턴스화해야 합니다.

Java 예제의 로컬 내부 클래스:

다음은 외부 클래스의 메서드 내부에 선언된 로컬 내부 클래스의 개체를 인스턴스화하는 방법을 보여주는 예제 프로그램입니다.

패키지 내부 클래스;

공개 클래스 Outer_Class

{

// Outer_Class 클래스의 인스턴스 메소드.

공개 무효 표시()

{

// 메소드 로컬 내부 클래스의 선언.

클래스 내부_클래스

{

공개 무효 메시지(){

System.out.println("로컬 내부 클래스입니다!");

}

}

// 메서드 로컬 내부 클래스의 인스턴스를 만들고 객체 참조 변수 i를 사용하여 msg() 메서드를 호출합니다.

Inner_Class i = 새로운 Inner_Class();

i.msg();

}

공개 정적 무효 메인(String[] 인수)

{

// 외부 클래스 Outer_Class의 객체를 생성합니다.

Outer_Class o = 새로운 Outer_Class();

o.디스플레이();

}

}

출력: 이것은 로컬 내부 클래스입니다!

Java 내부 클래스의 기본 사항을 염두에 두고 처음에 Java 내부 클래스가 필요한 이유를 이해합시다.

자바 내부 클래스의 장점

Java의 내부 클래스는 테이블에 세 가지 중요한 유틸리티를 제공합니다. 다음과 같습니다.

1. 자바 내부 클래스는 private을 포함하여 외부/메인 클래스의 데이터 멤버와 메소드에 접근할 수 있으므로 특정 유형의 관계를 나타냅니다.

2. Java 내부 클래스는 작성이 덜 필요하기 때문에 코딩을 크게 줄입니다.

3. Java의 내부 클래스는 논리적으로 클래스와 인터페이스를 한 곳에 그룹화하여 코드의 가독성을 높이고 유지 관리를 더 쉽게 만듭니다.

합산

중첩 클래스의 개념은 Java 프로그래밍의 모든 위치에서 클래스를 생성하는 데 유연성을 추가하고 단순화합니다. 이와 관련하여 내부 클래스로 알려진 비정적 중첩 클래스는 지금까지 논의에서 이미 보았듯이 특히 유용합니다.

내부 클래스를 사용하는 것이 가장 적절해 보이는 두 가지 사례를 언급하면서 마무리하겠습니다. 첫째, Java 내부 클래스는 두 클래스가 밀접한 관계를 가지고 있고 다른 클래스에서 액세스할 수 없는 경우에 이상적입니다. 둘째, 내부 클래스는 Java GUI 프로그래밍 이벤트 처리에서 일반적입니다. 따라서 Java 내부 클래스는 수신기 및 해당 GUI 구성 요소가 관련된 곳에서 안전하게 사용할 수 있습니다.

자바를 어디서 배울지 궁금하세요?

upGrad의 소프트웨어 공학 직무 연계 PG 인증 당신이 찾고있는 것입니다!

신입생 과 마지막 해를 위해 특별히 고안된 upGrad의 소프트웨어 엔지니어링 직업 연계 PG 인증 은 프로그래밍을 배우고 초급 소프트웨어 역할에 배치되기를 원하는 사람들에게 적합합니다. 이 5개월 온라인 프로그램은 Java, JavaScript, HTML5, DSA, AWS, MERN 등과 같은 최고의 소프트웨어 기술을 가르칩니다!

프로그램 하이라이트:

  • MERN 스택/클라우드 네이티브 전문화
  • 500시간 이상의 온라인 학습
  • 350시간 이상의 실습 교육
  • 50개 이상의 라이브 세션
  • 5가지 산업 프로젝트
  • 업계 전문가와 네트워킹
  • 동료 및 업계 전문가와 함께하는 Q&A 포럼
  • 조교 및 업계 멘토의 학습 지원

지금 등록 하여 업계 최고로부터 배우십시오!

내부 클래스와 하위 클래스의 차이점은 무엇입니까?

내부 클래스는 다른 클래스 내에 중첩되거나 정의된 클래스입니다. 반면에 하위 클래스는 다른 클래스에서 파생된 클래스입니다. 또한 내부 클래스는 중첩된 외부 클래스의 참조를 통해서만 액세스할 수 있지만 하위 클래스에 상속된 개인 변수가 없으면 하위 클래스에 직접 액세스할 수 있습니다.

Java에서 클래스 내부에 클래스를 작성할 수 있습니까?

예, Java의 다른 클래스 내에서 클래스를 정의할 수 있습니다. 이러한 클래스를 중첩 클래스라고 하며, 이를 통해 클래스를 한 곳에서 논리적으로 구성할 수 있으므로 유지 관리가 더 쉽고 읽기 쉬운 코드를 생성할 수 있습니다. 둘러싸는 클래스의 일부로 중첩 클래스는 public, private, package-private 또는 protected로 선언될 수 있습니다.

Java 내부 클래스가 비공개일 수 있습니까?

예, Java 내부 클래스는 비공개일 수 있습니다. 그러나 내부 클래스가 private로 선언되면 클래스 외부에 있는 객체에서 액세스할 수 없습니다. 내부 및 외부 클래스는 서로의 개인 인스턴스 변수 및 개인 메서드에 액세스할 수 있습니다. 외부 또는 내부 클래스 내에 있는 한 private 및 public 수정자는 동일한 효과를 갖습니다.