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
- 마이크로서비스
- CRD
- ingress
- 헬름
- Algorithm
- cloud native java
- kubernetes
- ansible
- 클라우드 네이티브
- 코틀린
- Kotlin
- MSA
- 머신러닝
- Spring
- Microservice
- devops
- nGrinder
- cloud native
- 자바
- 클라우드 네이티브 자바
- 동기화
- java
- MySQL
- Adapter 패턴
- spring microservice
- Semaphore
- 쿠버네티스
- Stress test
- 익명클래스
- decorator 패턴
Archives
- Today
- Total
카샤의 만개시기
중첩클래스 (내부클래스, 정적 중첩클래스, 지역클래스, 익명클래스) 본문
중첩 클래스는 하기와 같은 구조를 가지고 있습니다.
- Nested Classes
- Static Nested Classes (정적 중첩 클래스)
- Inner Classes
- Inner Classes (내부 클래스)
- Method Local Inner Classes (지역 클래스)
- Anonymous Inner Classes (익명 클래스)
중첩 클래스를 사용하는 이유
- 한 곳에서만 사용되는 클래스를 논리적으로 그룹화하는 방법
- 캡슐화 증가
- 좋은 가독성과 유지보수성
Static Nested Classes (정적 중첩 클래스)
내부클래스는 밖에 있는 클래스의 자원을 마음대로 사용할 수 있지만 중첩클래스는 static 키워드가 안붙었다면 사용할 수 없습니다.
Outer 클래스가 인스턴스화 되어있지 않아도 객체를 생성이 가능합니다.
정적 중첩 클래스는 행동 상으로는 패키징 편의를 위해 다른 최상위 클래스에 중첩 된 최상위 클래스입니다.
class OuterClass {
static class StaticNestedClass {
}
}
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
Inner Classes (내부 클래스)
밖에 있는 클래스는 내부클래스를 멤버변수처럼 사용할 수 있으며 내부클래스는 자신의 밖에 있는 클래스의 자원을 직접 사용할 수 있습니다.
class OuterClass {
class InnerClass {
}
}
OuterClass outerClass = new OuterClass();
OuterClass.InnerClass innerClass = outerClass.new InnerClass();
Method Local Inner Classes (지역 클래스)
메소드 내부에 클래스를 정의하여 메소드 내의 지역변수처럼 사용하며, 메소드 밖에서 사용할 수 없다(지역변수 룰)
class OuterClass {
public void fuc() {
class LocalClass {
}
LocalClass localClass = new LocalClass();
}
}
Anonymous Inner Classes (익명 클래스)
익명클래스는 말그대로 이름이 없는 클래스이며 new 와 동시에 부모클래스를 상속받아 내부에서 오버라이딩해서 사용합니다. 매개변수로도 사용이 가능하며 상속은 받아야하지만 일회성으로 사용할때 주로 사용합니다.
익명클래스는 외부의 자원을 이용할때 final이 붙은 자원만 사용 가능합니다.
class OuterClass {
interface AnonymousClass {
public void hello();
}
public void fuc() {
new AnonymousClass() {
public void hello() {
System.out.println("hello world");
}
}.hello();
}
}
대표적인 예
Collections.sort(list, new Comparator<String>() {
public int compare(String s1, String s2) {
return Integer.compare(s1.length(), s2.length());
}
});
'Java > POJO' 카테고리의 다른 글
동기화 클래스 2편 - CountDownLatch (0) | 2019.07.03 |
---|---|
동기화 클래스 1편 - 세마포어(Semaphore) (0) | 2019.07.03 |
Java의 동기화 (atomic, volatile, synchronized) (0) | 2019.07.03 |
OSGI에서 Jigsaw로 모듈 시스템 (0) | 2019.07.01 |
익명클래스 vs 람다 (0) | 2019.06.30 |
Comments