- 시작하게 된 계기 및 다짐 😮
이번 코드스테이츠의 백엔드 엔지니어링 개발자 부트캠프
에 참여하게 되면서 현직개발자 분들의 빠른 성장을 위한 조언 중 자신만의 블로그를 이용하여 배운 것 들을 정리하는게 많은 도움이 된다 하여 시작하게 되었다.
- 학습 목표 😮
목표 | 결과 |
---|---|
내부 클래스의 개념 이해 및 유형에 따른 선언위치 | O |
각 내부 클래스 이해 및 정의/사용 | O |
- 정리
내부 클래스
- 외부 클래스와 내부 클래스가 서로 연관되어 있을 때 사용
- InClass inclass (자료형 , 변수)
1. 인스턴스 내부 클래스 - 외부 클래스의 멤버변수 위치에 선언
- 클래스 생성과 상관없이 사용할 수 있는 정적 변수와 정적 메서드는 인스턴스 내부 클래스에서 선언 불가
==> 외부 인스턴스 변수, 외부 전역변수(외부에 static 키워드가 붙은 메서드,변수 제외)
2. 정적 내부 클래스 - 외부 클래스의 멤버변수 위치에 선언
==> 외부 전역 변수 사용(외부 클래스의 static 키워드가 붙은 메서드,변수)
3. 지역 내부 클래스 - 외부 클래스의 메서드, 초기화 블럭안에 선언(정적 클래스로 사용 불가__메서드 호출시에 생성되기 때문에)
==> 외부 인스턴스 변수, 외부 전역변수
4. 익명 내부 클래스 - 일회용 익명 클래스( 클래스 선언과 객체 생성을 동시에 하기 때문에)
==> 외부 클래스의 final 변수와 익명클래스 메서드와 변수만 사용가능
==> 인스턴스 옆에 {}로 블럭이 있음
Instance
Class Outer{
private InClass inclass;
int num=5;
class InClass{
int inNum;
void Test(){}
System.out.println(num);
}
public void Show(){
inclass.Test();
}
}
Outer outer = new Outer();
outer.Show();
or
Outer.InClass inclass = outer.new Inclass();
======================================
Static
Class Outer{
int num =5;
static int num2 = 10;
static class StaticInClass{
static void test(){
num사용 불가/
num2 사용 가능
}
}
}
Outer outer = new Outer();
outer.test();
Local
Class Outer{
int num=5;
void test(){
int num2 = 6;
class LocalInClass{
void show(){
num 사용 가능/
num2 사용 가능
}
}
LocalInClass local = new LocalInClass();
local.show();
}
}
Outer outer = new Outer();
outer.test();
====================================
anonymous
Interface Anonymous{ // Interface도 가능
public static int num = 5;
void show();
}
Anonymous anonymous = new Anonymous(){
public void show(){
System.out.println(num);
}
}
anonymous.show();
- 피드백 😮
클래스 내에 생성되는 내부 클래스를 배웠는데 각 인스턴스/정적 클래스와 익명/로컬 클래스로 작게 구분하여 볼수 있다.
인스턴스/정적 클래스는 외부 클래스 내에 정의하는 내부 클래스로 static의 경우 해당 내부 클래스 정의없이 접근이 가능하고 인스턴스 클래스의 경우 객체 생성이 필요하다.
로컬/익명 클래스는 로컬의 경우 외부클래스의 메서드 내에서만 정의가 가능하고 이 메서드를 호출하였을때 사용이 가능하다. 익명 클래스의 경우 일회용으로 사용할 때 사용하는 클래스로 알면 쉽다.
- 앞으로 해야 될 것 😮