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 |