728x90
반응형
1. 객체 참조 변수 - Memory
- 객체 참조값을 가지고 객체를 핸들링
- 다른 객체 참조값을 지정하면 새로운 인스턴스를 참조하게 된다.
- 먼저 null로 초기화 후, 새로운 인스턴스를 참조하도록 하는걸 권장한다.
- 하나의 인스턴스를 여러개의 참조변수가 참조할 수 있지만
하나의 참조변수가 여러개의 인스턴스를 참조할 수는 없다. - 객체의 초기화와 메모리 할당 순서
- 선언된 상태에서는 메모리의 reference를 위한 공간만을 할당함
(스택 영역) - new 연산자를 사용해야만 MyDate를 위한 공간이 할당됨
(힙 영역) - 멤버들의 명시적인 초기화
- 생성자를 실행
- 변수에 Reference값 할당
- 선언된 상태에서는 메모리의 reference를 위한 공간만을 할당함
- String의 경우에는 String poll에 리터럴 형태로 저장된다.
- 따라서 같은 문자열의 경우 하나의 문자열 객체만을 가리킨다.
- new로 생성할 때만, 새로운 객체를 생성한다.
- C언어로 작성된 네이티브 코드로 동작하고 해시 테이블을 통해 해당 문자열이 존재하면 해당 값을 참조한다.
2. 배열의 정의
- 참조변수를 통해 다루는 같은 타입의 여러 변수를 하나의 묶음으로 다룰 수 있는 객체
- 동적으로 생성되는 객체로, 객체 타입의 변수로 할당된다.
- Object 클래스의 모든 메서드 호출 가능
- 배열안에 포함된 변수는 이름이 없고, 인덱스로 다룬다.
- 배열안의 변수는 컴포넌트라고 부르고, 컴포넌트의 개수를 배열의 길이라고 한다.
3. 배열의 선언과 할당
- 배열은 타입 또는 변수 이름 뒤에 대괄호를 붙여서 선언한다.
- 선언 후 몇 개의 공간을 할당할지 정해줘야 값을 저장할 공간이 생성된다.
- 선언과 할당이 동시에 가능하다.
4. 배열의 활용
- 배열의 길이 : length
- 배열의 예외 : 배열 접근시 int타입의 값으로 해야한다.
- 배열의 접근하기 위한 인덱스가 0보다 작거나 배열의 크기보다 크면 안된다.
- 배열의 복사
- Arrays.copyOf() : 새로운 배열 생성 가능, 전부 복사하거나 복사 대상의 객체를 유지시킬 필요가 없을 때 사용 (더 빠름)
- System.arraycopy() : 복사 길이를 명시해야 하거나, 객체를 유지하고자 할 때 사용
package ch06;
public class ArrayEx01 {
public static void main(String args[]){
int[] widths; // 배열 선언 방식1
//int []widths; // 배열 선언 방식2
//int widths[]; // 배열 선언 방식3
widths = new int[3];//배열 생성
// 선언과 생성
int[] ages = new int[5];
//int[] ages = {20, 15, 33, 42, 19};
// 배열에 값 할당
ages[ 0 ] = 20;
ages[ 1 ] = 15;
ages[ 2 ] = 33;
ages[ 3 ] = 42;
ages[ 4 ] = 19;
// 객체 배열 선언, 생성, 값 할당을 동시에 할 수 있다
Order orders[] = {
new Order(1, "라면"),
new Order(2, "세제"),
new Order(3, "과자")
};
// 특정 배열 index(위치)의 값 출력
System.out.println(ages[0]);
//배열의 길이는 int타입으로만 선언이 가능하다.
//long longLength = 10L;
//long longTypeArray = new long[longLength];
}
}
package ch06;
import java.util.Arrays;
public class ArrayEx02 {
public static void main(String args[]) {
int[] arr1 = new int[10];
int[] arr2 = {100, 95, 80, 70, 60};
char[] chrArr = { 'a', 'b', 'c' };
// 배열에 값 할당
for (int i=0; i < arr1.length ; i++ ) {
arr1[i] = i + 1;
}
// 배열의 값 출력
for(int i=0; i < arr2.length;i++) {
System.out.print(arr2[i] + "\t");
}
System.out.println();
System.out.println("for-each loop 배열 출력");
for(int i:arr1){
System.out.print(i + "\t");
}
System.out.println();
// Arrays.toString는 배열의 내용을 출력하는데 사용한다
System.out.println(Arrays.toString(arr1));
System.out.println(Arrays.toString(arr2));
System.out.println(Arrays.toString(chrArr));
System.out.println();
// 배열 변수는 객체참조변수라서 배열 변수는 배열의 주소값만 보관된다
System.out.println(arr1);
System.out.println(arr2);
System.out.println(chrArr);
}
}
MSA 관련 블로그
- 오늘의 집
- 우아한 형제들
- 카카오
- 네이버
5. 다차원 배열
- 2차원 이상의 배열은 가변적으로 생성할 수 있어 가변 배열이라고도 한다
- 1차원의 배열 크기를 지정하면 자바에서 가변으로 생성하기 때문에 2차원 이상의 배열크기를 지정하지 않아도 선언이 가능하다.
- 선언과 할당 Case 1 :
데이터타입[][] 배열변수명 = new 데이터타입[1차원 length][2차원 length];
예) int[] ages = new int[3][2]; <- 3행 2열의 2차원 배열을 생성 - 선언과 할당 Case 2 :
데이터타입[] 배열변수명 = { 콤마(,) 구분자의 배열 개수만큼 값 할당 };
예)int[][]ages={{10,20}, {30,40}, {50,60}};
package ch06;
public class ArrayEx03 {
public static void main(String args[]) {
// 다차원 배열 => 가변 배열(Jagged Array)
int[][] ages = {
{ 20, 15, 33, 72 },
{ 12, 50 },
{ 57, 20 },
{ 27, 32, 89 },
{ 73, 17 }
};
int sum = 0;
// 이중 For 문
for(int i=0;i < ages.length;i++) {
for(int j=0;j < ages[i].length;j++) {
System.out.printf("score["+i+"]["+j+"]="+ages[i][j]+"\n");
}
}
// For-each Loop 문 (합계)
for (int[] tmp : ages) {
for (int i : tmp) {
sum += i;
}
}
System.out.println("합계 = "+sum);
}
}
package ch06;
public class ArrayEx05 {
public static void main(String args[]) {
// 2차원 배열의 length는 지정 안할 수 있다
int[][] arrVar1 = new int[3][];
// 0번째 배열 인덱스에 2차원 배열을 생성하고 값을 할당한다
arrVar1[0] = new int[2];
arrVar1[0][0] = 1;
arrVar1[0][1] = 2;
// 1번째 배열 인덱스에 2차원 배열을 생성하고 값을 할당한다
arrVar1[1] = new int[5];
arrVar1[1][0] = 3;
arrVar1[1][1] = 4;
arrVar1[1][2] = 5;
arrVar1[1][3] = 6;
arrVar1[1][4] = 7;
int[][] arrVar2 = new int[2][];
// 2차원 배열 생성 및 값 할당을 동시에 처리
arrVar2[0] = new int[]{3, 4, 5};
arrVar2[1] = new int[]{6, 7, 8};
int[][] arrVar3 = new int[][]{
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8 }
};
System.out.println(arrVar1.length);
// 2차원 배열의 length 값 출력
System.out.println(arrVar1[0].length);
System.out.println(arrVar2[1].length);
System.out.println(arrVar3[2].length);
}
}
package ch06;
public class ArrayEx06 {
public static void main(String args[]) {
// 가변 배열 생성
int arr[][] = new int[3][];
arr[0] = new int[3];
arr[1] = new int[4];
arr[2] = new int[2];
// 가변 배열 초기화
int count = 0;
for (int i=0; i<arr.length; i++)
for(int j=0; j<arr[i].length; j++)
arr[i][j] = count++;
// 가변 배열 값 출력
for (int i=0; i<arr.length; i++){
for (int j=0; j<arr[i].length; j++){
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
}
geteClass(), getName()
package ch06;
/**
* 배열 클래스 명
*/
public class ArrayEx07 {
public static void main(String args[]) {
int iarr[] ={4,4,5};
byte barr[] ={4,4,5};
short sarr[] ={4,4,5};
// Java 배열의 클래스 이름 얻기
Class i=iarr.getClass();
Class b=barr.getClass();
Class s=sarr.getClass();
String name1=i.getName();
String name2=b.getName();
String name3=s.getName();
// 배열 객체의 경우 객체의 getClass().getName()를 통해 클래스명을 얻을 수 있는 프록시 클래스가 생성된다
// 배열의 클래 이름의 타입과 동일하다
System.out.println(name1); // [I
System.out.println(name2); // [B
System.out.println(name3); // [S
}
}
1. 홀수 짝수 출력
package ch06;
/**
* 배열의 홀수 짝수 출력하는 예제
*/
public class OddEvenInArray {
public static void main(String args[]){
int a[]={1,2,5,6,3,2};
System.out.println("홀수 :");
for(int i=0;i<a.length;i++){
if(a[i]%2!=0){
System.out.println(a[i]);
}
}
System.out.println("짝수 :");
for(int i=0;i<a.length;i++){
if(a[i]%2==0){
System.out.println(a[i]);
}
}
}
}
2. 중복 확인
package ch06;
/**
* 배열의 중복 element 찾아 출력하기
*/
public class DuplicateArray {
public static void main(String[] args) {
int [] arr = new int [] {1, 2, 3, 4, 2, 7, 8, 8, 3};
System.out.println("중복 elements : ");
int n=arr.length;
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(arr[i]==arr[j]) System.out.println(arr[i]);
}
}
// 구현해보기 : 이중 for문 사용
/*
출력결과)
중복 elements :
2
3
8
*/
}
}
728x90
반응형
'Server Programming > BackEnd Project' 카테고리의 다른 글
19일차 - TIL (0) | 2022.12.30 |
---|---|
18일차 - TIL (0) | 2022.12.29 |
17일차 - TIL (0) | 2022.12.28 |
17일차 - 자바 (5) 객체지향의 이해, 객체와 배열 (0) | 2022.12.28 |
16일차 - TIL (0) | 2022.12.27 |