728x90
2023.01.09 - [JAVA/Java 기초] - 참조 타입.java
참조 타입.java
참조타입 객체의 번지를 참조하는 타입입니다. 배열, 열거, 클래스, 인터페이스 타입이 있습니다. 기본타입으로 선언된 변수는 값 자체를 저장하지만, 참조 타입으로 선언된 변수는 객체가 생성
less-go.tistory.com
이전 참조타입 글에서 부터 계속됩니다.
배열에서 객체 참조하기
- 기본타입(byte, char, short, int, long, float, double, boolean) 배열은 각 항목에 값을 직접 저장합니다.
- 참조타입(클래스, 인터페이스) 배열은 각 항목에 객체의 번지를 저장합니다.
String[] strArray = new String[3];
strArray[0] = "Java"
strArray[1] = "C++";
strArray[2] = "C#";

public class referance {
public static void main(String[] args) {
String[] strArray = new String[3];
strArray[0] = "Java";
strArray[1] = "Java";
strArray[2] = new String("Java");
System.out.println(strArray[0] == strArray[1]);
System.out.println(strArray[0] == strArray[2]);
System.out.println(strArray[1].equals(strArray[2]));
}
}
결과 :
true
false
true
배열 복사하기
배열은 한번 생성하면 길이를 변경할수가 없습니다.
더 많은 저장공간이 필요하다면 배열을 새로만들고 이전 배열로부터 항목을 복사해야합니다.

public class referance {
public static void main(String[] args) {
int[] oldIntArray = {1,2,3};
int[] newIntArray = new int[5];
for(int i=0; i<oldIntArray.length; i++) {
newIntArray[i] = oldIntArray[i];
}
for(int i=0; i<newIntArray.length; i++) {
System.out.print(newIntArray[i] + " ");
}
}
}
결과 :
1 2 3 0 0
- System의 arraycopy() 메소드를 이용해 배열을 복사 할수 있습니다.

public class referance {
public static void main(String[] args) {
String[] oSa = {"java","array","copy"};
String[] nSa = new String[5];
System.arraycopy(oSa, 1, nSa, 1, 2);
for(int i=0; i <nSa.length; i++) {
System.out.print(nSa[i] + " ");
}
System.out.println();
System.out.println("------------------------------");
String[] nSa2 = new String[5];
System.arraycopy(oSa, 0, nSa2, 2, 2);
// 원본배열, 가져올 배열의 인덱스번호, 새로운 배열, 새로운 배열의 붙여넣기 시작할 인덱스, 복사항목수
for(int i=0; i<nSa2.length; i++) {
System.out.print(nSa2[i] + " ");
}
}
}
결과 :
array copy null null
------------------------------
null null java array null
배열 및 컬렉션 처리에 용이한 for 문
- 카운터 변수와 증감식을 사용하지 않고, 항목의 개수만큼 반복한후 자동으로 for문을 빠져 나갑니다.

- for 문이 실행되면 배열에서 항목을 가져와서 변수에 저장하고 실행문을 실행합니다.
- 반복해서 배열에서 항목을 가져오고 가져올 다음 항목이 없으면 for문을 종료합니다.
public class referance {
public static void main(String[] args) {
int[] scores = {95, 71, 84, 93, 87};
int sum = 0;
// for(int i=0; i<scores.length; i++) {
// sum += scores[i];
// } 기존의 for 문
for(int score : scores) {
sum += score;
}
System.out.println("점수 총합 = " + sum);
double avg = (double) sum/scores.length;
System.out.println("점수 평균 = " + avg);
}
}
결과 :
점수 총합 = 430
점수 평균 = 86.0
String[] args 매개변수의 필요성!!
- 자바 프로그램을 실행 하기 위해 main()메소드를 작성하면서 문자열 배열형태인 String[] args 매개변수가 필요합니다.
- 프로그램 실행 시 입력값이 부족하면 길이가 0인 String 배열을 참조합니다.

public class referance {
public static void main(String[] args) {
if(args.length !=2) {
System.out.println("프로그램 입력값이 부족");
System.exit(0);
}
String strNum1 = args[0];
String strNum2 = args[1];
int num1 = Integer.parseInt(strNum1);
int num2 = Integer.parseInt(strNum2);
int result = num1 + num2;
System.out.println(num1 + " + " + num2 + " = " + result);
}
}
결과:
프로그램 입력값이 부족
한정된 값으로 이루어진 Enum 타입
- 요일, 계절 처럼 한정된 값을 갖는 타입입니다
- 먼저 열거타입 이름으로 소스파일(.java)를 생성하고 한정된 값을 코드로 정의합니다.
- 열거 타입 이름은 첫 문자를 대문자로 하고 카멜스타일로 지어주는것이 관례입니다.
같은 프로젝트 내에 자바 소스파일을 생성합니다.
public enum Week {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
//해당 코드를 작성합니다.
import java.util.Calendar;
public class mainarray {
public static void main(String[] args) {
Week today = null;
Calendar cal = Calendar.getInstance();
int week = cal.get(Calendar.DAY_OF_WEEK);
switch(week) {
case 1: today = Week.SUNDAY; break;
case 2: today = Week.MONDAY; break;
case 3: today = Week.TUESDAY; break;
case 4: today = Week.WEDNESDAY; break;
case 5: today = Week.THURSDAY; break;
case 6: today = Week.FRIDAY; break;
case 7: today = Week.SATURDAY; break;
}
if(today == Week.SUNDAY) {
System.out.println("일요일에는 축구를 합니다.");
}else {
System.out.println("평일에는 공부를 합시다");
}
}
}
결과 :
평일에는 공부를 합시다
728x90
'JAVA > Java 기초' 카테고리의 다른 글
| 인스턴스 멤버, static, final ... (0) | 2023.01.11 |
|---|---|
| 객체, 클래스 변수.java (0) | 2023.01.10 |
| 배열 응용문제 (0) | 2023.01.09 |
| 참조 타입.java (0) | 2023.01.09 |
| 반복문(for, while, do-while) (0) | 2023.01.06 |