코딩/2-JAVA

C0906일차원메모리구조

tree0505 2025. 6. 26. 11:02
반응형
    • C09이차배열

  • C0906일차원메모리구조

  • C0906개념01_메모리구조
package C0906일차원메모리구조;

import java.util.Arrays;

/*
	1. 문서 전체의 코드가 data영역에 로드
	2. main() 메서드 로드 = stack
	3. main() 메서드 내에 있는
		코드를 첫 줄부터 위에서 아래로
		순차적으로 실행하면서 로드
		
		
	[ 데이터 영역을 구분해서 저장]
		 (1) stack(=스택)
		 (2) heap(=힙)
		 (3) static(=스태틱)
		 
	[주소 복사]
		= new  는 값 복사가 아니라 주소 복사가 이루어진다. 
		
		int a= 10; 과 int[] arr = new int[3] 은 완전히 다르다. 
 */

public class C0906개념01_메모리구조 {
	public static void main(String[] args) {
		
		
		int a = 10;	
		int b = 20;

		int[] arr = new int[3];		
		System.out.println(arr);		
		arr[0] = 200;
		System.out.println(Arrays.toString(arr));
		
		
		// 아래 배열도 위와 마찬가지로 new int[3] 이 생략되었을뿐 원리는 똑같다. 
		int[] arr2 = {10, 20, 30};
		
	}
}

  • 메모리 
    • 1. stack 
      • 함수로만 생기는 것 
      • 제일 처음에 main이 실행이 된다. 
        • public static void main(String[] args)
      • 함수 안에 있는 것은 지역변수라고 한다. 
        • int a = 10; 
        • int b = 20; 
        • heap에서 new가 되서 3칸이 생기고 그 다음에. arr이 만들어 진다.
          • arr에도 1000이 들어온다.
          • System.out.println(arr); 출력을 하면 1000이 출력이 된다. 
            • heap에 있는 주소를 출력하는것  
            • 16진수로 표현이 된다. 
        • arr[0] = 200; 
          • arr[0]  뜻이 2개이다. 
          • arr로 가서 [0]여기로 가라. 
          • 2번 가는것 
        • int [ ] arr[2] = {10,20,30}; 
          • arr[2]는 2000이 저장된다. 주소가 저장된다.  
    • 2. heap 
      • 여기는 new만 생기는 것. 
      • new int[3]; 이 먼져 된다. 3칸이 생긴다. 
        • = new는 주소를 저장하는 거다. 
        • 3칸의 1번째의 주소가 1000이면 
        • arr[0] = 200; 
          • 1번 이동. 먼저 new 3칸으로 온다. 
          • 2번 이동. arr[0] 여기로 온다. 
          • arr[0]에 200을 넣어라. 
      • 또 다른 new . int [ ] arr2 = { 10, 20, 30}; 
        • 배열 안에. 10, 20, 30, 
    • 3. 전역 static
      • class,문자열 , string, 주석 
      • 공간이 나눠져 있다. 
      • 핵심! 
        • 처음부터 만들어져서 끝까지 살아있는 메모리이다. 


  • C0906개념02_메모리구조
package C0906일차원메모리구조;

public class C0906개념02_메모리구조 {
	public static void main(String[] args) {
	
		/*
			1. 일반 변수 = 값(정수,실수,문자,boolean)
			2. 주소 변수 = 배열
		 */
		
		int a = 0;
		
		int[] arr = { 87, 100, 24, 11, 79 };
		// int[] arr = new int[5];
		// arr[0] = 87;
		// arr[1] = 100;
		// arr[2] = 24;
		// arr[3] = 11;
		// arr[4] = 79;
		arr[1] = 600;
		
		int[] temp = arr;
	
		temp[1] = 0;		// arr[1] = 0;

		for (int i = 0; i < 5; i++) {
			System.out.print(arr[i] + " ");
		}

		System.out.println();

		for (int i = 0; i < 5; i++) {
			System.out.print(temp[i] + " ");
		}

		System.out.println();
		System.out.println(arr);
		System.out.println(temp);
	
		
		
	}
}

  • 메모리
    • 1. stack
      • main이 시작됨 (함수가 실행) 
      • int a = 0; 
      • int [ ] arr = {87,100,24,11,79}; 
        • 변수가 6개이다. 
          • arr도 변수. 숫자 5개도 변수 . 그래서 6개 
        • heap에 변수 5개가 생긴다. 
        • 주소 1000이 들어온다. 
      • arr[1] = 600;
        • 1번에다가 600을 넣어라.  
        • arr이 주소가 1000이니까. heap으로 가서 
      • int [ ] temp = arr; 
        • =는 복사하라. 
        • 즉 주소를 복사. 1000 
      • temp[1] = 0; 
    • 2. heap
      • int [ ] arr = {87,100,24,11,79}; 의 new가 생긴다. 
        • 빈칸 5개에 숫자가 들어간다. 
        • new의 주소가. arr에 주소가 들어간다. 
        • = new가 생략된것 
      • arr[1] = 600;  600을 넣어라. 
        • arr의 주소인 1000으로 와서 
        • arr[1]에 600을 넣는다. 
      • temp[1] = 0; 
        • 그러면 600이 지워진다. 
    • 3. static 


    • C0906개념03_메모리구조
package C0906일차원메모리구조;

public class C0906개념03_메모리구조 {
	public static void main(String[] args) {
	
		
		// arr1과 arr2 의 값이 같다를 표현해보세요.
		// 아래와 같이 일일히 검사 해야한다.
		int[] arr1 = {10,20,30,40};
		int[] arr2 = {10,20,30,40};
		
		System.out.println(arr1 + " " + arr2);
		if(arr1 == arr2) {
			//같다가 나올것 같지만 안나온다. 
			//주소가 다르기 때문에. 
			
			System.out.println("같다.1");
		}else{
			System.out.println("다르다.1");
		}
		//----------------------------------------
		//같다를 하기 위해서. 내부적으로 
		//하나씩 같을 때마다. 개수를 세야 한다. 
		//그래서 그 개수가 길이와 같으면 그제야 같다가 나온다. 
		int count = 0;
		for (int i = 0; i < arr1.length; i++) {
			if (arr1[i] == arr2[i]) {
				count += 1;
			} else {
				break;
			}
		}
		if (count == arr1.length) {
			System.out.println("같다.2");
		} else {
			System.out.println("다르다.2");
		}
		
	}
}

  • C0906개념04_메모리구조
package C0906일차원메모리구조;

public class C0906개념04_메모리구조 {
	public static void main(String[] args) {
		
		
		int[] arr1 = {10,20,30,40};
		int[] arr2 = {10,20,30,40};
		
		// [문제1] 아래 주석을 풀고 실행했을 때 어떤 값이 나올지 예상하고 주석을 푸시오.
		/*
		if(arr1 == arr2) {
			System.out.println("같다1");
		}else {
			System.out.println("다르다1");
		}
		*/
		//---------------------------------------------------------------
		//주소를 계속 주었기 때문에. 같다가 나온다. 
		
		// [문제2] 아래 주석을 풀고 실행했을 때 어떤 값이 나올지 예상하고 주석을 푸시오.
		int[] arr3 = {10,20,30,40};
		int[] temp = arr3;
		int[] arr4 = temp;
		/*
		if(arr3 == arr4) {
			System.out.println("같다2");
		}else {
			System.out.println("다르다2");
		}
		*/
		
	}
}

 

반응형