Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 분할정복
- 스프링부트
- 레디스
- VMware
- SQL
- NoSQL
- 깃허브
- 게시판
- 정보처리기사
- JPA
- 스프링 시큐리티
- document database
- 정처기
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- MongoDB
- Redis
- in-memory
- 영속성 컨텍스트
- 자바의 정석
- spring security
- 호이스팅
- 실행 컨텍스트
- 다이나믹프로그래밍
- Spring Boot
- 이벤트루프
- 동적계획법
- 캐시
- github
- sqld
- 스프링 부트
Archives
- Today
- Total
FreeHand
내부 클래스 본문
class A { // 외부 클래스
// 내부 클래스
class B { // 인스턴스 클래스 }
static class C { // 스태틱 클래스 }
void methodA() {
class D { // 지역 클래스 }
}
}
내부 클래스는 말 그대로 클래스 안의 클래스를 의미한다.
class A {
int num = 10;
}
class B {
void printA() {
A a = new A();
System.out.println(a.num);
}
}
public class Main {
public static void main(String[] args) {
B b = new B();
b.printA(); // 10
}
}
B 클래스에서 A 클래스의 멤버를 사용하려면 B 클래스 안에서 A 객체를 생성해서 사용해야 한다.
class A {
int num = 10;
class B {
void printA() {
System.out.println(num);
}
}
}
public class Main {
public static void main(String[] args) {
B b = new B();
b.printA(); // 10
}
}
B 클래스가 A 클래스의 내부 클래스가 되면서 A 클래스의 멤버를 객체 생성 없이 바로 사용할 수 있게 되었다.
또한 다른 클래스에서 B 클래스의 멤버에 바로 접근할 수 없다. (캡슐화)
클래스는 default, public 제어자만 사용할 수 있지만 내부 클래스는 private, protected 제어자도 사용 가능하다.
class A {
private class InstanceInner {}
protected static class StaticInner{}
void foo() {
class LocalInner {}
}
}
static 멤버는 static 클래스만 정의할 수 있다.
class Outer {
int outerIv = 100; // static 내부 클래스에서 접근 불가능
class InstanceInner {
int iv = 10; // instance 변수 가능
static int cv = 10; // static 변수 선언 불가능
final static int CONST = 10; // final static은 상수이므로 가능
}
static class StaticInner {
int iv = 10; // instance 변수 가능
static int cv = 10; // static 변수 가능
final static int CONST = 10; // final static 가능
}
void foo() {
class LocalInner {
int iv = 10; // instance 변수 가능
static int cv = 10; // static 변수 선언 불가능
final static int CONST = 10; // final static은 상수이므로 가능
}
int iv = LocalInner.CONST; // 가능
}
public static void main(String[] args) {
System.out.println(InstanceInner.CONST); // 가능
System.out.println(StaticInner.cv); // 가능
System.out.println(LocalInner.CONST); // 불가능
}
}