<객체지향 프로그래밍> Ch03 반복문과 배열 그리고 예외 처리

2019. 4. 12. 23:51수업/Object-Oriented Programming

3.1 반복문

3.2 continue문과 break문

3.3 배열

3.4 다차원 배열

3.5 메소드에서 배열 리턴

3.6 main() 메소드

3.7 자바의 예외 처리


3.1 반목문

for문 / while문 / do-while문

  • for문 (반복의 횟수나 범위가 명확한 경우)

      for (초기문; 조건식; 반복 후 작업) {    // 1.초기문 2.조건식 4.반복 후 작업
          작업문                             //                3. 작업문
      }
    1. 초기문: 조건식에서 사용하는 변수를 초기화(혹은 지역변수 선언 + 초기화)
      • 시작할 때 한 번만 수행, 빈 상태도 가능
      • , 로 여러 문장 나열 가능

    2. 조건식: 논리형 변수/연산 사용
      • 조건식에 true/빈칸 이면 무한 반복(infinite loop)된다.

    3. 작업문: for문이 반복되는 동안 반복 실행

    4. 반복 후 작업: 작업문이 실행된 후 실행
      • , 로 여러 문장 나열 가능

  • while문 (반복 횟수를 처음부터 알 수 없는 경우)

      while (조건식) {    //1. 조건식
          작업문        //2. 작업문
      }
    1. 조건식: 논리형 변수/연산 사용
      • 빈칸이면 컴파일 오류 발생
      • 조건식에 사용되는 변수를 while문 실행 전에 반드시 초기화
      • 조건식 작성이 어려우면 작업문 안에 if문과 break;문을 사용해서 코딩할 것

    2. 작업문: while문이 반복되는 동안 반복 실행
  • do-while 문 (최소 한 번은 반드시 실행애야 하는 while문)

      do {
          작업문        //1. 작업문
      } while(조건식);    //2. 조건식
    1. 작업문: do-while문이 반복되는 동안 반복 실행
    2. 조건식: 논리형 변수/연산 사용
      • 빈칸이면 컴파일 오류 발생
      • 조건식에 사용되는 변수를 do-while문 실행 전에 반드시 초기화

  • 중첩 반복(nested loop): 반복문 안에 다른 반복문을 만드는 것
    반복은 몇 번이고 중첩 가능하지만, 너무 깊은 중첩 반복은 프로그램 구조를 복잡하게 한다.

3.2 continue문과 break문

  • continue문: 반복문을 빠져나가지 않으면서 즉시 다음 반복으로 넘어가고자 할 때

      for(초기문; 조건식; 반복 후 작업) {    while(조건식) {    do {
          continue;                            continue;        continue;
      }                                      }                  } while(조건식);

    continue; -> 반복 후 작업 or 조건식으로 분기

  • break문: 하나의 반복문을 즉시 벗어날 때 사용

3.3 배열

배열 선언 / 배열 생성 / 배열 초기화 / 배열 크기 / 배열 공유
배열(array): 인덱스(index)와 인덱스에 대응하는 데이터들로 이루어진 연속적인 자료 구조
같은 종류(ex int[]형 - 레퍼런스 타입)의 데이터들이 순차적으로 저장된다.
인덱스(index): 배열의 시작 위치에서부터 데이터가 있는 상대 위치
- 0부터 시작하는 정수만 가능하며 마지막 원소의 인덱스는 배열 크기-1이다.

  • 배열 선언: 배열에 대한 래퍼런스 변수 선언

      int[] intArray;    //값은 null로 자동 초기화
      배열타입 / 배열에 대한 래퍼런스 변수


  • 배열 생성: new연산자를 이용해서 배열object 생성 (heap 영역에 배열의 저장 공간 할당)

      intArray = new int[5];
      래퍼런스변수 / 배열생성 / 타입+원소개수

    배열 object 안에는 배열 공간배열 크기가 저장되어 있다.

    • heap영역에 할당되면 JVM이 0으로 자동 초기화한다.
    • stack영역에 할당하고 초기화 없이 출력하면 컴파일 에러가 난다.

  • 배열 초기화: 배열 선언문에서 { }에 원소를 나열

      int[] intArray = {4, 3, 2, 1, 0};

    배열의 선언과 동시에 생성

      int[] intArray = new int[5];

  • 배열 크기: 배열 object 안 length필드에 배열의 크기를 저장한다.


  • 배열 공유: 다수의 래퍼런스 변수가 하나의 배열 공간을 가리키는 것

      int[] intArray = new int[5];
      int[] myArray = intArray;    //intArray와 myArray 래퍼런스 변수는
                                  //같은 배열 객체를 가리킨다.

    래퍼런스 변수가 한 개 사라져도 나머지는 상관 없이 배열 객체를 가리킨다.


  • 배열과 for-each문: 배열이나 나열(enumeration)의 크기만큼 루프를 돌면서 각 원소를 순차적으로 접근하는데 유용하게 만든 for문
    for문: 읽기 + 쓰기 용도
    for-each문: 읽기 용도(= enhance for)

      for(변수 : 배열 레퍼런스) {
          반복작업문
      }

    아래의 두 for문은 동일하다.(k에는 사본이 들어가기 때문에 배열의 값 변경 불가)

      for (int i=0; i<n.length; i++) {    for (int k : n) {
          int k = n[i];                        sum += k;
          sum += k;                        }
      }


3.4 다차원 배열

2차원 배열 / 비정방형 배열

  • 2차원 배열의 선언과 생성

      int[][] intArray = new int[2][5];

    2차원 배열에서 행의 각 원소는 1차원 배열에 대한 레퍼런스가 된다.

  • 2차원 배열의 초기화

      int[][] intArray = { {0, 1, 2}, {3, 4, 5}, {6, 7, 8} };

  • 비정방형 배열: 행마다 열의 개수가 서로 다른 배열

      int[][] i = new int[2][];    //2차원 배열의 래퍼런스 변수 i 선언
                                  //각 행(2개)을 가리키는 래퍼런스 배열 생성
      i[0] = new int[1];    //첫째 행에 1개 크기의 배열 생성
      i[1] = new int[2];    //둘째 행에 2개 크기의 배열 생성


3.5 메소드에서 배열 리턴

  • 메소드에서 배열을 리턴하면 배열에 대한 래퍼런스만 리턴된다.
      int[] makeArray() {                //int[]: 리턴 타입
          int[] temp = new int[4];
          return temp;            //지역변수 temp는 사라지지만 배열 메모리는 존재
      }

3.6 main() 메소드

main() 메소드의 특징 / main() 메소드의 매개변수

  • main() 메소드의 특징: 자바 응용프로그램의 실행은 main() 메소드부터 시작한다.
      public static void main (String[] args) {}
    • public 속성: 자바 응용프로그램이 실행을 시작할 때 JVM에 의해 호출되어야 하므로
    • static 속성: 객체가 생성되기 전, JVM에 의해 호출되므로
    • 리턴타입 void: 아무 값도 리턴하지 않기 때문에
    • 문자열 배열(String[]): 자바는 명령행에 입력된 인자들을 문자열 배열로 만들어 main에 전달
    • 매개변수 args: 명령행 인자(command line argument)가 매개변수로 전달
        C:\>java Hello option1 option2 ... optionN //option이 명령행 인자
      1. 명령행 인자들이 각각 문자열로 만들어진다.
      2. 문자열이 된 인자들이 문자열 배열에 저장된다.
      3. 문자열 배열에 대한 래퍼런스가 매개변수 args에 전달된다.

3.7 자바의 예외 처리

예외 / 예외 처리, try-catch-finally문

  • 컴파일 오류(compile time error): ==사전에 컴파일러==가 문법에 맞지 않은 코드를 걸러냄.

  • 실행시간 오류(run-time error): ==예측할 수 없고 멈출 수 없어==서 프로그램이 강제 종료됨.

    • 예외(exception): try-catch 블록으로 ==제어(handling)할 수 있는== 실행시간 오류(run-time-error)
      • Checked exception: JVM에서 알려주는 에러
      • Unchecked exception: OS에서 정한 에러
  • 추가 exception 생성 가능

  • 예외 처리: 개발자가 작성한 프로그램의 실행 중에 예외가 발생하면 이에 대응하는 것
    event처리 매커니즘(함수 >> 함수 로 점프)
    = 예외처리 매커니즘(함수 안 >> 함수 안 으로 점프)

      try {
          예외가 발생할 가능성이 있는 실행문
      }
      catch (처리할 예외 타입 선언 e) {    //e: 예외 정보가 저장된 예외타입 객체
          예외 처리문    //catch는 오버로딩이 가능하다.           (래퍼런스 형)
      }            //System.exit(0)을 호출하면 언제든지 프로그램 종료 가능
      finally {    //생략 가능
          예외 발생 여부와 상관없이 try에서 return 하더라도 반드시 실행되는 문장
      }
    • if문(사전 예방): 원래 코드에 필요한 if문과 에러를 위한 if문을 한 눈에 구분X >> 가독성 떨어짐
    • try-catch문(사후 처리): 평소에는 try문만 읽으면 됨 >> 가독성 올라감

  • 예외 클래스
    OS: (예외)에러가 나면 기본적으로 프로그램 종료
    구조체 전달> JVM: 구조체에 대응하는 클래스를 부름
    클래스 전달> APP