티스토리 뷰
inner class 란 클래스 안에 또 다른 클래스가 있는 형태를 말한다.
is a 상속관계를 생각해보면 또 다른 클래스를 참조하는 형태이지만
inner class는 말그대로 클래스안에 존재한다
이런 식으로 클래스 안에 또 다른 클래스가 존재하는 형태이다
그리고 접근지정자를 private로 두면 일반 상속관계에서는 참조할수없지만
inner class를 통하면 접근지정자에 관계없이 사용이 가능하다.
구조는 아래와 같다.
public class out{
private int a;//private를 붙여서 일반적으로는 클래스간 참조가 안된다.
private int b;// ""
public out(){
a=10;
b=20;
}//생성자를 통해 a와 b값을 초기화
class inner{
public void disp(){
System.out.println(a);//inner class를 이용해서 값이 정상적으로 출력
System.out.println(b);// ""
}
}
class out을 두고 클래스를 마치기 전에 또 다른 클래스를 선언해줬다.
inner class의 구조는 4가지가 있는데 일단 이런 기본적인 구조를 memberInnerClass라고 부른다.
inner class의 기본적인 구조를 만들었으니 출력하는 문장도 만들어보자
public class InnerTest{
public static void main(String[]args){
Out outter= new Out();
inner in= new inner();
in.disp();
}
}
이런 구조를 통해 출력하는 방법도 있겠지만 이를 한줄로 줄여 가독성과 코드의 불필요한 작성을 줄일 수 있다.
//Out outter= new Out();
//inner in= new inner();
//disp();
Out.inner in=new Out().new inner();
disp();
이게 memberInnerClass의 기본적인 구조이고 innerClass를 static을 활용하면 조금 더 간단하게 표현할 수 도 있다.
public class out{
final static int a=10;
final static int b=20;
static class inner{
public void disp(){
System.out.println(a);//inner class를 이용해서 값이 정상적으로 출력
System.out.println(b);// ""
}
}
바뀐것은 static으로 상수를 지정해줬다는 것과 innerclass를 static으로 바꿔 준 것 뿐이다.
이런식으로 코드를 짜게되면 어떤 이점이 있는지 알아보자
public class InnerTest{
public static void main(String[]args){
Out.inner in= new Out.inner();
}
}
static이 붙으면 어디서나 사용할 수 있기때문에 상위 클래스만 사용한다면 inner in=new inner(); 만 붙여서도 사용할 수 있다.
하지만 이는 이 클래스 내부에서만 아는 사실이기 때문에 외부에서 도 이 값을 받아올 수 있게하기 위해서 Out.을 붙여줬다.
이런 구조를 자바에서는 static inner class라고 부른다.
여기까지가 memer와 static 의 inner클래스의 기본적인 로직과 특징이다. 이 구조를 파악하고
유연하게 코드를 짤 수 있다면 다른 2개의 구조도 쉽게 이해할 수 있을 것 같다.
'웹 프로그래밍 > JAVA(이론 )' 카테고리의 다른 글
Interface의 이해 (JAVA) (0) | 2021.02.27 |
---|---|
Is-a 관계 Has-a관계의 이해 (0) | 2021.02.14 |
Stack과 Heap의 이해 (JAVA) (0) | 2021.01.30 |
- Total
- Today
- Yesterday
- prometheus
- elasticSearch
- rabbitmq
- LoadBalancer
- github
- 운동일기
- 오늘저녁 삼겹살
- 운동
- config
- docker
- JWT
- Spring + ELK
- ACTUATOR
- git
- Gateway
- MariaDB
- 빅-오
- springcloud
- 미래의나에게동기부여
- producer
- Logstash to ElasticSearch
- zipkin
- MSA
- UserService
- consumer
- 루틴기록
- Kafka Connect
- kafka
- Feign
- Logstash 활용
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |