정수, 실수, 문자, 논리 리터럴 등 실제 데이터 값을 저장하는 타입이다.
int a = 10;
와 같이 코드를 작성했다면 정수 값이 할당될 수 있는 a라는 이름의 메모리 공간이 JVM 스택 영역에 생성되고, 10이라는 값이 들어간다.
=> 즉, 원시 타입은 메모리 공간의 실제 데이터 값이 저장되어 있다. 한다. 그리고 그 기능을 알맞은 객체로 할당한다.
JVM은 연산할 때 피연산자 스택을 활용한다.
1.13 + 20 + 7
을 계산한다
->20 + 7
을 계산한 결과를 스택에 집어 넣고,
2. 다시27 + 13
을 계산한 결과를 스택에 집어 넣는 방식을 반복한다.
😥 이때 주의할 점 : JVM의 피연산자 스택은 피연산자를 4 Bytes 단위로 저장한다는 것이다.
=> 즉, char나 short와 같이 int보다 작은 자료형의 값을 계산하면 int형으로 자동 형 변환되어 연산이 수행된다.
-> long 타입 관련해서 좀 더 주의사항을 찾아보면 어떨까?
기본 타입을 제외한 타입으로, 객체의 주소를 저장하는 타입이다. 문자열, 배열, 열거형 상수, 클래스, 인터페이스 등이 있다.
Person p = new Person();
이라는 코드를 작성했다면 p라는 이름의 메모리 공간이 스택 영역에 생성되고, 생성된 p의 인스턴스는 힙 영역에 생성된다.
=> 즉, 스택 영역에 생성된 참조 변수 p는 힙 영역에 생성된 p의 인스턴스 주소 값을 가지게 된다.
- 원시타입 : 스택 영역,
- 참조타입 : 스택 영역에 참조 값만 존재 (실제 값은 : 힙)
=> 참조타입은 못해도 2번 이상은 메모리 접근을 해야한다.
-> 것다가 일부 타입 (Double -> double, Integer ->int)은 언박싱 과정까지 거쳐야 함.
- 원시타입 null ❌
-> 값이 없으면 디폴트 값을 반환하기 때문이다. (ex. int은 0, boolean은 false)
멤버 또는 클래스에 사용되어 해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 함
-> 생략이 가능하며 만일 그렇게 되면 default
를 뜻함
: 클래스, 멤버변수 , 메서드, 생성자
private
: 같은 클래스 내에서만 접근 가능default
: 같은 패키지 내에서만 접근 가능protected
: 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근 가능public
: 접근 제한이 전혀 없다.steady-coding님의 글을 참조하였습니다.
88240님의 글을 참조하였습니다.