JAVA-참조타입

Mkim4·2023년 12월 12일

배열과 enum 타입은 내부적 동작 원리이다.

기본타입 vs 참조타입

기본타입으로 선언된 변수는 값 자체를 저장, 참조타입은 객체가 생성된 메모리 번지를 저장.

클래스

데이터를 저장하는 타입 (데이터의 공간) 클래스는 단일상속이.
단일상속의 장점은 데이터에 대한 추적이 용이하다.
extend, 클래스는 한번 만들면 잘 바꿀 수가 없음.

인터페이스

기능에 대한 확장성(다형성)을 제공하기 위한 데이터 타입
(상수(고정값)을 기반으로 저장, 자바는 단일상속을 하고 다중상속이 되지 않기 때문) implements, 데이터를 상속받아서 기능적인 것만 수정해줄 수 있음,
객체지향의 꽃이라고 부름,
인터페이스는 데이터를 hidden 처리하고 어떻게 동작하는지 안을 뜯어볼 수가 없음.

인스턴스와 클래스의 차이점?

인스턴스는 클래스가 실체화된 상태를 인스턴스라고 한다. 메모리를 할당했다는 의미.
객체라는 것은 공간이 할당된 상태를 의미.
new 라는 키워드는 인스턴스를 만들어낼때 사용

메소드(Method) 영역

바이트코드 파일을 읽은 내용이 저장되는 영역
1. 바이트코드(클래스 파일)을 읽어 저장하는 영역
2. 클래스별로 상수, 정적필드, 메소드 코드, 생성자 코드 저장

힙(Heap) 영역

(동적 메모리 영역):
1. 객체(인스턴스)가 생성되는 영역. (객체의 데이터 저장)
2. 객체의 번지는 메소드 영역과 스택 영역의 상수와 변수에서 참조
컨테이너, 보관소라고 생각하면 됨.
선언만으로 힙에 공간이 할당이 되지 않고 실제 값이 저장될 때 공간이 생김.

스택(Stack) 영역

메소드를 호출할 때마다 생성되는 프레임이 저장되는 영역 main메소드, child메소드에서 오른쪽에서 왼쪽 순으로 pop되어서 사라짐.
1.메소드 를 호출할때마다 생성되는 Frame(프레임)이 저장되는 영역
2.메소드 호출이 끝나면 해당 프레임은 삭제된다(pop)
3.프레임 내부에는 로컬변수 스택이 생성되어 운영된다.
4.로컬변수 스택에서 기본타입변수 와 참조타입 변수가 생성되고 제거

메소드 영역

하나의 스레드가 종료되는 순간까지 메소드 영역이 유지되고 정적 필드(static area) 라고도 한다. main 메소드도 public static void main 이유도 static을 사용해야만 호출할 수 있다.
클래스를 실행했을때 jvm은 각 클래스가 할당되는 메모리 공간을 만든다.
자바 파일을 클래스 단위로 컴파일해서 바이트 코드로 읽어진다. 저장위치와 클래스 이름으로 구분한다.
처음에는 로더에 의해서 전체 코드가 읽어지면서 코드와 static 영역을 보관하는 메소드 영역(method area) 가 있다. 수행하면서 필요로 하는 순서대로 스택영역이 있다. 참조변수가 나오면 독립된 공간에 힙 영역에 저장.

String 타입

String name;
name = "홍길동";
String hobby = "여행";
데이터가 다르기 때문에 name과 hobby의 주소값이 다름
String형태의 name이라는 reference 타입 객체를 선언함
힙에서 스트링 메소드들을 가지고 있음.

profile
귀요미 개발자

0개의 댓글