본문 바로가기

카테고리 없음

참조 타입 3번째

◎ 다차원 배열

  • 2차원 배열 이상의 배열 (수학의 행렬과 같은 자료 구조)
  • 자바는 1차원 배열을 이용해 2차원 배열 구현

 

 

◎ 2차원 배열 선언

  • 2차원  배열 선언
int[][] intArray;
char[][] charArray;
float[][] floatArray;

 

  • 2차원 배열 생성
int		intArray[] = new int[2][5];
char	charArray[] = new char[5][5];
float	floatArray[] = new float[5][2];

 

  • 2차원 배열 선언, 생성, 초기화
int intArray[][] = {{0,1,2}, {3,4,5}, {6,7,8}};
char charArray[][] = {{'a','b','c'}, {'d','e','f'}};
float

 

◎ 2차원 배열의 length 필드

  • i.length  -> 2차원 배열의 행의 개수로서 2
  • i[n].length는 n번째 행의 열의 개수
  •  - i[0].length -> 0번째 행의 열의 개수로서 5
  •  - i[1].length -> 1번째 행의 열의 개수로서 역시 5

 

∴ 2차원 배열 예제 : 3년간 매출 총액과 평균 구하기

package p1.main;



public class Main {

	public static void main(String[] args) {
		int intArray[][] = {{90,90,110,110},
				{120,110,100,110},
				{120,140,130,150}};
		double sum = 0;
		
		for(int i = 0; i<intArray.length; i++)
			for(int j = 0; j<intArray[i].length; j++)
				sum += intArray[i][j];
		
		System.out.println("지난 3년간 매출 총액은 " + sum + "이며 연평균 매출은 " +sum/intArray.length + "입니다.");
		}
}

 

위 사진은 위 코딩의 결과를 Console 창에 나타낸 것이다.

 

◎ 정방형과 비정방형 배열

  • 정방형 배열 : 각 행의 열의 개수가 같은 배열

 

  • 비정방형 배열 : 각 행의 열의 개수가 다른 배열

 

◎ 비정방형 배열의 length 필드

i.length       // 2차원 배열의 행의 개수로서 4

i[n].length    // n번째 행의 열의 개수

i[0].length    // 0번째 행의 열의 개수로서 1
i[1].length    // 1번째 행의 열의 개수로서 2
i[2].length    // 2번째 행의 열의 개수로서 3
i[3].length    // 3번째 행의 열의 개수로서 4

 

 

∴ 비정방형 배열 예제

package p1.main;



public class Main {

	public static void main(String[] args) {
		int intArray[][] = new int[4][];
		intArray[0] = new int[3];
		intArray[1] = new int[2];
		intArray[2] = new int[3];
		intArray[3] = new int[2];
		
		for (int i=0; i<intArray.length; i++)
			for (int j=0; j<intArray[i].length; j++)
				intArray[i][j] = (i+1)*10 + j;
		
		for (int i=0; i<intArray.length; i++) {
			for (int j=0; j<intArray[i].length; j++)
				System.out.print(intArray[i][j] + " ");
			System.out.println();
		}
	}
}

 

위 사진은 위 코딩의 결과를 Console 창에 나타낸 것이다.

 

◎ 메소드의 배열 리턴

  • 배열의 참조주소만 리턴 (참조주소 : heap 메모리에 존재)
  • 메소드이 리턴 기입
  •   => 메소드가 리턴하는 배열의 타입은 리턴 받는 배열 타입과 일치
  •   => 리턴 타입에 배열 크기를 지정하지 않음

 

∴ 메소드 배열 리턴 예제

package p1.main;



public class Main {

	static int[] makeArray() {
		int temp[] = new int[4];
		for (int i=0; i<temp.length; i++)
		temp[i] = i;
		return temp;
}
	public static void main(String[] args) {
	
		int intArray [];
		intArray = makeArray();
		for (int i=0; i<intArray.length; i++)
			System.out.println(intArray[i]);
	}
}

 

위 사진은 위 코딩의 결과를 Console 창에 나타낸 것이다.

 

◎ main() 메소드

  • main()은 자바 응용프로그램의 실행 시작 메소드
  • main()의 원형
  •  - 반드시 static
  •  - 반드시 public
  •  - 반드시 void
  •  - 반드시 매개 변수 타입은 문자열 배열

 

◎ 커맨드 라인 입력

  • 배열의 선언과 사용

 

◎ main(string [] args) 메소드의 인자 전달

 

◎ 이클립스에서 main() 메소드의 인자전달

Run 메뉴의 Run Configurations 항목에서 main() 메소드의 인자 나열

 

∴ main()의 인자 이용 예제

 

 

∴ main()의 인자 이용 예제 : 여러 개의 실수 값을 입력받아 평균값 계산하기

 

◎ 객체를 참조하는 배열

  • 기본 타입 (byte, char, short, int, long, float, double, boolean) 배열
  •  - 각 항목에 직접 값을 가지고 있음

 

  • 참조 타입(클래스, 인터페이스) 배열 - 각 항목에 객체의 번지 가짐

 

◎ 배열 복사

  • 배열은 한 번 생성하면 크기 변경 불가
  • 더 많은 저장 공간이 필요하다면 보다 큰 배열을 새로 만들고 이전 배열로부터 항목 값들을 복사

◎ 배열 복사 방법

  • for 문 이용
  • System.arrayCopy() 메소드 이용
  • Arrays 클래스 이용

◎ 향상된 for 문

  • 배열 및 컬렉션의 항목 요소를 순차저긍로 처리
  • 인덱스 이용하지 않고 바로 항목 요소 반복

int[] scores = {95, 71, 84, 93, 87};

int sum = 0;
for (int score : scores) {
	sum = sum + score;
    }

 

∴ 배열과 향상된 for 문 (for - each 문) 연계 활용

package p1.main;



public class Main {
	public static void main(String[] args) {
	
		int[] num = {1,2,3,4,5};
		int sum = 0;
		for (int k : num) {  // 반복될 때마다 k는 num[0], num[1], ..., num[4] 값으로 설정
			sum += k;
		}
		System.out.println("합은 " + sum);
	}
}

 

위 사진은 위 코딩의 결과를 Console 창에 나타낸 것이다.

 

 

package p1.main;

public class Main {
	public static void main(String[] args) {
	
		String names[] = {"사과","배","바나나","체리","딸기","포도"};
		
		for (String s : names) {  // 반복할 때마다 s는 names[0], names[1], ..., names[5]로 설정
			System.out.print(s + " ");
		}
	 }
}

 

위 사진은 위 코딩의 결과를 Console 창에 나타낸 것이다.

 

package p1.main;

public class Main {
	public static void main(String[] args) {
	
		enum Week {월,화,수,목,금,토,일};
		for (Week day : Week.values()) {  // 반복될 때마다 day는 월,화,수,목,금,토,일로 설정
			System.out.print(day + "요일 ");
		}
	 }
}

 

위 사진은 위 코딩의 결과를 Console 창에 나타낸 것이다.

 

◎ 열거 타입 (Enumeration Type)

  • 한정된 값만을 갖는 데이터 타입
  • 한정된 값은 열거 상수(Enumeration Constant)로 정의

◎ 열거 타입 선언

  • 파일 이름과 동일한 이름으로 다음과 같이 선언한다. (첫 글자는 대문자)
public enum 열거타입이름 {...}

 

  • 한정된 값인 열거 상수 정의
  •   - 열거 상수 이름은 관례적으로 모두 대문자로 작성
  •   - 다른 단어가 결합된 이름일 경우 관례적으로 밑줄(_)로 연결
public enum Week { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, ...}
public enum LoginResult { LOGIN_SUCCESS, LOGIN_FAILED}

public enum Week {   // Week가 열거 타입 이름
	MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
    }    // 위에 있는 요일들이 열거 상수이다.

 

◎  열거 타입 변수

  • 열거 타입 변수 선언
열거타입 변수;
Week today;
Week reservationDay;

 

  • 열거 상수 값 저장 - 열거 타입 변수값은 열거 상수 중 하나
열거타입 변수 = 열거타입.열거상수;
Week today = Week.SUNDAY;

 

  • 열거 타입 변수는 참조 타입
  •     - 열거 타입 변수는 참조 타입이므로 null 값 저장 가능
Week birthday = null;

 

◎ 열거 객체의 메소드

  • 열거 객체는 열거 상수의 문자열을 내부 데이터로 가지고 있음

 

  • 열거 타입은 컴파일 시 java.lang.Enum 클래스를 자동 상속
  •     - 열거 객체는 java.lang.Enum 클래스의 메소드 사용 가능
리턴타입 메소드(매개변수) 설명
String name() 열거 객체의 문자열을 리턴
int ordinal() 열거 객체의 순번(0부터 시작)을 리턴
int compareTo() 열거 객체를 비교해서 순번 차이를 리턴
열거타입 valueOf(String name) 주어진 문자열의 열거 객체를 리턴
열거배열 values() 모든 열거 객체들을 배열로 리턴

 



이번 참조 타입은 제가 생각한 것보다 양이 많아서 3편으로 나누게 되었습니다. 다음 시간에는 이 참조 타입 배운 내용 String부터 실습을 해보는 시간을 가져보도록 하겠습니다. 감사합니다.^^

반응형