본문 바로가기

공부/JAVA

[JAVA STUDY] DAY3. Memory Reference / 배열 / 확장 for / Call / enum

728x90

DAY3. 키워드

  1. Memory Reference
  2. 배열
  3. 확장for
  4. Call by Value/Reference
  5. enum
  • 문자열 > 숫자 : Interger.parseInt(String s);

1-1. 데이터 타입

데이터 타입

1-2. 변수의 메모리 사용

  • 기본 타입 변수 (정수, 실수, 논리) : 실제 값을 변수 안에 저장
  • 참조 타입 변수 (배열, 열거, 클래스, 인터페이스) : 주소를 통해 객체 참조

1-3. JVM이 사용하는 메모리 영역

  • 메소드 영역
    • JVM 시작할 때 생성
    • 로딩된 클래스 바이트 코드 내용을 분석 후 저장
    • 모든 스레드가 공유
  • 힙 영역
    • JVM 시작할 때 생성
    • 객체/배열 저장
    • 사용되지 않은 객체는 Garbage Collector가 자동 제거
  • JVM 스택
    • 스레드 별 생성
    • 메소드(클래스 내 함수) 호출할 때마다 Frame을 스택에 추가 (push)
    • 메소드 종료하면 Frame 제거 (pop)

2-1. 배열

배열 선언 방법

  • 배열 생성 시 개수는 필수
  • 값을 주지 않았다면 자동으로 초기화 된다.
  • 자동 초기화를 하지 않았다면 개수를 쓰면 안된다.
String[] arr = new String[5];
String[] arr2 = new String[] {"java", "sql", "html5", "css3", "javascript"};
String[] arr3 = {"java", "sql", "html5", "css3", "javascript"};
String[] arr4;
arr4 = new String[] {"java", "sql", "html5", "css3", "javascript"};
String[] arr5;
// 불가능 >> arr5 = {"java", "sql", "html5", "css3", "javascript"};
  • 배열 출력 : System.out.println(Arrays.toString(배열이름));

2-1. 타입 별 항목의 기본값

 

2-3. 배열의 길이

//배열변수.length;

int[] intArray = {10, 20, 30};
int num = intArray.length;
  • 배열의 길이는 읽기 전용으로 대입이 불가능하다
  • intArray.length = 10 (X)

2-4. 다차원 배열

private static void method2() {
    String[][] arr;
    arr = new String[3][]; 

    for(int i=0; i<arr.length; i++) {
        arr[i] = new String[i+4];
        for(int j=0; j<arr[i].length; j++) {
            System.out.print(arr[i][j] + " ");
        }
        System.out.println();
    }
}

private static void method1() {
    int[][] arr;
    int arr2[][];
    int[] arr3[];

    arr = new int[2][3];
    arr2 = new int[2][]; //앞 배열의 개수는 필수
    arr2[0] = new int[3];
    arr2[1] = new int[4];

    for(int row=0; row<arr.length; row++) {
        for(int col=0; col<arr[row].length; col++) {
            System.out.print(arr[row][col] + " ");
        }
        System.out.println();
    }
}

2-5. 배열의 복사

// 대입연산자로 전체 배열 복사 불가
private static void method3() {
    String[][] arr = new String[][] {{"자바","sql","web"}, {"html5","css3"},{"A","B","C","D"}};
    for(int row=0; row<arr.length; row++) {
        for(int col=0; col<arr[row].length; col++) {
            System.out.print(arr[row][col] + " ");
        }
        System.out.println();
    }
    //주소를 넣는다. 같은 주소를 참조한다.
    String[][] arr2 = arr; //복사가 아니다.
    arr2[0][0] = "JAVA";
    System.out.println(arr2[0][0]); //JAVA
    System.out.println(arr[0][0]); //JAVA
}
  • 대입 연산자는 주소를 넣는것으로 같은 주소를 참조하게 되어 복사가 되지 않는다.

배열 복사 방법

  • for문 이용
  • System.arrayCopy() 메소드 이용
  • Arrays 클래스 이용

for문 이용 배열 복사
System.arrayCopy() 메소드 이용 배열 복사
Array 클래스 이용 배열 복사

 

3. 확장 for

String[] arr;
arr = new String[] {"java", "sql", "html5", "css3", "javascript"};

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

//확장 for, 향상된 for
for(String s:arr) {
    System.out.println(s);
}

 

4. Call by Value / Reference

  • Call by Value
    • 값에 의한 호출
    • 변수의 값을 복사하여 함수의 매개변수로 전달
    • 전달 된 값은 복사 된 값이기에 변경해도 외부에서 그 값은 변경되지 않음
  • Call by Reference
    • 주소에 의한 호출
    • 변수를 참조할 수 있는 주소값을 함수의 매개변수로 전달
    • 전달 된 값을 변경 할 시 외부에서도 값이 변경 됨

 

5-1. 열거 타입

  • 한정된 값만을 갖는 데이터 타입

5-2. 열거 객체의 메소드

 

728x90
반응형