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 |
댓글을 사용할 수 없습니다.