본문 바로가기

Language/Java

Java 기본 문법 Ⅲ - 반복문, 배열, 예외 처리

6. 반복문 ( Loop statement )

1) for 문

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

     ... 작업문 ... 

 } 

- 조건식의 결과가 true 인 경우 반복, false가 되면 for문을 벗어난다.

- 반복 후 작업문에는 콤마(;)로 분리해 여러 문장을 둘 수 있다.

- for 문으로 무한 루프를 하고 싶을 때는? 조건식을 생략하거나 true 로 둔다

 

2) while 문

 while ( 조건식 ) { 

     ... 작업문 ... 

 } 

- 조건식이 true라면 작업문 반복 실행. 조건식이 없으면 error 발생. 

 

3) do-while 문

 do {  

     ... 작업문 ... 

 }  while ( 조건식 ); 

- 조건식의 true, false와 관계없이 작업문을 최초 한번 실행 후 이후 조건식에 따라 진행

 

3) continue와 break

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

- break : 하나의 반복문을 즉시 벗어날 때 사용. 중첩 반복일 경우 안 쪽 반복문에서 break문이 실행되면 안 쪽 반복문만 벗어난다

 

 

7. 자바의 배열 ( array )

• 배열이란? 

- 배열(array)은 인덱스(index)와 인덱스에 대응하는 일련의 데이터들로 이루어진 연속적인 자료 구조

- 배열에는 같은 종류의 데이터들이 순차적으로 저장된다

• 배열 선언 및 생성 

- C/C++ 와 달리 레퍼런스 변수 선언 및 생성의 단계가 필요하다

1) 배열에 대한 레퍼런스 변수 선언

- 배열 공간은 생성되지 않는다. intArray 변수는 레퍼런스(참조)라고 불리는 배열의 주소 값을 가지며, 그 자체가 배열은 아니다.

- 선언시 [ ] 안에 배열의 크기를 지정해서는 안 된다.

 

2) 배열 생성

- 배열 생성은 배열 공간을 할당받는 과정이다.

- new 연산자를 이용해 배열을 생성한다.

 

3) 배열 초기화

- { 값, ... } 을 할당해 배열을 초기화 한다.

• 레퍼런스 치환과 배열 공유

- 자바에서는 배열 공간과 레퍼런스 변수가 분리되어 있기 때문에 생성된 배열에 대한 공유가 쉽게 이루어질 수 있다.

   즉, 생성된 배열을 다수의 레퍼런스 변수가 참조할 수 있다.

-> intArray 배열을 복사해 새로운 배열을 만들어 myArray 배열을 생성하는 것이 아니다. 

     레퍼런스만 복사되므로, myArray는 intArray의 레퍼런스 값을 가지게 됨으로써, myArray는 intArray 배열을 공유하게 된다.

     myArray로 intArray의 배열 원소를 마음대로 접근할 수 있게 된다.

 

• 배열의 크기, length 필드

- 자바는 배열을 객체로 다루기에, 배열이 생성되면 배열 공간과 함께 배열의 크기 값을 가진 length 필드가 배열 객체내에 생성된다.

- legth 필드를 이용하면 프로그램에서 배열의 크기를 따로 관리할 필요가 없다.

-> myArray는 intArray 레퍼런스를 복사했기에 myArray.length 에는 10이 저장된다.

• 배열과 for-each 문

- for 문을 변형한 for-each문은 배열이나 나열(enumeration)의 크기만큼 루프를 돌면서 각 원소를 순차적으로 접근하는데 유용하다.

 for ( 변수 : 배열 레퍼런스 ) { 

     ... 반복 작업문 ...

 } 

• 다차원 배열

1) 2차원 배열 선언

-  타입 레퍼런스변수명[][] = new 타입[행 수][열 수] 

int i[][] = new int[2][5];
int size1 = i.length; // 2
int size2 = i[0].length; // 5
int size3 = i[1].length; // 5

-> (2 x 5)의 2차원 배열로, 행의 각 원소는 1차원 배열에 대한 레퍼런스이다.

 

2) 2차원 배열의 초기화 및 사용 예제

• 메소드의 배열 리턴

- 메소드가 배열을 리턴하는 경우 배열 메모리 전체가 아닌 배열에 대한 레퍼런스만 리턴된다.

   따라서 메소드의 리턴 타입에는 배열의 크기를 지정하지 않는다.

-> 리턴 후 new로 할당받은 배열 메모리는 사라지지 않는다. 지역 변수인 temp만 사라진다.

-> int Array는 메소드의 리턴 타입과 동일하게 선언한다. 선언 당시에는 null이다

 

8. 자바의 예외 처리 ( exception handling )

• 예외(exception)란?

- 실행 중 오동작이나 결과에 악영향을 미치는 예상치 못한 상황이 발생하는 것

ex) 정수를 0으로 나누는 경우(ArithmeticException),

      배열의 크기보다 큰 인덱스로 배열의 접근하는 경우(ArrayIndexOutOfBoundsException),

      정수를 읽는 코드가 실행되고 있을 때 사용자가 문자를 입력한 경우(InputMismatchException) 등

• 자바의 예외 처리 try-catch-finally 문

 try 
     ...예외가 발생할 가능성이 있는 실행문(try 블록)... 
 } catch (처리할 예외 타입 선언) 
     ...예외 처리문(catch 블록)... 
 } finally 
     ...예외 발생 여부와 상관없이 무조건 실행되는 문장(finally 블록)... 
 } 

-> try 블록에서 예외가 발생한 경우, 남은 실행문을 실행하지 않고 바로 catch 블록의 예외 처리문으로 점프해 실행하고 이후 finally문을 실행한다

-> 발생한 예외와 catch()문의 처리할 예외 타입이 일치해야 한다.

-> 예외가 발생하지 않으면, 바로 finally 블록으로 이동한다. finally 블록은 선택적 구문으로 생략 가능하다.

-> 다수의 예외 처리시, 여러 개의 catch문을 연속적으로 작성할 수 있다. 이 중 발생한 예외와 타입이 일치하는 catch문이 수행된다. catch 블록 내에서 System.exit(0)을 호출하면 언제든지 프로그램을 종료할 수 있다.

• 자바의 예외 클래스

예외 타입(예외 클래스) 예외 발생 경우 패키지
ArithmeticException 정수를 0으로 나눌 때 발생 java.lang
NullPointerException null 레퍼런스를 참조할 때 발생 java.lang
ClassCastException 변환할 수 없는 타입으로 객체를 변환할 때 발생 java.lang
OutOfMemoryError 메모리가 부족한 경우 발생 java.lang
ArrayIndexOutOfBoundsException 배열의 범위를 벗어난 접근 시 발생 java.lang
IllegalArgumentException 잘못된 인자 전달 시 발생 java.lang
IOException 입출력 동작 실패 또는 인터럽트 시 발생 java.io
NumberFormatException 문자열이 나타내는 숫자와 일치하지 않는 타입의 숫자로 변환 시 발생 java.lang
InputMismatchException Scanner 클래스의 nextInt()를 호출하여 정수로 입력받고자 하였지만, 사용자가 'a'등과 같이 문자를 입력한 경우 java.util

 

 

출처 : Java essential_생능출판

'Language > Java' 카테고리의 다른 글

Java 기본 문법 문제  (1) 2024.07.09
Java 기본 문법 Ⅱ - Scanner, 연산자, 조건문  (0) 2024.07.09
Java 기본 문법 Ⅰ - 식별자, 데이터 타입  (0) 2024.06.30
Java의 특징  (0) 2024.06.30