8일차 배열과 열거타입

쿠우·2022년 4월 1일
0

6. 배열

-----------------------배열의 길이 기본--------------------------------- 



	public static void main(String[] args) {
		
		int[] scores = {83,90,87}; 
		
		int sum =0 ;
		
//		// length 메서드를 이용한 배열의 순회
//		for(int i=0; i<scores.length; i++) {
//			sum += scores[i];
//		} //for 
		
		
		Iterable i; 
		
		
		// int score 부분을 i로 하지말고 유의미하게 적어라! 
		for(int score : scores) { // 콜론끼리 score:scores 따닥따닥 붙이지 마라 
        	
			//sum += scores[1] 이렇게 썻었음 ㅠ. 
			sum += score; //이렇게 써야함. 
		}// enhanced for 
		
		
		
		System.out.println("총합: " + sum);
		
		double avg= (double) sum/ scores.length;  //length를 사용한 정확한 
		System.out.println("평균: " + avg);

	} //main

-객체를 참조하는 배열

(1)기본타입

   -각 항목에 값을 직접 가지고 있음 

(2)참조타입(클래스, 인터페이스) 배열

   -각 항목에 객체의 주소를 가짐 
------------------------------참조 타입의 배열과 객체의주소----------------------------------

	public static void main(String[] args) {
		
		String[] languages = new String[3];
		
		System.out.println(languages);
		//[Ljava.lang.String;@4517d9a3 << 객체의 래퍼런스(참조) 객체의 FQCN@논리적인 주소값(16진수)
		// FQCN = Fully Qualified Class Name = 모든 클래스에 대한 이름
		
		languages[0] = "언어1"; 
		languages[1] = "언어2"; 
		languages[2] = "언어3"; 
		
		System.out.println(languages[0].hashCode());
		System.out.println(languages[1].hashCode());
		System.out.println(languages[2].hashCode());
		
		// Literal = 순수한 값 + Immutable(수정불가능)
		languages[0] = "언어1";  // String 내용이 같으면 같은 객체의 주소에서 공유한다. 
		languages[1] = "언어1"; 
		languages[2] = "언어1"; 
		
		// 객체의 주소를 부르는 메서드 
		System.out.println(languages[0].hashCode());
		System.out.println(languages[1].hashCode());
		System.out.println(languages[2].hashCode());
	
	} // main

-배열 복사

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

-배열 복사 방법

(1) for문 이용

	// 기존 배열을 직접 새로운 배열에 일일히 복사하는 예제
	public static void main(String[] args) {
		
		int[] oldArr = {1, 2, 3}; 	//기존 배열 
		int[] newArr = new int[5]; // 새로운 더 큰 배열 
		
		// 기존 배열의 원소를 새로운 배열에 복사 
		for(int i=0; i<oldArr.length; i++) {
			newArr[i] = oldArr[i];
		} // classical for
		
		//새로운 배열의 출력 
		System.out.println(Arrays.toString(newArr));
		//

	} //main
    

(2)System.arrayCopy() 메소드를 이용

	// 기존 배열을 직접 새로운 배열에 arrayCopy() 메서드를 이용해 복사하는 예제
	public static void main(String[] args) {
		
		String[] oldArr = {"JAVA", "array", "copy"}; 	//기존 배열 
		String[] newArr = new String[5]; // 새로운 더 큰 배열 
		System.out.println(Arrays.toString(newArr));
		
		
		// 기존 배열의 원소를 새로운 배열에 복사 
		// System.arraycopy(oldArr, offset(기존 배열 시작점), newArr, offset(새 배열 시작점), oldArr.length(개수)); 
		System.arraycopy(oldArr, 0, newArr, 0, oldArr.length);
		
		
		//새로운 배열의 출력 
		System.out.println(Arrays.toString(newArr));
		//

	} //main

(3)Arrays 클래스 이용

	// 기존 배열을 직접 새로운 배열에 Arrays 클래스 이용해 복사하는 예제
	public static void main(String[] args) {
		
		String[] oldArr = {"JAVA", "array", "copy"}; 	//기존 배열 
		String[] newArr = new String[5]; // 새로운 더 큰 배열 
		System.out.println(Arrays.toString(newArr));
		
		
		// 기존 배열의 원소를 새로운 배열에 복사 
		//Arrays.copyOf(기존 배열, 기존배열 0에서 몇까지의 길이 )
		newArr =Arrays.copyOf(oldArr,oldArr.length); // 시작점을 정하는건 copyOfRange();
		
		//새로운 배열의 출력 
		System.out.println(Arrays.toString(newArr));
		//

	} //main

7. 열거 타입

-열거 타입(Enumeration Type)

(1) 한정된 값만을 갖는 데이터 타입

(2) 한정된 값은 열거 상수(Enumeration Constant)로 정의

-열거 타입 선언

(1) 파일 이름과 동일한 이름으로 다음과 같이 선언 (관례: 열거타입 첫 글자 대문자)

(2) 한정된 값인 열거 상수 정의

 1)열거 상수 이름은 관례적으로 모두 대문자로 작성
 2)다른 단어가 결합된 이름일 경우 관례적으로 밑줄(_)로 연결 
 
 
------------------------------열거 타입 선언-------------------------------------
//enum 생성
 enum Week {
	MONDAY, // << 열거 상수(대문자)= 객체
	TUESDAY, // 객체
	WEDNESDAY, // 객체 
	THURSDAY, //객체 
	FRIDAY, //객체 
	SATURDAY, //객체
	SUNDAY //객체
} // end enum

-열거 타입 변수

(1)열거 타입 변수 선언

(2)열거 상수 값 저장 - 열거 타입 변수값은 열거 상수 중 하나

(3)열거 타입 변수는 참조 타입

 1)열거 타입 변수는 참조 타입이므로 null 값에 저장 가능하다! 
--------------------------열거타입 변수 선언/ 저장/ null 사용--------------------------

	public static void main(String[] args) {
	
		Week day = Week.MONDAY; 
		day = Week.TUESDAY; 
		System.out.println(day.hashCode());
		
		
		//switch 문으로 비교가능한 타입은 아래와 같습니다.
		// 1.정수 2.문자 3.문자열 4.열거타입 
		switch(day){//week의 주소를 넣은 객체
		
			case MONDAY: System.out.println("ㅜㅜ"); break; //case문에 열거 상수 넣을때 day선언 따로 안해도됌. 
			case FRIDAY: System.out.println("^^"); break;
		    default: System.out.println("--"); 
		    
		}//switch
		
		
		System.out.println(day == Week.FRIDAY);
		System.out.println(day != Week.FRIDAY);
		
		if(day== Week.FRIDAY) {
			System.out.println("불금!!!");
		} else {
			System.out.println("실망!!!");
		} //if - else 
		
		
		// null: 현재 객체의 주소를 가지고 있지 않다!! 의미 
		day = null;  // day 변수는 객체의 주소를 들고있지 않다!
		// NullPoninterException 오류가, 자바 개발자가 가장 많이 만나는 오류
		
        
        
	}//main

오늘 학생들이 많이 어려워해서 진도를 천천히 나갔다. 하지만 그럴수록 불타오르는 학생들 의지가 잘느껴졌다. 강사님은 조곤조곤 잘 설명해주셨다. 정말 강사님 잘 만났다!

profile
일단 흐자

1개의 댓글

comment-user-thumbnail
2022년 4월 1일

맨 위 코드가 강사님 질문하신 문제의 의도를 내가 다 반대로 해서 수정한 부분이 있다.
교보재가 되버린 내 코드 잊지말자..

답글 달기