참조 타입과 참조 변수
자바의 타입은 크게 기본타입과 참조 타입으로 분류됩니다.
참조 타입 - 번지를 통해 객체를 참조
메모리 사용 영역
메모리 영역은 메소드 영역, 힙 영역, JVM 스택으로 구분됩니다.
메소드 영역은 JVM이 시작될 때 생성되는 모든 스레드가 공유하는 영역입니다. 코드에서 사용되는 클래스들을 정적 필드/상수, 메소드 코드, 생성자 코드로 분류하여 저장합니다.
힙 영역은 객체와 배열이 생성되는 영역입니다.(쓰레기 수집기가 따로 있어 제거는 별도로 필요x)
JVM 스택은 메소드를 호출할 때마다 프레임을 추가하고 메소드가 종료되면 해당 프레임을 제거하는 동작을 수행합니다.
*참조 타입 변수는 힙 영역의 객체를 참조하지 않는다는 뜻으로 null값을 가질 수 있습니다.
NullPointerException - 참조 변수가 null을 가지고 있을 경우에는, 참조 객체가 없으므로 참조 변수를 통해 객체를 사용할 수 없습니다. 만약 null인 참조 변수를 통해 있지도 않은 객체의 필드나 메소드를 사용하면 NullPointerException이 발생합니다.
new 연산자 - 힙 영역에 새로운 객체를 만들 떄 사용하는 연산자(객체 생성 연산자)
String name1 = "허재경";
String name2 = "허재경";
String name3 = new String("허재경");
name1 == name2;//true
name1 == name3;//false
//문자열 비교 메소드
boolean result = name1.equals(name2);//true
배열
배열이란?
같은 타입의 데이터를 연속된 공간에 나열하고, 각 데이터에 인덱스를 부여해놓은 자료구조를 의미합니다.
형식
//타입1
int[] value;
//타입2
int value[];
*보통 형식1을 주로 사용
생성 방법
//방법1
타입[] 변수명 = {값0, 값1, 값2,...};
int[] array = {0,1,2};
int[] hello;
hello = {0,1,2,3}; // 컴파일 에러
//방법2
int[] hello;
hello = new int[] {1,2,3}; // 선언 이후에 값의 목록으로 배열 생성을 원한다면 new 키워드 사용
// 자바는 new int[] {1,2,3} 을 배열로 만들고 그 번지를 hello에 저장해준다.
타입[] 변수명 = new 타입[크기];
int[] scores = new int[30]; // 기본적으로 배열 안에는 0이 저장되어 있다.
*기본적으로 목록을 통해 생성하지 않은 경우에는 String에는 null, int에는 0값이 들어있습니다.
*.length를 이용하면 배열의 길이를 확인할 수 있습니다.
명령 라인 입력
main() 메소드의 String[] args 매개변수
실행할 때 명령라인 매개값을 주지 않았을 경우 길이가 0인 String 배열 생성 후 main()메소드가 호출되는 것입니다. 그렇다면 매개값을 주고 사용해보겠습니다. 아래 코드를 실행하기 전에 Run - Run configurations - Arguments - Program arguments 에서 공백을 기준으로 값을 주고 Run 해주면 값이 들어갑니다.
package sec02.exam01;
public class SignOperatorExample {
public static void main(String[] args) {
int x = -100;
int result1 = -x;
int result2 = -x;
System.out.println("result1=" + result1);
System.out.println("result2=" + result2);
byte b = 100;
//byte result3 = -b; // 결과 값 타입이 일치x
int result3 = -b;
System.out.println("result3="+result3);
}
}
다차원 배열
//타입[][] 변수명 = new 타입[크기][크기];
int[][] scores = new int[2][3];
//타입[][] 변수 = {{값1,값2,....}, {값1,값2,,....}};
int[][] scores = {{95,80},{92,96}};
int score = scores[0][0] // 95
객체를 참조하는 배열
참조 타입 배열은 요소에 값(정수, 실수, 논리값)을 저장하지 않고, 객체의 번지를 가지고 있습니다.
String[] strarray = new String[3];
strarray[0] = "java";
strarray[1] = "java";
strarray[2] = new String("java");
strarray[0] == strarray[1] // true
strarray[0] == strarray[2] // false
strarray[0].equals(strarray[2]) // true
각각의 인덱스에 대입
배열 복사
- for문을 이용해서 요소 하나 하나 복사하는 방법
- System.arraycopy()를 이용해 복사하는 방법
//System.arraycopy(원본배열,원본배열시작인덱스,대상배열,대상배열시작인덱스,복사개수);
String[] oldStrArray = {"java","array","copy"};
String[] newStrArray = new String[5];
System.arraycopy(oldStrArray,0,newStrArray,0,oldStrArray.length);
부가적 사용팁
기존식
for(int i=0;i<10;i++>){
}
향상된 for문
for (타입 변수명 : 배열){
}
int[] scores = {100,95,92,96};
for (int x : scores)
System.out.printf("%d " ,x);
'👨🏫Study > JAVA' 카테고리의 다른 글
[JAVA] 06 - 4 메소드 (0) | 2021.08.06 |
---|---|
[JAVA] 06 - 1 객체 지향 프로그래밍, 06 - 2 필드, 06 - 3 생성자 (0) | 2021.08.05 |
[JAVA] 04 조건문과 반복문 (0) | 2021.08.03 |
[JAVA] 03 연산자 (0) | 2021.08.03 |
[JAVA] 02-4 변수와 시스템 입출력 (0) | 2021.08.02 |
댓글