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

박경현·2023년 3월 13일
0

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개의 댓글