Java 기초 내부클래스(1)
728x90
기본 환경
JDK : 1.8.0_261 버전 JRE : 1.8.0_261 버전 JAVA VERSION : 8 업데이트 261 Eclipse IDE VERSION : 2020-06버전 |
목표
자바에서 제공하는 내부클래스를 이해한다.
코드
package ex14innerclass;
/*
내부 정적 클래스
: 클래스 안에 정의하는 클래스로 static을 붙여준다.
- 이와 같이 내부클래스를 static으로 선어하면 Nested 클래스라고 한다.
- 정적 멤버변수 & 멤버메소드를 가질 수 있다.
- 외부 클래스의 인스턴스형 멤버는 사용할 수 없다.
- 외부 클래스명$내부클래스명.class 파일이 생성된다.
※원래 class 앞에는 static을 붙일수 없으나 내부 클래스에서는 허용된다.
*/
class OuterClass {
//인스턴스형 멤버변수
InnerStaticClass innerStaticClass = new InnerStaticClass();
int outerMemberVar;
//인스턴스형 멤버메소드
void outerMemberMethod() {
/*
외부클래스의 멤버메소드에서는 내부정적클래스의 멤버를 접근할 수 있다.
(Heap영역에서는 Method영역을 참조할 수 있다.)
*/
System.out.println("외부 클래스의 멤버메소드 호출됨");
innerStaticClass.innerMemberVar = 100; //내부정적클래스의 멤버변수
innerStaticClass.innerStaticVar = 101; //내부정적클래스의 정적멤버변수
}
//외부 클래스의 정적멤버&메소드
static int outerStaticVar;
static void outerStaticMethod() {
System.out.println("외부 클래스의 정적메소드 호출됨");
/*
외부클래스의 정적멤버메소드에서는 내부클래스의 정적멤버만 접근할 수 있다.
(Method영역에서는 Heap영역을 참조할 수 있다.)
*/
//InnerStaticClass.innerMemberVar = 102;
//InnerStaticClass.innerMemberMethod();
InnerStaticClass.innerStaticVar = 103;
InnerStaticClass.innerStaticMethod();
//InnerStaticClass.innerMemberVar = 104;
//InnerStaticClass.innerMemberMethod();
}
//내부 정적 클래스(Nested Class)
static class InnerStaticClass {
//인스턴스형 멤버
int innerMemberVar;
void innerMemberMethod() {
System.out.println("내부클래스의 멤버메소드 호출");
}
//정적 멤버
static int innerStaticVar;
static void innerStaticMethod() {
System.out.println("내부클래스이 정적메소드 호출");
}
}
}
//외부클래스가 아닌 다른 클래스에서 접근할 때의 방법은 아래와 같다.
public class E02InnerStaticClass {
public static void main(String[] args) {
/*
내부정적 클래스의 정적멤버에 접근할 때는 외부클래스의 객체 생성없이
클래스 명으로 바로 접근 가능한다.
*/
OuterClass.InnerStaticClass.innerStaticVar = 1;
OuterClass.InnerStaticClass.innerStaticMethod();
/*
내부정적 클래스의 인스터늣형 멤버에 접근할 때는 객체를 생성한 후 참조변수를 통해 접근해야 한다.
*/
OuterClass.InnerStaticClass innerStaticClass = new OuterClass.InnerStaticClass();
//new OuterClass().InnerStaticClass(); 에러발생
innerStaticClass.innerMemberVar = 2;
innerStaticClass.innerMemberMethod();
/*
그 외는 클래스 접근의 일반적인 방법을 따른다.
외부클래스의 멤버변수(메소드)는 객체생성 후 참조변수를 통해
접근한다.
*/
OuterClass outerClass = new OuterClass();
outerClass.outerMemberVar = 3;
outerClass.outerMemberMethod();
//외부 클래스의 정적맴버는 클래스명으로 바로 접근한다.
OuterClass.outerStaticVar = 4;
OuterClass.outerStaticMethod();
}
}
잘 사용하지 않는 개념이긴 하지만 그래도 어떻게 사용하는지 알고 있어야 합니다.
결과 값
'Java > Java_기초부터 _끝까지' 카테고리의 다른 글
Java 기초 함수 - BigInteger(큰 정수) (0) | 2022.03.23 |
---|---|
Java 기초 함수 - StringTokenizer (0) | 2022.03.09 |
Java 기초 상속 - 연습문제(2) (0) | 2020.12.14 |
Java 기초 상속 - 연습문제(1) (0) | 2020.12.14 |
Java 기초 상속(8) - 다형성(이질화) (0) | 2020.11.30 |