| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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
- 예외
- static
- 엔티티 매니저
- html
- oAuth2
- input
- 카카오인가코드받기
- jenkins
- Java
- 엔티티 생명주기
- ci/cd
- 카카오사용자정보가져오기
- spring
- Docker
- feignClient
- form
- 상속
- 카카오인증토큰받기
- 백엔드공부
- Interface
- Spring API
- 백엔드스쿨
- 인스턴스
- GitHub_Actions
- tag
- MIND 2023 #후기
- 어떤 개발자?
- 백엔드 로드맵
- 제로베이스
- button
Archives
- Today
- Total
HiDevelop
[Java] Inner && Outer Class 본문
class OuterClass{
private String myName;
private int num;
OuterClass(String name){
myName = name;
num = 0;
}
public void whoAreYou() {
num++;
System.out.println(myName + "OUterclass" + num );
}
static class NestedClass{
NestedClass(){
System.out.println("Hi");
}
}
class InnerClass{
InnerClass(){
whoAreYou();
}
}
}
public class InnerClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
OuterClass out1 = new OuterClass("First");
OuterClass out2 = new OuterClass("Second");
out1.whoAreYou();
out2.whoAreYou();
OuterClass.InnerClass Inn1 = out1.new InnerClass();
OuterClass.InnerClass Inn2 = out2.new InnerClass();
OuterClass.InnerClass Inn3 = out1.new InnerClass();
OuterClass.InnerClass Inn4 = out1.new InnerClass();
OuterClass.InnerClass Inn5 = out2.new InnerClass();
OuterClass.NestedClass Nes = new OuterClass.NestedClass();
}
}
- Nested 클래스 : static으로 선언된 Inner클래스를 Nested 클래스라고 말합니다.
- Outer클래스 입장에서는 Nested클래스가 static으로 선언되었기 때문에 외부에 선언된 클래스와 똑같이 생각합니다
- Outer 클래스 : Inner 클래스를 보유하고 있는 클래스를 OuterClass라고 말합니다.
- Inner 클래스 : OuterClass안에 선언된 InnerClass 처럼 클래스 안에 선언된 클래스를 말합니다!
- Outer 클래스의 인스턴스 생성 후에야 Inner 클래스 인스턴스 생성이 가능합니다.
- Inner 클래스내에서 Outer 클래스의 멤버에 직접 접근이 가능합니다.
- Inner 클래스의 인스턴스는 자신이 속한 Outer 클래스의 인스턴스를 기반으로 생성됩니다.
OuterClass out1 = new OuterClass("First");
OuterClass out2 = new OuterClass("Second");
위 코드를 통해 OuterClass의 인스턴스인 out1, out2가 생성됩니다.
OuterClass.InnerClass Inn1 = out1.new InnerClass();
OuterClass.InnerClass Inn2 = out2.new InnerClass();
OuterClass.InnerClass Inn3 = out1.new InnerClass();
OuterClass.InnerClass Inn4 = out1.new InnerClass();
OuterClass.InnerClass Inn5 = out2.new InnerClass();
아래 코드를 통해 Inner클래스의 인스턴스들은 다음과 같이 존재하게 됩니다.
out1 인스턴스 안 : Inn1, Inn3, Inn4
out2 인스턴스 안 : Inn2, Inn5
이런 형식으로 존재하다 보니 위 코드의 결과값도 아래와 같이 out1.num의 마지막 값은 4가 out2.num의 마지막 값은 3이 됩니다.
FirstOUterclass1
SecondOUterclass1
FirstOUterclass2
SecondOUterclass2
FirstOUterclass3
FirstOUterclass4
SecondOUterclass3
- Inner 클래스로 인한 효과
- 클래스들을 논리적으로 묶는 수단
- 캡슐화가 증가
- 코드의 가독성이 향상, 유지보수성 증가
밀접한 관계에 있는 두 클래스를 Outer 클래스와 Inner클래스로 묶게되면, 코드를 분석할 때 두 클래스의 관계 파악이 쉬워집니다. 또한 관계로 묶이다 보니 캡슐화도 증가하게되는 거죠. 그리고 해당 클래스에서 오류가 발생했으면 캡슐화된 부분만을 통해서 유지보수를 하면 되니 유지보수성도 증가하게됩니다.
728x90
'Java' 카테고리의 다른 글
| [Java] 다시 정리하는 예외 (0) | 2022.02.11 |
|---|---|
| [Java] Local Class & Anonymous 클래스 (0) | 2022.02.07 |
| [Java]Interface의 특성 (0) | 2022.02.04 |
| [Java] abstract(추상) && Interface (0) | 2022.02.03 |
| [Java] Object class와 final (0) | 2022.01.29 |