JAVA/Java 기초

참조-배열 등등...java

john_ 2023. 1. 10. 10:43
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