Wanna be Brilliant Full-Stack Developer

2/15 JAVA 클래스 자료형(Beans) 개념 잡기! 본문

Some Memos/Java

2/15 JAVA 클래스 자료형(Beans) 개념 잡기!

Flashpacker 2022. 2. 16. 00:36


자료형  

int  (정수)  4바이트 - 32비트                20 은 int 

double  (실수) 8바이트 - 64비트          10.8은 더블

char  (문자) 2바이트 - 16비트               'A" 는 char

boolean (참, 거짓)  1비트                    true 는 boolean 

 

20도 저장하고 싶고 'A'도 저장하고 싶은데 이 두가지를 저장할 수 있는 타입 있는가? 

이 Int와 Char 두가지를 저장할 수 있는 타입은 없다. \

둘다 타입이 다르다. int 이면서 char 을 한번에 저장할 수 있는 타입을 배울것인데

그것이 클래스 자료형이다. 

package ch01;

// MyVar은 클래스 자료형이다. 클래스 자료형은 개발자가 만드는 커스텀 자료형! 
class MyVar {
	int n1 = 10;
	char c1 = 'A';
}


public class VarEx03 {

	public static void main(String[] args) {
		

	}

}

이것을 보면 자바의 첫번쨰 규칙  모든 코드는 클래스 내부에 존재해야한다 에 벗어나는 것일까? 

MyVar은 클래스 밖에 있는거 아닌가 ? 맞습니다. 하지만 MyVar 자체가 클래스라서 상관없다.

MyVar은 클레스 자료형인데 없는 자료형을 개발자가 만드는 커스텀 자료형이라고 보시면 됩니다.

정확한 말로는 여러가지 데이터를 가지고 있는 클래스를 Beans 라고 부릅니다. 

어떤 클래스가 여러가지 데이터를 가지고 있으면 Beans

 

package ch01;

// MyVar은 클래스 자료형이다. 클래스 자료형은 개발자가 만드는 커스텀 자료형! 
// 여러가지 데이터를 가지고 있는 클래스를 Beans 라고 부름.
class MyVar {
	int n1 = 10;
	char c1 = 'A';
}


public class VarEx03 {

	public static void main(String[] args) {
		System.out.println(n1);

	}

}

main 함수는 오류가 난다 왜냐하면 n1변수는 VarEx03클래스 안에 들어가있지 않기 떄문에 

그래서 n1을부르기위한 방법이 있는데 

public class VarEx03 {

	public static void main(String[] args) {
		int n1 = 10;
		System.out.println(n1);

	}

}
class MyVar {
	static int n1 = 10;
	static char c1 = 'A';
}


public class VarEx03 {

	public static void main(String[] args) {
		int n1 = 10;
		System.out.println(n1);

	}

}

여기서 보는 것처럼 Beans 클래스에 static 영역에 다 넣으면 또 사용할수 있다는데 설명은 그림을 통해 해보겠다

 

static , heap , stack 공간 

JVM이 저 파일을 들고와서 실행할때 static이라 적혀 있는것이 총 3개이다.

그러면 메모리 static 공간에 두가지로 구분이 되는데 클래스별로 구분이 된다.

VarEx03 이라는 static 공간과 Myvar이라는 공간으로 나뉘어진다.  

실행이 될떄 VarEx03에 있는 main 이 먼저 실행시킬때 main 공간이 열릴때 stack 도 열리는데 stack에는 종류별로 열린다.

지금 열리는 stack의 이름은 main밖에 없다. 13번에서 15번 라인이 열린다. 

안에 저장된것이 아무것도 없다. 

package ch01;

// MyVar은 클래스 자료형이다. 클래스 자료형은 개발자가 만드는 커스텀 자료형! 
// 여러가지 데이터를 가지고 있는 클래스를 Beans 라고 부름.
class MyVar {
	static int n1 = 10;
	static char c1 = 'A';
}


public class VarEx03 {

	public static void main(String[] args) {
		int n1 = 10;
		System.out.println(MyVar.n1);
		System.out.println(MyVar.c1);

	}

}

System.out.println(MyVar.n1);   ( . ) 은 연결 연산자 , 주소를 찾아갈떄 쓰이는 연결 연산자 . 이라는 연결 연산자를 통해 찾아낸다. 

여기서 MyVar이라는건 커스텀 자료형 Beans라고 불린다. 마지막으로 VarEx03클래스안에 static 함수가 또 생기면 어떻게 출력시킬수 있을까? 

Static int num = 500;을 찾을때는 Static이 하나 더생긴건데 VarEx03이 들고 있는거기 때문에 

Static을 메모리에 이어서 띄었을것이다. 

main이라는 입장에서 보면 같은(VarEx03)공간 안에 있기 때문에 이때는 이름을 생략할 수도 있다.

엄밀히 따지면 이름을 적어주는것이 좋다.