목차
내부클래스 정의
private 내부클래스
static 내부클래스
내부클래스에서 외부클래스에 접근
내부클래스 정의
클래스 안에 클래스 선언.
※ 중첩적인 클래스 구조.
[장점]
1.
내부클래스에서 외부클래스의 멤버에 쉽게 접근 .
※ 대등 구조의 클래스 경우, 외부클래스로 객체 생성해야 접근 가능.
2.
코드 복잡성 감소. (= 캡슐화)
※ 특정 클래스 관련 작업 경우, 외부 비노출이 효율적.
[예제]
1.
C:\Users\사용자명\Hz.java 생성.
class Out {
int x = 3;
class In {
int y = 4;
}
}
public class Hz {
public static void main(String[] args) {
Out out = new Out();
Out.In in = out .new In();
System.out.println(in.y + out .x);
}
}
2.
Hz.java 컴파일.
C:\Users\사용자명>javac -encoding UTF-8 Hz.java
3.
Hz 클래스 실행.
C:\Users\aspire>java Hz
결과값: 7
private 내부클래스
1.
일반 클래스와 달리,
내부 클래스는 private 또는 protected 가능.
2.
외부 객체가 내부 클래스에 접근 원치 않을 경우,
내부 클래스를 private 선언. (※ 아래 예제 참고)
[예제]
1.
C:\Users\사용자명\Hz.java 생성.
class Out {
int x = 3;
private class In { // 외부에서 접근 차단.
int y = 4;
}
}
public class Hz {
public static void main(String[] args) {
Out out = new Out();
Out.In in = out.new In(); // 외부에서 접근 시도 시, 에러 발생.
System.out.println(in.y + out.x);
}
}
2.
Hz.java 컴파일. ※ 에러 발생.
C:\Users\사용자명>javac -encoding UTF-8 Hz.java
결과값:
Hz.java:12: error: Out.In has private access in Out
Out.In in = out.new In();
^
Hz.java:12: error: Out.In has private access in Out
Out.In in = out.new In();
^
2 errors
static 내부클래스
내부 클래스를 static 선언 시,
외부 클래스의 객체 생성 없이 바로 외부 클래스 멤버에 접근 가능.
[참고]
static (속성・메서드)와 마찬가지로,
static 내부 클래스는 외부 클래스의 멤버에 접근 불가.
[예제]
1.
C:\Users\사용자명\Hz.java 생성.
class Out {
int x = 3;
static class In {
int y = 4;
}
}
public class Hz {
public static void main(String[] args) {
Out out = new Out();
Out.In in = new Out.In(); // 맨 처음 예제와 차이 비교.
System.out.println(in.y + out .x);
}
}
2.
Hz.java 컴파일.
C:\Users\사용자명>javac -encoding UTF-8 Hz.java
3.
Hz 클래스 실행.
C:\Users\aspire>java Hz
결과값: 7
내부클래스에서 외부클래스에 접근
내부 클래스는 외부 클래스의 (속성/메서드)에 쉽게 접근 가능.
[예제] 외부클래스의 속성값을 내부클래스에서 바로 사용.
1.
C:\Users\사용자명\Hz.java 생성.
class Out {
int x = 5;
class In {
public int inMethod() {
return x;
}
}
}
public class Hz {
public static void main(String[] args) {
Out out = new Out();
Out.In in = out.new In();
System.out.println(in.inMethod());
}
}
2.
Hz.java 컴파일.
C:\Users\사용자명>javac -encoding UTF-8 Hz.java
3.
Hz 클래스 실행.
C:\Users\aspire>java Hz
결과값: 5
주소 복사
랜덤 이동
최신댓글