티스토리 뷰

1.     배열타입 (sample71부터)

-      배열 타입 별 항목의 기본값은 다음과 같다.

-      1) 기본타입(정수) : 0

-      2) 기본타입(실수) : 0.0

-      3) 기본타입(논리) : false

-      4) 참조타입 : null

-      배열의 길이(.length)는 읽기 전용이기에 배열 길이의 조절은 불가능하다.

-      다차원 배열 : 2차원 배열 이상의 배열을 의미한다.

-      1차원 배열 : 배열의 원소가 하나의 값 (스칼라) ex. Int [] arr1 = { 1,2,3 };

-      2차원 배열 : ex. Int [] [] arr2 = { { 1, 2 } , { 3, 4} }; 이 경우 원소의 크기는 2이다.

-      Ex. Int [ ] [ ] arr2 = { { 1, 2 } , { 3, 4 } , { 5, 6 } };

-      EX. int [ ] [ ] arr2 = { { 1 , 2 } , { 3 , 4 } , { 5 , 6, 7 } };도 가능하다.

-      Int [] [] arr2 = {

{ 1, 2 }

{ 3, 4 }

-      } ;  // 2차원 배열( 2 x 2 = 세로 x 가로)  - arr2

-      2차원에서 원소를 끄집어 낼 때는 차근차근 밖에 있는 배열의 원소 중에 인덱스 몇 번째를 꺼내고 싶은지 [ ]를 통해 작성하고 그 후에 또 그 안의 몇 번째를 꺼낼지 [ ] 를 통해 지정한다. 차원과 상관없이 인덱스는 0번부터 시작한다.

-      Ex. arr2 [ 0 ] [ 0 ] => 1을 꺼낼 수 있다.

-      EX. arr2 [ 1 ] [ 1 ] => 4를 꺼낼 수 있다.

-      Ex. arr2 [ 0 ] [ 0 ] = 100;을 통해 1100으로 바꿀 수도 있다.

-      3차원 배열 : ex. Int [] [] [] arr3 = { { { 1, 2 } , { { 3 , 4 } } };

-      두번째 배열에서는 원소가 { 1 , 2 } 밖에 없으므로 원소가 1개만 있는 것이다.

-      Ex. arr3 [ 0 ] [ 0 ] [ 0 ] => 1을 꺼낼 수 있다.

-      EX. arr3 [ 1 ] [ 0 ] [ 1 ] =>4를 꺼낼 수 있다.

-      인덱스 번호가 0번부터 시작한다는 것을 까먹어서는 안된다.

-      대부분의 배열은 2차원 배열에서 끝나게 된다. 3차원 이상이면 검토해보기!

-      배열은 한 번 생성하면 크기 변경이 불가능하다.

-      더 많은 저장 공간이 필요하자면 보다 큰 배열을 새로 만들고, 이전 배열로부터 항목 값들을 복사해야 한다.

-      배열 복사 방법 : for문 이용, System.arraycopy() 메소드 이용, Arrays 클래스 이용

-      System.arraycopy(originArr, offset, targetArr, offset, length);

-      System.arraycopy(originArr(복사할 대상), offset(어디에서 부터),

-      targetArr(복사해서 넣을 대상), offset(어디서부터), length(몇개));

-      newstrArray = Arrays.copyOf(oldStrArray, oldStrArray.length);

 

2.    참조타입 배열 각 항목에 객체의 번지를 가진다.

-      EX. String [ ] strArray = new String[3];

-      EX. strArray [ 0 ] = “JAVA”;

 

3.    열거 타입

-      한정된 값만 갖는 데이터 타입이다.

 

4.     자바 언어에서 이름(식별자)을 짓는 규칙

-      영문자, 소문자, 숫자는 사용이 가능하다.

-      특수문자는 “_”  “$”만 사용이 가능하다.

-       첫번째 문자가 숫자로 시작할 수 없다.

-       기본적으로 camel기법을 적용한다.

-       변수명은 소문자(특수기호)로 시작한다.

-       class명은 대문자로 시작한다.

-       메소드명은 소문자로 시작한다.

 

5.    열거상수

-      상수 이름을 짓는 규칙 : 대문자

-      참조타입 중 하나이다!!

-      열거상수 하나하나가 객체이다! 타입은 Public enum 타입명 { } 이다.

-      열거 상수 사이에는 순서가 존재한다.

-      열거타입의 목적은 열거타입 변수에 대입 가능한 값을 제한시키는 것이다.

 

6.    요약

-      1. 클래스는 붕어빵 틀 , 객체는 붕어빵임을 잊지 마라!

-      2. 붕어빵(객체)을 만들어 내기 위해서는, 붕어빵 틀(클래스)이 필요하다.

 

7.    객체 지향 프로그래밍 ( OOP )

-      부품 객체를 먼저 만들고 이것들을 하나씩 조립해 완성된 프로그램을 만드는 기법

-      객체는 필드(속성)과 메소드(동작/행위)로 구성된 자바 객체로 모델링 가능

-      현실 세계에 있는 객체를 클래스로 만드는 것을 객체 모델링이라고 한다.

-      객체(속성+행위) è 클래스로 만드는 과정을 객체 모델링이라고 한다.

-      Lombok을 잘 활용하면 코딩양을 대폭 줄여줄 수 잇다.

 


01. 배열의 초기값 - enhanced for문

 

public class Sample71 {

     

      public static void main(String[] args) {

           

            // 배열 타입의 초기값

           

            int [] arr1 = new int[3];

           

            for (int i=0; i<3; i++) {

                  System.out.println("arr1[" + i + "] : " + arr1[i]);

            } // for

           

            for ( int number : arr1 ) {

                  System.out.println(number);

            } // enhanced for - 일부터 arr1[i]라고 sysout 치지 않아도 하나씩 빠져와서 출력됨을 있디.

            // Iterable(반복이 가능한) 객체만 enhanced for 있다.

           

//          =================================== 정수타입 기본값만 출력하게 되면, arr1[0] : 0 식으로 arr1[2] : 0까지 출력되게 된다.

//          =================================== 정수타입의 배열 초기값은 0임으로 있다.

           

            arr1 [0] = 10;

            arr1 [1] = 20;

            arr1 [2] = 30;

           

            for(int i=0; i<3; i++) {

                  System.out.println("arr1[" + i + "] : " + arr1[i]);

            } // classical for

           

            for (int number : arr1) {

                  System.out.println("arr1" + " : " + number);

            } //enhanced for

           

//          =================================== 베열의 원소의 값을 바꿔보는 코드이다.

           

           

            double[] arr2 = new double[3];

           

            for(int i=0; i<3; i++) {

                  System.out.println("arr2[" + i + "] : " + arr2[i]);

            } // for

           

            for( double number1 : arr2) {

                  System.out.println(number1);

            } // enhanced for

           

//          =================================== 실수타입 배열의 초기값을 출력하게 되면 arr2[0] : 0.0 식으로 출력된다.

//          =================================== 실수타입의 초기값은 0.0임을 있다.

           

            arr2[0] = 0.1;

            arr2[1] = .2; // == 0.2

            arr2[2] = 0.3;

           

            for(int i = 0; i<arr2.length; i++) { // i<3보다는 i< arr2.length으로 범위 형성하는 것이 명확하다.

                  System.out.println("arr2[" + i + "] : " + arr2[i]);

            } // for

           

//          =================================== 실수타입 배열의 원소가 초기값에서 바뀌었음을 있다.

           

            String[] arr3 = new String[3];

            for(int i=0; i<arr3.length;i++) {

                  System.out.println("arr3[" + i + "] : " + arr3[i]);

            } // for

           

//          =================================== 참조타입 배열의 초기값을 출력해보자 arr3[0] : null 식으로 출력됨을 있다.

//          =================================== 참조타입의 초기값은 null임을 있다.

           

            arr3[0] = "1";

            arr3[1] = "2";

            arr3[2] = "3";

           

            for(int i = 0; i<3; i++) {

                  System.out.println("arr3[" + i + "] : " + arr3[i]);

            } // for

           

//          =================================== 참조타입 배열의 원소가 초기값에서 바뀌었음을 있다.   

           

      } // main

 

} // end class

 

02. 다차원 배열

 

public class Sample72 {

     

      public static void main (String[] args) { // 다차원 배열 (*********)

           

            int [] [] mathScores = new int[2][3];

           

            for (int i=0; i<mathScores.length; i++) { // 첫번째 배열의 길이는 2이므로 2 반복되게 된다.

                 

                  for(int k=0; k<mathScores[i].length; k++) { // matScores.length가 가능한 이유는 원소가 배열이기 때문이다.

                        // 안의 배열의 경우 길이가 3 배열이기 때문에 3 반복되게 된다.

                       

                        System.out.println("mathScores [" + i + "] [" + k + "] = " + mathScores[i][k]);

                       

                  } //inner for

                 

            } // outer for

           

           

            int[][] mathScores22 = { { 1, 2 } , { 3, 4 } , { 5, 6, 7 } };

           

            for ( int[] arr1 : mathScores22 ) {  // enhanced for문 활용 (*****)

                 

                  for ( int number : arr1 ) {

                       

                        System.out.println(number);

                       

                  } // inner enhanced for

                 

            } //  outer enhanced for

           

            // 순회할때는 enhanced for문을 사용하는 것이 편하지만, 특정 1개를 특정지을 때에는 for문을 사용해야 한다.

           

            System.out.println("mathScores22 배열의 길이 : " + mathScores22.length); // 길이 : 3

            System.out.println("mathScores22 배열의 첫번째 원소의 길이 : " + mathScores22[0].length); // 길이 : 2

            System.out.println("mathScores22 배열의 두번째 원소의 길이 : " + mathScores22[1].length); // 길이 : 2

            System.out.println("mathScores22 배열의 세번째 원소의 길이 : " + mathScores22[2].length); // 길이 : 3

           

            System.out.println();

           

//          =======================================

           

      } // main

 

} // end class

 

03. 배열을 복사하는 방법

 

import java.util.Arrays;

 

public class Sample73 {

     

      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];

            } // classical for

           

            for (int i=0; i< newIntArray.length;i++) {

                  System.out.print(newIntArray[i] + ", "); // 1, 2, 3, 0, 0, 출력이 된다. 값이 없으면 0으로 출력이 된다.

            } // classical for

           

            System.out.println(Arrays.toString(newIntArray)); //  [1, 2, 3, 0, 0]으로 배열이 단정하게 출력된다.

            // 자동완성은 컨트롤 + 스페이스바

            // 배열을 단정하게 출력하기 위해서는 Arrays.toString(변수이름)을 외우는 것이 좋다. (****)

           

      } // main

 

} // end class

 

04. 배열을 복사하는 방법 2

 

import java.util.Arrays;

 

public class Sample74 {

     

      public static void main(String[] args) {

           

            String[] oldStrArray = { "Java", "array", "copy" };

            String[] newstrArray = new String[5];

           

            //배열의 복사 : System.arraycopy(originArr, offset, targetArr, offset, length) (*******)

            // System.arraycopy(originArr(복사할 대상), offset(어디에서 부터), targetArr(복사해서 넣을 대상), offset(어디서부터), length(몇개))

           

            System.arraycopy(oldStrArray, 0, newstrArray, 0, oldStrArray.length); // (***********)

           

            System.out.println(Arrays.toString(newstrArray)); // (********)

           

//===========================================================================

           

            newstrArray = Arrays.copyOf(oldStrArray, oldStrArray.length);

            System.out.println(Arrays.toString(newstrArray)); // [Java, array, copy] 출력이 된다.

            // 유형의 경우, 배열의 작은 편으로 복사되게 된다.

           

      } // main

 

} // end class

 

05. 열거상수

 

public enum Week {

      MONDAY,

      TUESDAY,

      WEDNESDAY,

      THURSDAY,

      FRIDAY,

      SATURDAY,

      SUNDAY

      } // end enum

 

            // 값들을 "," 구분하게 된다.

            // 값들은 열거상수라고 부르는데, 값들은 변환이 불가능하다.

            // 열거타입의 상수는 순서가 존재하고 순서에 따라서 끄집어낼 수는 있지만, 딱히 자주 사용하지는 않는다.

            // Week.class라는 파일이 생성되어 있다.

 

public class Sample76 {

     

      public static void main(String[] args) {

            // name() 메소드

            Week today = Week.SUNDAY; // 열거상수로 초기화하여, 열거타입변수 "정의"

           

            // 도트연산자( . ) : "객체의 멤버를 참조(=사용)하는 연산자" --> "객체멤버참조 연산자"

            // 객체 : 1. 고유한 성질 -> "필드(fields)" 2. 기능(=행위) -> "메소드(method)"

            // 기능은 .name 열거상수의 이름을 가르쳐 추는 것처럼 일정한 기능을 수행한다.

           

            String name = today.name();

            System.out.println(name); // sunday라고 출력

           

//          =======================================================================

           

            // ordinal() 메소드

            int ordinal = today.ordinal(); // today 해당되는 SUNDAY라는 열거상수값이 몇번째에 있는지 확인 준다.

            System.out.println(ordinal); // 6이라고 출력

            // 순서는 인덱스번호처럼 0번부터 시작되기에 7번째라고 하더라고 6이라고 출력이된다.

           

//          =======================================================================

           

            // compareTo() 메소드

           

            Week day1 = Week.MONDAY;

            Week day2 = Week.WEDNESDAY;

           

            int result1 = day1.compareTo(day2);

            int result2 = day2.compareTo(day1);

           

            System.out.println(result1); // -2 출력된다. <-- 월요일이 0번째 - 수요일이 2번째이기에 = -2 출력된다.

            System.out.println(result2); // +2 출력된다.

           

            // 자바언어에서는 변수의 값을 비교할 , 아래와 같은 원칙으로 값을 생성하게 되어있다.

            // 1. 기준변수 == 비교변수 --> return 0 (정수타입으로 0 나오면 같다는 의미이다.)

            // 2. 기준변수 < 비교변수 --> return 음수값 (-1)

            // 3. 기준변수 > 비교변수 --> return 양수값 (+1)

           

//          =======================================================================

           

            // values() 메소드

           

            Week[] days = Week.values(); // Week 모든 열거상수를 반환하라!

           

            for( Week day : days ) {

                  System.out.println(day); // MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY 출력된다.

                  // 각각 상수의 이름이 출력되게 된다.

            } // for

           

      } // main

 

} // end class

 

06. 열거상수의 응용

 

import java.util.Calendar;

 

public class Sample77 {

     

      public static void main(String[] args) {

           

            Week today = null;

           

//         

            Calendar cal = Calendar.getInstance();

            int week = cal.get(Calendar.DAY_OF_WEEK);

//         

           

            switch(week) { // 일요일은 1에서 시작해서 토요일 7 끝난다.

            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;

            } // switch

           

            System.out.println("오늘 요일 : " + today);

           

            // 아래처럼 요일마다 다른 로직을 실행해야 될때 열거상수를 사용한다.

           

            if(today == Week.SUNDAY) {

                  System.out.println("일요일에는 축구를 합시다!");

            } else {

                  System.out.println("열심히 자바 공부를 합시다!");

            }// if - else

           

      } // main

 

} // end class

 

07. 열거상수의 응용2

 

public class Sample78 {

     

      public static void main(String[] args) {

           

            // 이전 switch문과 새로운 switch 비교

           

            Week today = Week.FRIDAY;

            // today = 100; <---- 열거타입변수이기에 다른 숫자를 넣는 것이 불가능하여, 컴파일 오류가 뜬다.

            // Week 타입 하나이다.

           

            // A. 이전 switch

           

            String typeOfDay = null; // 참조타입의 변수로 null 사용할 있다.

           

            switch(today) {

            case MONDAY :

            case TUESDAY :

            case WEDNESDAY :

            case THURSDAY :

            case FRIDAY : typeOfDay = "Working Day"; break; // 월요일부터 금요일이 될때까지 break;문이 없으므로

            // 월요일부터 금요일은 Working Day 출력되고 나서야 break; 된다. ( 응용*** )

            case SATURDAY :

            case SUNDAY : typeOfDay = "Day Off"; break;

            } // switch - 열거상수 또한 case : 사용이 가능하다. ( 실수타입은 불가능하다.)

           

            System.out.println("1.typeOfDay : " + typeOfDay );

           

//          ======================================================================

           

            // B. New switch expression

           

            typeOfDay = switch(today) {

            case MONDAY, TUESDAY, WEDNESDAY,THURSDAY, FRIDAY -> "Working Day";

            case SATURDAY,SUNDAY -> "Day Off";

            }; // switch expression

           

            System.out.println("2. typeOfDay : { " + typeOfDay + " }");

           

//          ======================================================================

           

            switch(today) {

            case MONDAY, TUESDAY, WEDNESDAY,THURSDAY, FRIDAY -> System.out.println("3. Working Day");

            case SATURDAY,SUNDAY -> System.out.println("3. Day Off");

            } // switch expression - 2

           

//          ======================================================================

           

            // 복잡한 논리는 중괄호 { } 감싸야 합니다.

           

            typeOfDay = switch(today){

           

            case MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY -> {

                  System.out.println("1st. case");

                  System.out.println("\t + Working Day");

                 

                  yield "Working day"; // --> 이를 typeOfDay 반환해 준다.

            }

           

            case SATURDAY, SUNDAY -> {

                  System.out.println("2nd. case");

                  System.out.println("\t + Day Off");

                 

                  yield "Day Off"; // --> 이를 typeOfDay 반환해 준다.

            }

           

            }; //switch - 값을 생성해서 대입하는 실행문장일때는 끝에 ; 붙어여 한다.

           

//          ======================================================================

          

      } // main

 

} // end class

728x90
댓글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
최근에 올라온 글
Total
Today
Yesterday
공지사항