자바의 내부 클래스/지금까지,우리는 클래스의 멤버 변수,메소드,생성자 및 이니셜 라이저 블록입니다 알려져있다.
그러나 클래스나 인터페이스를 클래스의 멤버로 사용할 수도 있습니다.
다른 클래스 안에 선언 된 클래스를 자바의 중첩 클래스라고합니다. 중첩 클래스의 범위는 바깥쪽 클래스(외부 클래스)의 범위에 의해 연결됩니다.따라서 클래스 비는 클래스 안에 정의 된 경우 클래스 비는 클래스 없이는 독립적으로 존재할 수 없습니다.
자바의 중첩 클래스는 둘러싸는 클래스의 멤버(개인 멤버 포함)에 액세스 할 수 있습니다. 그러나 바깥쪽 클래스는 중첩 클래스의 멤버에 액세스할 수 없습니다.
다른 클래스의 멤버인 클래스는 정적 또는 비 정적 중 하나일 수 있습니다. 정적 및 비 정적:즉,자바 중첩 클래스의 두 가지 유형이 있습니다.
정적 한정자로 선언되는 멤버 클래스를 자바에서 정적 중첩 클래스라고 합니다.
정적이 아닌 멤버 클래스를 내부 클래스 또는 비 정적 중첩 클래스라고 합니다. 그것은 중첩 된 클래스의 가장 중요한 유형입니다.
이 튜토리얼에서,우리는 자바 만 내부 클래스를 배울 것입니다. 나중에,우리는 더 튜토리얼에서 정적 중첩 클래스에 대해 설명합니다.
자바의 내부 클래스
자바의 내부 클래스는 정적 한정자없이 다른 클래스의 내부에 선언 된 클래스입니다. 그것은 또한 일반적으로 자바에서 비 정적 중첩 클래스로 알려져 있습니다. 외부 클래스의 모든 멤버(변수 및 메소드)에 액세스 할 수 있습니다.
내부 클래스는 어떤 종류의 정적 멤버도 가질 수 없습니다. 자바 내부 클래스의 멤버는 다음과 같을 수 있습니다:
- 인스턴스 변수
- 인스턴스 메서드
- 생성자
- 이니셜라이저 블록
- 내부 클래스
내부 클래스의 구문
access modifier class OuterClassName { . . . . . . . . . . access modifier class InnerClassName { // Members of the inner class. } // Other members of the outer class.}For example:public class Test { // Here, Test is an outer class. . . . . . . // Inner class public class A { // A is inner class as a member of its outer class. . . . . } }
내부 클래스를 보유하는 클래스를 바깥 쪽 또는 외부 클래스라고합니다. 바깥쪽 클래스는 최상위 클래스이고 내부 클래스는 외부 클래스의 멤버입니다.
외부 클래스와 내부 클래스 간의 관계는 관계를 나타냅니다. 이 관계는 두 클래스 간의 관계를 설정합니다. 그것은 또한 자바에서 구성 또는 집계로 알려져 있습니다.
내부 클래스가 다른 내부 클래스의 바깥쪽 클래스인 경우 내부 클래스의 중첩이라고 합니다. 내부 클래스의 중첩에는 제한이 없습니다.
어떤 버전의 내부 클래스가 자바에 도입 되었습니까?
내부 클래스는 자바 1.1 버전에서 클래스 파일을 처리하는 데 사용되는 변경 사항 없이 도입되었습니다. 그것은 완전히 자바 컴파일러의 도움으로 구현됩니다.
자바 컴파일러는 외부$내부라는 각 내부 클래스에 대해 별도의 도트 클래스 파일을 생성합니다.클래스 및 외부 명명 된 외부 클래스.클래스. 예를 들어,내부 클래스는 테스트$라는 클래스 테스트로 컴파일됩니다 A.class.
도트 클래스 파일 이름에 중간에”$”기호가 포함되어 있으면 내부 클래스 파일이 표시됩니다. 내부 클래스에 대한 클래스 파일의 형식은 외부 클래스에 대한 클래스 파일과 동일합니다.
따라서 내부 클래스의 클래스 파일을 처리하고 외부 클래스는 동일하게 처리합니다.
내부 클래스의 특징
내부 클래스의 몇 가지 중요한 특징은 다음과 같습니다:
1. 내부 클래스는 외부 클래스와 같은 이름을 가질 수 있습니다.
2. 내부 클래스의 범위는 외부 클래스의 범위에 의해 제한됩니다.
3. 기존 외부 클래스 개체 또는 인스턴스가 없으면 기존 내부 클래스 개체가 발생할 가능성이 없습니다.
4. 내부 클래스는 개인을 포함한 외부 클래스의 모든 변수와 메소드에 직접 액세스 할 수 있습니다.
5. 내부 클래스는 클래스에서 선언 된 변수와 메서드와 같은 외부 클래스의 일반 멤버이기 때문에.
그렇기 때문에 공용,기본값,보호 및 비공개와 같은 모든 자바 액세스 한정자를 클래스의 다른 멤버와 유사한 내부 클래스에 적용 할 수 있습니다. 그러나 외부 또는 일반 클래스는 개인 또는 보호 될 수 없습니다.
6. 내부 클래스의 변수 이름이 외부 클래스의 변수 이름과 같은 경우,우리는이 같은 외부 클래스 변수에 액세스 할 수 있습니다. 클래스 이름.이.여기서 이것은 현재 외부 클래스 객체를 나타냅니다.
7. 자바 내부 클래스는 둘러싸는 클래스의 다른 클래스에서 숨겨져 있습니다. 따라서 응용 프로그램에 안전 메커니즘을 제공하고 프로그램의 가독성(이해)을 감소시킵니다.
8. 내부 클래스의 개체는 종종 외부 클래스에서 생성되며 다른 클래스에서 만들 수 없습니다.
9. 외부 클래스 객체와 내부 클래스 객체는 모두 별도의 메모리 위치에 만들어집니다.
자바에서 내부 클래스의 개체를 만드는 구문
내부 클래스의 인스턴스는 외부 클래스의 인스턴스와 관계를 공유합니다. 이 관계는 외부 클래스의 인스턴스가 없으면 내부 클래스의 인스턴스를 만들 수 없습니다.
따라서 내부 클래스의 개체를 만들려면 먼저 내부 클래스에 묶을 외부 클래스의 개체를 만들어야합니다. 외부 클래스의 동일한 인스턴스에 대해 내부 클래스의 여러 개체를 만들 수 있습니다.
내부 클래스에 대한 개체를 만드는 구문은 다음과 같습니다:
Syntax: OuterClass.InnerClass innerObject = outerObject.new InnerClass();For example:// First create an object of Outer class Test. Test t = new Test();// Second create an object of inner class A. Test.A innerObj = t.new A();
내부 클래스의 인스턴스가 실시간 예제를 사용하여 외부 클래스의 인스턴스와 관계를 공유하는 방법을 이해해 보겠습니다.
내부 클래스의 실시간 예
1. 대학이 있다고 가정 해 봅시다. 대학에는 전자,컴퓨터 과학,전기,기계 등과 같은 여러 부서가 있습니다.
내일,정부는 대학에서 일어나는 불법 행위로 인해이 대학을 폐쇄하기로 결정했다고 가정합니다. 대학이 폐쇄되면,이 대학의 모든 부서는 자동으로 폐쇄됩니다.
그래서 우리는 부서가 대학에 묶여 있다고 말할 수 있습니다. 즉,그들의 기능은 대학과 묶여 있습니다. 따라서 기존 대학 개체가 없으면 기존 부서 개체의 기회가 없습니다.
학과는 항상 대학 클래스의 일부이기 때문에. 따라서,우리는 대학 클래스 내부의 부서 클래스를 선언해야합니다.
class University { // University is outer class. . . . . . . . class Department { // Department is inner class. . . . . . . . . }}
객체의 다른 유형을 기존의 기회가없는 경우 따라서,객체의 기존 한 유형없이,우리는 내부 클래스를 구현해야합니다.
2. 자동차가 있다고 가정합니다. 자동차 내에서 필요한 몇 가지 중요한 개별 구성 요소가 있습니다. 자동차의 가장 중요한 요소는 엔진입니다.
자동차를 만들기 위해서는 엔진이 필요합니다. 그러나 기존 자동차 객체가 없으면 엔진 객체를 기존 할 기회도 없습니다.
엔진은 항상 자동차의 중요한 부분이기 때문에. 따라서 클래스 엔진은 클래스 자동차 내부에 선언되어야합니다.
class Car { . . . . . . . . . class Engine { . . . . . . . . . . }}
위의 두 가지 실시간 예제를 통해 내부 클래스의 기본 아이디어를 얻을 수 있습니다. 이제 우리는 자바를 기반으로 한 다음 예를 취할 것입니다.
3. 우리는 자바에서 컬렉션에지도 개념이 있다는 것을 알고있다. 맵은 키-값 쌍의 그룹에 불과합니다. 각 키-값 쌍을 하나의 항목이라고합니다. 이제 기존 맵 객체가 없으면 기존 항목 객체의 기회가 있습니까?
대답은’아니오’입니다. 인터페이스 항목이 맵 인터페이스 내부에 정의 된 이유입니다.
Interface Map { // Map is an outer interface. . . . . . . . . . Interface Entry { // Entry is an inner interface. . . . . . . . . . . } }
이제 위의 실시간 예에서 자바 프로그래밍에서 내부 클래스를 사용해야 할 때를 이해했을 것입니다.
자바에서 내부 클래스의 사용
자바에서 내부 클래스의 중요한 용도는 다음과 같습니다.
1. 내부 클래스는 논리적으로 함께 속한 한 곳에서 클래스와 인터페이스를 그룹화 할 수 있기 때문에 중요한 기능입니다.
2. 그것은 더 읽기 쉽고 유지 보수가 될 수 있도록 다른 내에서 하나의 가시성을 제어하는 데 도움이됩니다.
3. 자바 내부 클래스의 가장 좋은 사용은 그 기능이 외부 클래스에 묶여있을 때입니다. 즉,기존 외부 클래스 객체가 없으면 기존 내부 클래스 객체가 발생할 가능성이 없습니다. 실시간 예제를 이해하십시오.
4. . 자바 내부 클래스는 중요한 코드에 대한 보안을 제공하는 데 유용합니다. 예를 들어,내부 클래스를 비공개로 선언하면 다른 클래스에서 사용할 수 없습니다. 즉,내부 클래스에 대한 개체를 다른 클래스에서 만들 수 없습니다.
실시간 예제 프로그램의 도움으로 이해합시다.
클래스를 생성한다고 가정합니다. 일부 은행 계좌 정보를 얻으려면,우리는 인스턴스 변수’균형’과 클래스의 관심의’속도’를 정의합니다.이 방법은 이자 금액을 계산하고 잔액 금액을 표시합니다. 다음 소스 코드를 살펴보십시오.
class BankAcct { // Balance and Rate of interest. private double bal; private double rate; // Calculating interest and updated balance. void calInterest() { double interest = bal * rate/100; bal += interest; System.out.println("Balance amount = " +bal); }}
이 코드에 대한 보안이 없음을 확인할 수 있습니다.
기본 액세스 한정자 아래에 있기 때문에 모든 프로그래머는이 클래스의 객체를 쉽게 만들고 다른 클래스 외부에서 클래스의 멤버에 액세스 할 수 있습니다. 따라서 은행 계좌 클래스에 대한 보안은 없습니다.
예를 들어 모든 프로그래머가 다른 클래스를 만들 수 있습니다. 다음과 같이 이자율을 변경할 수 있습니다:
class Myclass { public static void main(String args ){ BankAcct ba = new BankAcct(); ba.calInterest(11.5); } }
따라서,칼리 관심()방법은 매우 민감하다. 잔액 계정이 다른 사람에 의해 외부에서 업데이트 할 수 있기 때문에 그것은 외부인으로부터 보호해야합니다. 승인 된 사람 만 잔액 계정을 업데이트 할 수 있어야합니다.우리는 내부 클래스 내부에 칼렌테스트()메소드의 코드를 넣고 그것을 비공개로 만들 경우,아무도 외부 클래스에서 그들에 액세스 할 수 없습니다. 코드를 보라.
class BankAcct { . . . . . . . . private class Interest { private double rate; void calInterest() { double interest = bal * rate/100; bal += interest; System.out.println("Balance = " +bal); } }}
이제 문제는 내부 클래스에 액세스하는 방법입니다.
내부 클래스에 액세스하려면,우리는 외부 클래스 내부에 접촉()메소드를 생성합니다. 내부 접촉()방법,우리는 내부 클래스의 객체를 생성하고 그것의 구성원에 액세스 할 수 있습니다.
인증 은행 사람은 연락처()메서드를 호출하여 내부 클래스와 상호 작용할 수 있습니다. 접촉()메소드가 호출 될 때,그는 암호로 확인 될 것이고,그는 내부 클래스를 사용하고 액세스 할 수있을 것이다.
따라서 내부 클래스는 자바의 중요한 코드에 안전 메커니즘을 제공 할 수 있습니다.
자바의 내부 클래스 유형
선언 및 동작을 기반으로 자바에는 기본적으로 네 가지 유형의 내부 클래스가 있습니다. 그들은 다음과 같이 입니다:
- 일반 또는 일반 내부 클래스
- 방법 로컬 내부 클래스
- 익명 내부 클래스
- 정적 중첩 내부 클래스
이 자습서에서는 각 클래스를 간략하게 이해할 것입니다.
1. 일반 또는 일반 내부 클래스:다른 클래스 내부 및 정적 수정 자없이 메서드 외부에서 생성 된 클래스를 일반 또는 일반 내부 클래스라고합니다.
2. 메소드 로컬 내부 클래스:외부 클래스의 메소드 내에서 선언 된 클래스는 메소드 로컬 내부 클래스라고합니다.
3. 익명 내부 클래스: 이름 없이 선언된 클래스를 익명 내부 클래스라고 합니다.
4. 정적 중첩 내부 클래스:클래스 내에서 정적 한정자로 선언 된 클래스를 정적 중첩 내부 클래스라고합니다. 최상위 중첩 클래스라고도 합니다. 외부 클래스의 정적 멤버 만 액세스 할 수 있습니다.
참고:일반,메서드 로컬 및 익명 내부 클래스는 정적이 아닌 중첩 클래스입니다.
내부 클래스의 장점
자바에는 기본적으로 내부 클래스의 다섯 가지 장점이 있습니다. 그들은 다음과 같습니다:
1. 내부 클래스는 논리적으로 함께 속한 클래스와 인터페이스를 한 곳에서 그룹화하는 방법을 제공합니다.
2. 그것은 개인을 포함하여 외부 클래스의 모든 변수와 메소드에 직접 액세스 할 수 있습니다.
3. 더 읽기 쉽고 유지 관리 가능한 코드를 개발하는 데 사용됩니다.
4. 그것은 쓰기 적은 코드가 필요합니다.
5. 캡슐화를 증가시킵니다.
자바 중첩 클래스와 내부 클래스의 차이
중첩 클래스는 다른 클래스 내에 정의 된 클래스입니다. 중첩 클래스에는 정적 클래스와 비 정적 클래스의 두 가지 유형이 있습니다. 비 정적 중첩 클래스는 내부 클래스입니다.
이 튜토리얼은 실시간 예제 프로그램과 자바 내부 클래스의 모든 중요한 기능을 다루었 으면 좋겠다. 나는 당신이 자바에서 내부 클래스를 사용하는 기본 개념을 이해했기를 바랍니다.7537 읽어주셔서 감사합니다!!!자바의 멤버 내부 클래스
이전 다음⇒