극동대학교\AI컴퓨터공학과\JAVA/프로그래머스 코딩 기초 트레이닝

[프로그래머스, LV.0] 카운트 다운 -> 배열 생성 new 연산자

sundori 2023. 4. 15. 18:43

목차

     

    #1 카운트 다운

    #2 코드 및 알고리즘

    class Solution {
        public int[] solution(int start, int end) {
            int[] answer = new int[start - end + 1]; // 배열 선언
            int len = start - end + 1; // 배열의 총 길이.
            for(int i = 0; i < len; i++)
                answer[i] = start--;
            return answer;
        }
    }

    이번 문제는  주어진 start 카운트 다운 하는 것이다. 

    #3 배열 선언

    배열을 사용하기 위해서는 우선 배열 변수를 선언해야 한다. 기존에 내가 배웠던 C에서의 배열 선언과 다른 점이 있다.

    그렇다고  무조건 자료형 뒤에 대괄호를 붙여야하는 건 아니다. C언어 스타일로도 가능하다.

    // 자바 스타일
    int[] intArr;
    float[] floatArr;
    char[] charArr;
    String[] stringArr;
    // c 스타일
    int intArr[];
    float floatArr[];
    char charArr[];
    String stringArr[];

    배열 변수는 참조 변수에 속하기 때문에 힙 영역에 생성이 되고 배열 변수는 힙 영역의 배열 객체를 참조한다.

    #4 배열 생성 new 연산자

    배열 객체를 생성을 이용하였는데 배열 객체를 생성하는 방법에는 new 연산자를 이용하는 것이다.

    물론 값의 목록이 미리 주어졌다면 밑에 코드처럼 생성이 가능하다.

    // 타입[] 변수 = {값1, 값2, 값3, 값4};
    int[] intArr = {1, 2, 3, 4, 5};

     

    하지만 위의 문제의 경우 무엇이 주어질지 모르는 상황이다. 따라서 객체를 생성해두기만 하였다. 그러면 new 연산자는 어떻게 사용할까?

    String[] stringArr = new String[n]; // n개의 원소를 담을 수 있는 stringArr 문자열 배열 생성.
    int[] intArr = new int[n]; // n개의 원소를 담을 수 있는 intArr 정수형 배열 생성.

    위의 코드처럼 선언하면 되는 것이다.

    new 연산자로 배열을 처음 생성할 경우 배열은 자동적으로 기본값으로 초기화된다.

    기본 값은 0이며 다음과 같이 new 연산자로 배열 객체를 생성할 수 있다

     

    일반 변수는 스택 영역에 할당이 되지만 new 연산자를 통해 생성된 객체는 클래스 타입의 인스턴스(객체)를 생성하며, 메모리 힙 영역에 데이터를 저장할 공간을 할당받아 그 공간의 참조값을 객체게 반환하여 생성자를 호출한다. 이것이 객체와 변수의 차이이다.

     

    #5 메모리 구조

    그러면 힙 영역은 무엇이며 스택 영역은 무엇일까?

    1. 코드(code) 영역
      :메모리의 코드 영역은 실행할 프로그램의 코드가 저장되는 영역으로 CPU는 코드 영역에 저장된 명령어를 하나씩 가져가며 처리한다.
    2. 데이터(data) 영역
      :메모리의 데이터 영역은 프로그램의 전역 변수와 정적(static) 변수가 저장되는 영역으로 데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 자동으로 소멸된다.
    3. 스택(stack) 영역
      :메모리의 스택 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역으로 스택 영역은 푸시(push) 팝(pop)
      동작으로 데이터를 저장하고 데이터를 출력하며 후입선출(LIFO) 방식에 따라 동작한다.
      스택 영역도 마찬가지로 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다.
    4. 힙(heap) 영역
      :메모리의 힙 영역은 사용자가 직접 관리가 가능한 영역을 말하는데 사용자에 의해 메모리 공간이 동적으로 할당되고 해제가 된다.