java 메모리 위주로 개념 정리!

박경현·2023년 3월 13일

java라는 언어는 대학교 다니면서 전공 필수여서 배웠지만
그때는 수업이라 그런지 귀찮아서 ㅋㅋ 제대로 공부 안한거 같다..(좀 할걸)

그래서 이왕 spring으로 백엔드를 해보고 있으니 제대로 정리해보려고 한다!

이 사진을 보면 어떻게 영역이 나뉘는지 대략 알 수 있다
RAM이 16기가 정도라고 한다면 => 이걸 전부 자바가 쓰는게 아니다!!

운영체제가 허용해준 메모리를 나눠서 사용!

메소드에 상수, 정적필드 등의 자바 코드가 저장 , 바이트 코드가 저장!
힙은 객체가 생성되는 영역, 객체들이 저장!
지역 변수는 - 스택

참조 영역()

기본적으로 비교 연산자인 == != 는 값을 비교한다

그런데 참조 타입에서는 이걸 사용하면 객체의 번지를 비교!(즉 서로의 주소를 비교한다)

String refVar1;
String refVar2;
refVar1 == refVar2; //false가 나옴! 
// String은 객체여서 ==를 하게 되면 주소를 비교한다!

// 배열도 참조 타입이다!

arr1= new int[]{1,2,3}; // 배열을 heap에 생성!, heap에 생성한 번지를 arr1에 저장!!

null과 NullPointerException

참조타입변수는 아직 변수를 저장하고 있지 않다는 뜻 -> null
String refVar1 = null; //stack에 영역을 생성했지만 참조하는 객체가 없다!

NullPointerException 뜨는 경우 - > null인데 참조해버리는경우!

int [] intArray = null;
intArray[0] = 3; //NullPointerException

String, 배열은 객체이고, int,boolean,float,double,char 등은 값이다!

stack 과 heap 에 들어가는 것들!

String str = "abc";

이러면 heap에는 "abc" 즉 객체가!

stack에는 str이라는 이름이!! => 즉 heap에서 "abc"의 주소를 가리킴!

자바는 메모리에 직접 접근해서 사용 안하는 메모리 처리 못함!
대신에 null처럼 heap을 참조하지 않게 한다면 garbage Collector가 메모리에서 없애줌!

String hobby = “여행”;
hobby = “영화”; //이러면 heap의 다른 부분을 참조하기 때문에 “여행”부분은 쓰레기 객체가 됨!

String kind1 = “자동차”;
String kind2 = kind1;
kind1 = null; // 이렇게 해도 kind2는 여전히 “자동차”를 참조하고 있어서!

문자열 타입 - 코테 준비에도 도움되는 내용!

문자열 비교 - new를 써야 객체가 생성!

String name1 = “홍길동”;
String name2 = “홍길동”; // 이렇게 하면 참조 값이 같다!!

String name1 = new String(“홍길동”);
String name2 = new String(“홍길동”); // data는 같지만 주소가 다르다!

new는 새로운 객체를 만드는 객체 생성 연산자!

boolen result = str1.equals(str2); //이러면 내부 문자열인 값만 비교!!

문자열 조작 및 대체, 잘라내기, 찾기와 분리!

문자열 조작

String subject ="자바프로그래밍";
char charValue = subject.charAt(3); // '로' 가 나옴!

자바에서 문자열은 불변이다!! => 중요!!

자바에서 문자열은 불변! -> 한번 만들어지면 원본은 바꿀수없다!!
대신 복사해서 새로운 객체를 만들어서 newStr에 대입!!

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글