오늘은 개발과 커밋 자세히보기

프로그래밍 공부/Java

[ Java 프로그래밍 ] 공부 정리 - 3강. 반복문과 배열 그리고 예외 처리

호크테마 2023. 4. 30. 14:20

* 공부 정리일자 (2022년 8~12월) 
- 책 : 명품 자바 에센셜 
- 개인적으로 공부 및 복습하면서 정리한 내용입니다. (사진 제외) 


* 목차
3장. 반복문과 배열 그리고 예외 처리 (책 93p)
3.1 반복문 (책 93p)
3.2 continue 문과 break 문 (책 97p)
3.3 자바의 배열 (책 101p)
3.4 다차원 배열 (책 110p)
3.5 메소드의 배열 리턴 (책 112p)
3.6 자바의 예외 처리 (책 114p) 


1. 복습 (중요 키워드 위주)
3) 3강. 반복문과 배열 그리고 예외 처리 (책 93p)
3.1) 반복문

* 자바 반복문 
- for 문, while 문, do-while 문

(1) for 문 - 가장 많이 사용하는 반복문

* 예제 3-1 : for 문을 이용하여 1부터 10까지 합 출력하기
- for 문을 이용하여 1부터 10까지 덧셈으로 표시하고 합을 출력하라.

(2) while문
- while 문의 구성과 코드 사례
- 조건식이 ‘참’인 동안 반복 실행

* 예제 3-2 : while 문을 이용하여 입력된 정수의 평균 구하기
- while문을 이용하여 정수를 여러 개 입력 받고 평균을 출력하라.
- 0이 입력되면 입력을 종료한다.

(3) do-while 문
- do-while 문의 구성과 코드 사례
- 조건식이 ‘참’인 동안 반복 실행
- 작업문은 한 번 반드시 실행

* 예제 3-3 : do-while 문을 이용하여 ‘a’에서 ‘z’까지 출력하기
- do-while문을 이용하여 'a'부터 'z'까지 출력하는 프로그램을 작성하라.

(4) 중첩 반복
- 반복문이 다른 반복문을 내포하는 구조

- 10000명의 학생이 있는 100개 대학의 모든 학생 성적의 합을 구할 때,
- for 문을 이용한 이중 중첩 구조

* 예제 3-4 : 2중 중첩을 이용한 구구단 출력하기
- 2중 중첩된 for문을 이용하여 구구단을 출력하는 프로그램을 작성하라.


3.2) continue 문과 break 문 (책 97p)

(1) continue 문
- 반복문을 빠져 나가지 않고, 다음 반복으로 제어 변경
- 반복문에서 continue; 문에 의한 분기

* 예제 3-5 : continue 문을 이용하여 양수 합 구하기
- 5개의 정수를 입력 받고 양수 합을 구하여 출력하는 프로그램을 작성하라.

(2) break 문
- 반복문 하나를 즉시 벗어갈 때 사용
-- 하나의 반복문만 벗어남
-- 중첩 반복의 경우 안쪽 반복문의 break 문이 실행되면 안쪽 반복문만 벗어남

* 예제 3-6 : break 문을 이용하여 while 문 벗어나기
- "exit"이 입력되면 while 문을 벗어나도록 break 문을 활용하는 프로그램을 작성하라. 


3.3) 자바의 배열 (책 101p)

(1) 배열(array)
- 인덱스와 인덱스에 대응하는 데이터들로 이루어진 자료 구조
-- 배열을 이용하면 한 번에 많은 메모리 공간 선언 가능

- 배열은 같은 타입의 데이터들이 순차적으로 저장되는 공간
-- 원소 데이터들이 순차적으로 저장됨
-- 인덱스를 이용하여 원소 데이터 접근
-- 반복문을 이용하여 처리하기에 적합한 자료 구조

- 배열 인덱스
-- 0부터 시작
-- 인덱스는 배열의 시작 위치에서부터 데이터가 있는 상대 위치


(2) 배열 선언과 생성
(2.0) 배열 선언 및 생성 디테일
- 배열 선언과 배열 생성의 두 단계 필요

(2.1) 배열 선언
- 배열의 이름 선언(배열 레퍼런스 변수 선언)

(2.2) 배열 생성
- 배열 공간 할당 받는 과정

(2.3) 배열 초기화
- 배열 생성과 값 초기화

(2.4) 배열을 초기화하면서 생성한 결과

(3) 배열 인덱스와 배열 원소 접근
* 배열 인덱스
- 배열의 인덱스는 0 ~  (배열 크기 – 1)

- 인덱스를 잘못 사용한 경우
- 반드시 배열 생성 후 접근

(4) 레퍼런스 치환과 배열 공유
- 레퍼런스 치환으로 두 레퍼런스가 하나의 배열 공유

* 예제 3-7 : 배열 선언 및 생성
- 양수 5개를 입력 받아 배열에 저장하고, 제일 큰 수를 출력하는 프로그램을 작성하라. 

(5) 배열의 크기, length 필드* 자바의 배열은 객체로 처리
- 배열 객체의 length 필드
-- 배열의 크기는 배열 객체의 length 필드에 저장

- length 필드를 이용하여 배열의 모든 값을 출력하는 사례

* 예제 3-8 : 배열의 length 필드 활용
- 배열의 length 필드를 이용하여 배열 크기만큼 정수를 입력 받고 평균을 출력하라.

* 참고) 함수 호출 시 배열 전달 비교 : C/C++ vs. 자바

(6) 배열과 for-each 문
* for-each 문
- 배열이나 나열(enumeration)의 원소를 순차 접근하는데 유용한 for 문

- for-each 문으로 정수 배열의 합을 구하는 사례

* 예제 3-9 for-each 문 활용
- for-each 문을 활용하여 int [] 배열의 합을 구하고, String [] 배열의 문자열을 출력하는 사례를 보인다.


3.4) 다차원 배열 (책 110p)

(1) 2차원 배열
(1.1) 2차원 배열 선언

(1.2) 2차원 배열 생성

(1.3) 2차원 배열의 구조

(1.4) 2차원 배열의 length 필드
- i.length  ->  2차원 배열의 행의 개수로, 2
- i[n].length ->  n번째 행의 열의 개수
- i[1].length      ->  1번째 행의 열의 개수, 5

(1.5) 2차원 배열의 초기화
- 배열 선언과 동시에 초기화

* 예제 3-10 : 2차원 배열 생성 및 활용하기
- 2차원 배열에 학년별로 1, 2학기 성적을 저장하고, 4년 전체 평점 평균을 출력하라.


3.5) 메소드의 배열 리턴 (책 112p)
(1) 배열 리턴
- 배열의 레퍼런스만 리턴(배열 전체가 리턴되는 것이 아님)

(2) 메소드의 리턴 타입
- 리턴하는 배열 타입과 리턴 받는 배열 타입 일치
- 리턴 타입에 배열의 크기를 지정하지 않음

(3) 배열을 리턴 받아 사용하는 과정

* 예제 3-11 : 배열 리턴
- 일차원 정수 배열을 생성하여 리턴하는 makeArray()를 작성하고, 이 메소드로부터 배열을 전달받는 프로그램을 작성하라.


3.6) 자바의 예외 처리 (책 114p)

(1) 예외 (Exception)
- 실행 중 오동작이나 결과에 악영향을 미치는 예상치 못한 상황 발생 
-- 자바에서는 실행 중 발생하는 에러를 예외로 처리

* 실행 중 예외가 발생하면
- 자바 플랫폼은 응용프로그램이 예외를 처리하도록 호출
-- 응용프로그램이 예외를 처리하지 않으면 프로그램 강제 종료 시킴

* 예외 발생 경우
- 정수를 0으로 나누는 경우
- 배열의 크기보다 큰 인덱스로 배열의 원소를 접근하는 경우
- 정수를 읽는 코드가 실행되고 있을 때 사용자가 문자를 입력한 경우

* 예제 3-12 : 0으로 나누기 시 예외 발생으로 응용프로그램이 강제 종료되는 경우
- 두 정수를 입력받아 나눗셈을 하고 몫을 구하는 프로그램 코드이다. 
- 사용자가 나누는 수에 0을 입력하면 자바 플랫폼에 의해 예외가 발생하여 프로그램이 강제 종료된다.

(2) 자바의 예외 처리, try-catch-finally 문
* 예외 처리
- 발생한 예외에 대해 개발자가 작성한 프로그램 코드에서 대응하는 것
- try-catch-finally문 사용
-- finally 블록은 생략 가능

* 예외가 발생/발생하지 않은 경우 제어의 흐름

(3) 자바의 예외 클래스
- 자바 플랫폼은 응용프로그램이 실행 중 오류를 탐지할 수 있도록 많은 예외를 클래스 형태로 제공

* 예외 클래스 사례
- 배열의 범위를 벗어나 원소를 접근하는 예외 처리
- ArrayIndexOutOfBoundsException 예외

* 예제 3-13 : 0으로 나누는 예외에 대처하는 try-catch 블록 만들기
- try-catch-finally 블록을 이용하여 예제 3-12를 수정하여, 
 정수를 0으로 나누는 경우에 "0으로 나눌 수 없습니다!"를 출력하는 프로그램을 작성하라.

* 예제 3-14 : 입력 오류시 발생하는 예외 (InputMismatchException)
- Scanner 클래스를 이용하여 3개의 정수를 입력받아 합을 구하는 프로그램을 작성하라. 
 사용자가 정수가 아닌 문자를 입력할 때 발생하는 InputMismatchException 예외를 처리하여 다시 입력받도록 하라.