본문 바로가기
공부기록/Java

4월 10일 (2) Java - 참조 변수, 배열

by project100 2023. 4. 10.

참조(Reference) p144 -147

자바 프로그램의 실행 시 사용하는 메모리 영역의 구성

자바는 메모리 영역을 크게 Method영역, Call stack영역, Heap 영역으로 분할하여 사용

 

Method 영역 : class를 배치하는 영역(설계도 책상)

여기서 만들어지는 변수를 클래스(스태틱) 변수라고 함

 

heap 영역 : 생성한 Instance(인스턴스)를 배치하는 영역, 인스턴스가 배치되고 동작하는 공간

여기에 만들어지는 변수를 인스턴스 변수라고 함

 

Call Stack 영역 : 호출되는 메소드가 위치하는 영역, 기계어로 번역된 메서드(함수) 코드가 실행되는 영역

여기에 만들어지는 변수를 지역local 변수라고 함.

 

p149

null(널) : 참조 변수에 값(인스턴스의 주소)이 저장되지 않은 상태, 널로 초기화한다.

참조 변수에 주소가 저장되지 않은 인스턴스 : 쓰레기(Garbage)

Garbage Collector : 쓰레기 인스턴스를 수거하는 장치

자바는 G.C를 자동으로 제공하지만, 일부 처리되지 않는 쓰레기도 있다.

  

NullPointerException

변수가 null인 상태에서 참조변수를 사용하려고 할 때 발생하는 예외

 

스택(Stack) 

자료구조(Data Structure)의 하나로 일명 막힌 항아리 구조의 자료공간

밑에서부터 차곡차곡 쌓는 형태로 자료를 관리한다. 

비우려면 반드시 위에서부터 자료를 제거해야 한다. 

Last In First Out(LIFO) <또는 First In Last Out(FILO)>

 

참조형 heap영역에 저장

배열(Array)

변수 - 배열 - 객체 

동일한 자료형의 변수 묶음

크가가 반드시 지정되어야 한다. 한번 크기가 정해지면 크기변경이 불가!

배열을 선언(생성)할 때만 크기를 지정할 수 있음

 

자료의 선언)

자료형 배열명[] = new 자료형[크기];

=> 크기만 지정하고 배열에 값을 넣지 않음.

이때 모든 배열에는 0에 해당하는 값이 저장됨. 

 

p 172

정수 : 0, 실수 : 0.0, 참조형 : null.

자료형 배열명[] = new 자료형[크기] {v1, v2, v3, ......., vn};

자료형 배열명[] = {v1, v2, v3, ......., vn};(약식) //데이터의 값만큼 크기 지정

=> 선언과 값 입력(초기화)를 동시에, 입력(작성)된 값의 개수만큼 크기지정

import java.util.Scanner;

public class ArrayClass {
    public static void main(String[] args) {
        // 배열 선언 정수
        int intArray[];
        // 배열 생성
        intArray = new int[5];

        int iArray[] = new int[5];

        for(int i = 0; i < 5; i++){
            System.out.println(intArray[i]);
        }

        boolean bArr[] = new boolean[5];
        for(int j = 0; j < 5; j++){
            System.out.println(bArr[j]); // false = 0
        }

        // 배열의 순번(번지수)은 0으로 시작
        intArray[0] = 10;
        System.out.println(intArray[0]);
        // 마지막 순번은 크기 - 1
        intArray[4] = 50;
        System.out.println(intArray[4]);

        // 학생 수 만큼 성적을 저장하는 배열
        Scanner scan = new Scanner(System.in);
        System.out.print("학생 수 : ");
        int num = scan.nextInt();

        // 배열 생성
        int score[] = new int[num];

        // score.length = num
        for(int k =0; k < score.length; k++){
            System.out.print((k + 1) + "번 학생 점수 : " );
            score[k] = scan.nextInt();
        }
        //총점 구하는 변수
        int sum = 0;

        // 향상된 for문, forEach, 이 형식의 for문은 읽기 전용임
        for(int s : score){
            sum += s;
        }
        System.out.println("총점 : " + sum);

      }
}