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 |
Tags
- http
- Thymeleaf
- pointcut
- Servlet
- transaction
- AOP
- 백준
- 알고리즘
- Exception
- 스프링 핵심 원리
- 김영한
- jpa
- JDBC
- 인프런
- 자바
- JPQL
- Greedy
- springdatajpa
- 스프링 핵심 기능
- kotlin
- 그리디
- 스프링
- Proxy
- Android
- SpringBoot
- db
- Spring Boot
- spring
- QueryDSL
- java
Archives
- Today
- Total
개발자되기 프로젝트
내부 클래스 정의, 유형 본문
1. 내부 클래스(inner class)
- 클래스 내부에 선언한 클래스로 이 클래스를 감싸고 있는 외부 클래스와 밀접한 연관이 있는 경우가 많음.
- 다른 외부 클래스에서 사용할 일이 거의 없는 경우에 내부 클래스로 선언해해서 주로 사용함
- 중첩 클래스
- 내부 클래스의 종류
- 인스턴스 내부 클래스, static 내부 클래스, local 내부 클래스, anonymous 내부 클래스
2. 인스턴스 내부 클래스
- 내부적으로 사용할 클래스를 선언(private로 선언하는 것을 권장)
- 외부 클래스가 생성된 후 생성됨(static 내부 클래스와 다름)
- private가 아닌 내부 클래스는 다른 외부 클래스에서 생성할 수 있음.
- 인스턴스 내부 클래스에 static 변수 사용이 가능?
- 인스턴스 내부 클래스는 외부 클래스가 생성된 후에 생성된다.
- 이 때 내부 클래스에 static을 사용하는 외부 클래스 생성과 관계 없이 쓸 수 있다는 의미.
- 하지만 innterClass는 outClass에 생성에 종속되기 때문에 사용이 불가능.
- 즉 outClass가 있어야 innerClass를 생성하던가 말던가 할 수 있고,
- 이 때 인스턴스 내부 클래스의 static변수를 사용이 가능.
class OutClass{
private int num = 10;
private static int sNum = 20;
private InClass inClass;
public OutClass() {
inClass = new InClass();
}
class InClass{
int iNum = 100;
int sInNum = 500;
//static int sInNum = 500; //사용 불가
void inTest(){
System.out.println("OutClass num = " + num + "(외부 클래스의 인스턴스 변수)");
System.out.println("OutClass sNum = " + sNum + "(외부 클래스의 static 변수)");
System.out.println("InnerClass iNum = " + iNum + "(내부 클래스의 인스턴스 변수)");
}
}
//외부 클래스에서 인스턴스 내부 클래스의 메서드 사용
public void userClass(){
inClass.inTest();
}
}
public class InnerTest {
public static void main(String[] args) {
OutClass outClass = new OutClass(); //Inclass도 생성됨.
outClass.userClass();
//Innerclass가 private가 아닌 경우 외부에서도 생성 가능
//단 생성된 outClass에서 InClass를 찾아서 생성해야함 .아래와 같은 방식
OutClass.InClass inner = outClass.new InClass();
}
}
- 인스턴스 내부 클래스가 private가 아닌 경우 외부 클래스를 사용해서 외부에서 Innerclass생성 가능
3. Static 내부 클래스
- 외부 클래스 생성과 무관하게 사용 가능
- 정적 변수, 정적 메서드 사용
- static내부 클래스에서는 외부 클래스 인스턴스 변수를 사용 못한다.
- 왜냐? static 내부 클래스는 외부 클래스 생성과 관계 없이 사용할 수 있기 때문에!
- static메서드에서는 인스턴스 변수 사용 불가
- 내부/외부 클래스의 생성과 무관하게 사용이 가능하기 때문.
class OutClass{
private int num = 10;
private static int sNum = 20;
private InClass inClass;
public OutClass() {
inClass = new InClass();
}
static class InStaticClass{
int iNum = 100;
static int sInNum = 200;
void inTest(){
//System.out.println("OutClass num = " + num + "(외부 클래스의 인스턴스 변수)");
System.out.println("OutClass sNum = " + sNum + "(외부 클래스의 static 변수)");
System.out.println("InnerClass iNum = " + iNum + "(내부 클래스의 인스턴스 변수)");
System.out.println("InnerClass sInNum = " + sInNum + "(내부 클래스의 static 변수)");
}
static void sTest(){ //내부 클래스 생성과 관계 없이 사용할 수 있음.
//System.out.println("OutClass num = " + num + "(외부 클래스의 인스턴스 변수)");
System.out.println("OutClass sNum = " + sNum + "(외부 클래스의 static 변수)");
//System.out.println("InnerClass iNum = " + iNum + "(내부 클래스의 인스턴스 변수)");
System.out.println("InnerClass sInNum = " + sInNum + "(내부 클래스의 static 변수)");
}
}
}
public class InnerTest {
public static void main(String[] args) {
//바로 생성해서 사용할 수 있음.
OutClass.InStaticClass inStaticClass = new OutClass.InStaticClass();
inStaticClass.inTest();
}
}
4. GitHub: 211026 InnerClass
GitHub - bsh6463/various_functions
Contribute to bsh6463/various_functions development by creating an account on GitHub.
github.com
'Java > 다양한 기능' 카테고리의 다른 글
객체지향 프로그래밍 vs 람다식 구현 (0) | 2021.10.27 |
---|---|
Stream (0) | 2021.10.27 |
함수형 인터페이스, 람다식 구현 및 사용 (0) | 2021.10.27 |
람다식 (0) | 2021.10.27 |
익명 내부 클래스 활용 (0) | 2021.10.26 |
Comments