| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- session이 뭔가요?
- 구글 자바 코드 스타일
- jwt토큰구조
- ReverseProxy
- 백엔드 서버
- session장점
- 구글 자바 스타일
- 포워드프록시
- jwt토큰원리
- 우아한테크코스 Google Java Style Guid
- 메모리에서 배열
- jwt토큰관리
- session이뭔가요?
- jwt란?
- Google Java Code Style Guide
- 신입개발자
- 토큰구조
- 세션장점
- Google Java Style Guide
- jwt원리
- 배열과 메모리
- 세션단점
- 신입개발자 프로젝트
- GPT프로젝트
- 프록시서버
- 자바 코드 가이드
- session이란?
- 프로그래밍 배열
- 세션장단점
- session단점
- Today
- Total
dev_dbdb1114
[JAVA] inner클래스 (정적 / 비정적) 본문
inner 클래스도 두 가지로 분류할 수 있다.
statice 이너클래스 / 이너클래스
원래 보던 것과 조금 달라 보이지만, 잘 생각해보면 크게 다를 것 없다.
- 클래스를 왜 만들었지? 부터 생각해본다.
- 클래스를 만드는 이유는 틀을 생성하는 것이다.
- 그 틀이 프로그래밍으로 들어오면 type이 된다.
class를 선언하는 것 == 개발자가 원하는 타입을 만드는것.
해당 클래스에 해당하는 객체를 생성하는 것 = 원하는 타입의 무언가를 만드는 것.
그래서 우리가 어떤 객체를 선언할 때 타입 자리에 클래스 명을 넣는 것 아닐까
Car 타입 객체 / Animal 타입 객체 등등..
자 그럼 그 다음에 static은 뭐였지??
static은 정적인 / 고정의 이런 뜻들이 있다.
나도 궁금해서 static에 대해서 공부를 좀 해볼 예정이지만, 간단하게 알고있는 내용은
static 멤버들은 프로그램의 실행과 동시에 메모리에 올라간다는 것이다.
그래서 객체가 생성되기 전부터 이미 존재하고 있고, 객체는 그들(static멤버)을 공유하고 있다.
그 외의 인스턴스 멤버들 ( static이 붙지 않은 것들 )은 해당 클래스의 객체가 생성될 때
메모리에 올라간다. 그리고 객체가 2개면 해당 멤버들도 객체마다 하나씩 가지고 있다.
나중에 static에 대해 공부흔적을 남길건데 그 때 링크를 타고 들어와주길 바란다.
아직 아니다 ( 게시글만 만들어놓고 내용은 없다. 해당 내용을 채우면 난 이 메세지를 지울거다. )
2022.11.28 - [JAVA공부] - [JAVA] static이 뭐지
[JAVA] static이 뭐지
간단히 말하면, static이 붙어있으면, 해당 클래스로 만드는 모든 객체가 공유한다는 것이다. static이 붙은 필드는 클래스가 만들어지면서 바로 생성되는 것이다. static이 붙지 않은 필드는 객체가
dev-dbdb1114.tistory.com
어쨌든 그렇다면, 내부 클래스를 static으로 선언하고 non-static으로 선언하고의 차이는 뭘까
간단하게 생각하면,
해당 클래스를 공유하는 것이 효율적이라면 static으로 선언하고,
해당 클래스를 각각의 객체들이 사용해야한다면 non-static으로 선언할 것이다.
그래서 보통 정적 이너클래스의 경우 private 액세스 지정자를 사용한다.
왜냐하면 어차피 모두 공유되어 내부에서만 사용할 것이기 때문이다.
해당 코드가 아래와 같다.
class Car {
CarName name;
String color;
Car (String aModel, int aYear, String aColor){
name = new CarName(aModel, aYear);
color = aColor;
}
static private class CarName{
String model;
int year;
CarName(String aModel, int aYear){
model = aModel;
year = aYear;
}
}
public void printCarInform () {
System.out.println(name.model );
System.out.println(name.year );
System.out.println(color );
}
}
public class Date01 {
public static void main(String[] args) {
Car pride = new Car("프라이드", 2005, "파랑");
pride.printCarInform();
}
}
해당 경우에 Car라는 객체의 모델과 연식을 내부 클래스로 선언하여서 해당 타입의 변수를 미리 만들어 놓고, 생성자를 통해 바로 객체를 생성할 수 있게끔 하였다. 이렇게 생각해보면 Car라는 하나의 클래스 안에 100가지의 속성이 들어간다고 했을 때 해당 필드를 모두 선언하는 것이 아니라 분류하여 class별로 묶어서 선언해줄 수 있는 이점이 생긴다.
반대로 비정적 innerClass의 경우는 어떨까?
일단 선언 방식은 당연히 정적 이너 클래스에서 static을 뗀 것이다. 코드로 살펴보자면,
정적 이너클래스 두 개와 비정적 이너클래스 한 가지를 두었는데, 개인적인 생각으로 비정적 이너클래스라고 한다면,
사용법에 대해서는 사실 의문이 많이 든다. 일단 그것은 차치하고, static 내부클래스는 private으로 많이 선언한다는 사실을 배웠으니
private이 아닌 바로바로 불러올 수 있는 클래스로 선언을 해두었다. 대신 비정적 클래스는 객체 생성 방식이 좀 독특하다.
맨 아래에 나온 것처럼 Car.클래스명 객체명 = Car타입 객체.new 클래스명() 이런 식으로 사용한다.
class Car {
CarName name;
CarSpec spec;
PrintCarInfo carInfo;
String color;
Car (String aModel, int aYear, String aColor, int km, int cc){
name = new CarName(aModel, aYear);
spec = new CarSpec(km,cc);
carInfo = new PrintCarInfo();
color = aColor;
}
static private class CarName{
String model;
int year;
CarName(String aModel, int aYear){
model = aModel;
year = aYear;
}
}
static private class CarSpec{
int km;
int cc;
CarSpec(int km, int cc){
this.km = km;
this.cc = cc;
}
}
class PrintCarInfo {
public void printCarName () {
System.out.println(name.model );
System.out.println(name.year );
}
public void printCarSpec () {
System.out.println(spec.cc);
System.out.println(spec.km);
}
}
}
public class Date01 {
public static void main(String[] args) {
Car pride = new Car("프라이드", 2005, "파랑",120,2000);
pride.carInfo.printCarName();
pride.carInfo.printCarSpec();
Car.PrintCarInfo carInfo = pride.new PrintCarInfo();
}
}
아래는 내가 비정적 클래스와 정적 클래스의 차이를 좀 더 깊이있게 알고싶어서 방문한 블로그이다.
비전공자인 내게 어렵지만 같이 본다면 좀 유의미하겠다 싶어서 가져왔다.
https://tecoble.techcourse.co.kr/post/2020-11-05-nested-class/
'프로그래밍 > JAVA' 카테고리의 다른 글
| [JAVA] 가비지컬렉터2 - 동작방식 (0) | 2022.12.08 |
|---|---|
| [JAVA] 가비지컬렉터 - Heap 영역 (0) | 2022.12.08 |
| [JAVA] static이 뭐지 (0) | 2022.11.28 |
| [JAVA] 생성자에 관한 이야기1 (0) | 2022.11.28 |
| [JAVA] 액세스 지정자 (0) | 2022.11.28 |