티스토리 뷰

데이터의 기본형 이외의 중요한 참조형 타입(레퍼런스타입)에 대해 알아보겠다.

 

객체지향언어의 java 는 객체를 생성하기위한 언어라고 생각한다.

 

java코드에서 생성자를 생성할때

 

Project project = new Project();

 

위에 코드처럼 new 를 쓴다는건 메모리에 할당을 하겠다는것인데

 

이때 메모리중 stack 의 영영과 heap 의 영역에 어떻게 저장이되는지 알아야한다.

 

project 의 변수를 객체변수,참조변수라고 부른다.

 

new Project()는 참조값으로 생각을하고,

 

key 와 value 처럼 참조변수 projectProject 의 값에 접근하려면

 

주소가 아닌 해시코드를 통해 접근할수있다.

 

인스턴스화 될때 (생성자를만들때)

 

Projectheap영역에 저장되면서 hash코드project 참조변수에게 준다

 

poject참조변수는 stack영역에 저장되어서Project 에서 준 hash코드를 통해 참조값에 접근한다.

 

참조형 레퍼런스타입 (클래스,배열)  // 데이터 기본형 리터럴 (정수숫자형,논리형,문자형) 이있다.

 

레퍼런스타입 --------------------------------------------------------------

(배열타입)

String[] a = String[5] ;  

=> 0으로 채워진 크키가 5인 문자열 배열

 

(클래스타입)

String a = "임꺽정" ;

클래스형에서도 String 클래스는 조금 특별하다 이 클래스는 참조형에 속하면서도 기본적인 사용방법은 기본형 처럼

사용하면된다 . 그리고 불변하는immutable 객체입니다. String 클래스에는 값을 변경해주는 메소드들이 존재하지만 해당 메소드를 통해 데이터를 바꾼다 해도 새로운 String 클래스 객체를 만들어낸다 (새로운 hashCode 를 생성 하고 JVM 에서 사용되지않지않는 hashCode 를 없앤다.)

일반적으로 기본형 비교는 == 연산자 (비교연산자)를 사용하지만

String객체간의 비교는 .equals() 메소드를 사용해야 합니다.

 

 

a 에는 임꺽정 값이 들어있다라기보다는 임꺽정이라는 참조값 의 hashcode 를 갖고있다고 생각하자.

System.out.print( a.hashCode() );  정수형태로 hashcode 가들어있는걸 확인할수있다. 객체타입

리터럴 처럼 단순히 값 자체를 의미하는것과는 다르다.

-------------------------------------------------------------------------------------------------------------------

 

 

 

 

리터럴타입 ------------------------------------------------------------------

자바에서 기본 자료형은 반드시 사용하기 전에 선언되어야 합니다.

OS에 따라 자료형의 길이가 변하지 않습니다.

비객체 타입입니다. 따라서 null 값을 가질 수 없습니다.

 

byte

short

int

long

float

double

char

boolean

 

int a = 10;

float b = 10.5f;

double c = 100.3;

boolean d = true;

char f = 'A';

 

수치형, 논리형, 문자형 이 이에 해당된다.

a = 10 값 자체를 의미하기에 a.hashCode() 를 사용하여 hashCode 를 확인할수없다.

 

 

---------------------------------------------------------------------------------------------------------------------