728x90
DAY3. 키워드
- Memory Reference
- 배열
- 확장for
- Call by Value/Reference
- 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 클래스 이용
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
반응형
'공부 > JAVA' 카테고리의 다른 글
[JAVA STUDY] DAY5. Singleton / final / Access Modifier (0) | 2021.02.21 |
---|---|
[JAVA STUDY] DAY4. 객체 / 클래스 / 생성자 / 메소드 / 인스턴스 멤버 / this / 접근제한자 / static (0) | 2021.02.18 |
[JAVA STUDY] DAY2. 조건문 / Random함수 / 반복문 / Scanner (0) | 2021.02.16 |
[JAVA STUDY] DAY 1. 주석 / 변수 / 데이터타입 / 형변환 / 연산자 (0) | 2021.02.15 |