23년 이전 글/java

Java 배열

1차원 배열

배열은 같은 데이터 타입을 가진 연속된 메모리 공간으로 이루어진 자료구조로 같은 데이터 타입을 가진 여러개의 변수가 필요할 때 사용

//정수 4개를 저장할 수 있는 배열 생성
int[] array = new int[4];

//배열에 값 저장
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
//배열의 인덱스는 0부터 시작, 총 3까지의 인덱스를 가짐

//배열에 저장된 값 쓰기
int value = array1[2];
System.out.println(array[1]);

//선언과 동시에 초기화
int[] array2 = new int[]{1,2,3,4,5};

 

배열의 사용

for 반복문을 이용 배열 사용하기

배열에 접근할 때에는 인덱스를 통해 접근

// 인덱스를 통해 접근
int[] iarray = new int[100];
iarray[0] = 1;
iarray[1] = 2;

//배열에 1부터 100까지 넣기
int[] iarray = new int[100];

//배열의 길이 알아보기
iarray.length

//배열에 1부터 100까지 값넣기
for(int i = 0; i < iarray.length; i++){
	iarray[i] = i + 1;
}

//배열에 저장된 값 모두 더하기
int sum = 0;

for(int i = 0; i < iarray.length; i++){
	sum = sum + iarray[i];
}

System.out.println(sum);

 

2차원 배열

//2차원 배열 생성
int[][] array4 = new int[3][4];

//2차원 배열에 값 저장
array4[0][0] = 10;

//가변크기의 2차원 배열을 생성
int[][] array5 = new int[3][];

array5[0] = new int[1]; 
array5[1] = new int[2];
array5[2] = new int[3];

//선언과 동시에 초기화
int[][] array6 = {{1},{2,3},{4,5,6}}

 

for each

int[] iarr = {10,20,30,40,50};
for(int value:iarr){
	System.out.println(value);
}

 

클래스 선언

자바는 객체를 만들기 위해 클래스를 만들어야 하며, 클래스는 객체를 만들기 위한 일종의 틀

//자동차 객체 생성
public class Car{

}
  • Car.java란 파일을 만듦
  • 저장을 하면 IDE에 의해 컴파일 하여 디스크에 Car.class 파일이 생성
  • 자동차 클래스가 생성되었지만 자동차가 만들어진 것은 아님
//Car객체 생성하기 (자동차 만들기)
public class CarExam{
	public static void main(String args[]){
    	Car c1 = new Car();
        Car c2 = new Car();
    }
}
  • new 연산자는 new 연산자 뒤에 나오는 생성자를 이용해 메모리에 객체를 만듦
  • 메모리에 만들어진 객체를 인스턴스라고 함
  • 이렇게 만들어진 객체를 참조하는 변수가 c1, c2
  • 위 코드가 실행되면 Car라는 객체가 2개 만들어지고 각 객체를 참조하는 c1과 c2변수가 선언

 

참조타입

참조형 타입은 기본형 타입을 제외한 모든 타입으로 배열, 클래스가 참조 타입

//참조형 변수
String str = new String("hello");
  • 메모리에 올라간 인스턴스를 가리키는 변수, 참조하는 변수, 레퍼런스 하는 변수가 str이며, 참조한다는 것은 변수가 인스턴스를 가지고 있는게 아닌, 가리킨다는 의미
  • str이라는 변수에는 메모리의 위치값이 저장되는 것, 하지만 어떤 메모리에 저장되는지는 알 수가 없음. 따라서 str 변수는 String 인스턴스를 참조하는 것.

 

String 클래스

문자열을 표현하는 자바에서 가장 많이 사용하는 클래스

//자바 인스턴스 생성, new 연산자를 이용하지 않고 인스턴스를 만들 때
String str1 = "hello";
String str2 = "hello";
  • "hello"라는 문자열이 메모리 중에서 상수가 저장되는 영역에 저장된다. 상수는 변하지 않는 값을 의미
  • String str2 = "hello"; 이 문장이 실행 될 때 hello라는 문자열 상수는 이미 만들어져 있으므로 str1이 참조하는 인스턴스를 str2도 참조한다
//new 연산자를 이용해서 인스턴스를 만드는 경우
String str3 = new String("hello");
String str4 = new String("hello");
  • new 연산자를 이용하여 인스턴스를 만들면 인스턴스는 무조건 새롭게 만들어짐
  • String str4 = new String("hello"); 이 문장이 실행될 때도 새롭게 만드므로, str3과 str4는 다른 인스턴스를 참조함.
//같은 인스턴스 참조로 결과 true
if(str1 == str2){ 
	System.out.println("str1과 str2는 같은 레퍼런스");
}

//다른 인스턴스 참조로 결과 false
if(str1 == str3){
	System.out.println("str1과 str3는 같은 레퍼런스");
}

//다른 인스턴스 참조로 결과 false
if(str3 == str4){
	System.out.println("str3과 str4는 같은 레퍼런스");
}
  • 참조변수끼리 ==로 비교하면 같은 것을 참조하는지 비교
  • String은 다른 클래스와 다르게 new를 사용하지 않고 사용할 수 있다. 메모리를 아끼려면 String은 new를 사용하지 않고 사용하는게 좋음
  • String은 불변 클래스임. 불면이란 String이 인스턴스가 될 때 가지고 있던 값을 나중에 수정할 수 없음
  • String은 문자열과 관련된 다양한 메소드를 가지고 있음. 메소드를 호출한다 하더라도 String 내부의 값이 변하지 않음
  • String이 가지고 있는 메소드 중 String을 반환하는 메소드는 모두 새로운 String을 생성해서 반환.
String str5 = "hello world";
String str6 = str5.substring(3);
  • substring은 문자열을 자른 결과를 반환하는 메소드로, 해당 코드를 실행해도 str5는 변하지 않음
  • str6은 str5가 가지고 있는 문자열 중 3번째 위치부터 자른 결과 즉 새로운 String을 참조하게 됨
반응형

'23년 이전 글 > java' 카테고리의 다른 글

Java 문법  (0) 2022.07.06
Java, 개발환경 구성  (0) 2022.07.06