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. 작업문 }
- 초기문: 조건식에서 사용하는 변수를 초기화(혹은 지역변수 선언 + 초기화)
- 시작할 때 한 번만 수행, 빈 상태도 가능
- , 로 여러 문장 나열 가능
- 조건식: 논리형 변수/연산 사용
- 조건식에 true/빈칸 이면 무한 반복(infinite loop)된다.
- 조건식에 true/빈칸 이면 무한 반복(infinite loop)된다.
- 작업문: for문이 반복되는 동안 반복 실행
- 반복 후 작업: 작업문이 실행된 후 실행
- , 로 여러 문장 나열 가능
- , 로 여러 문장 나열 가능
- 초기문: 조건식에서 사용하는 변수를 초기화(혹은 지역변수 선언 + 초기화)
while문 (반복 횟수를 처음부터 알 수 없는 경우)
while (조건식) { //1. 조건식 작업문 //2. 작업문 }
- 조건식: 논리형 변수/연산 사용
- 빈칸이면 컴파일 오류 발생
- 조건식에 사용되는 변수를 while문 실행 전에 반드시 초기화
- 조건식 작성이 어려우면 작업문 안에 if문과 break;문을 사용해서 코딩할 것
- 작업문: while문이 반복되는 동안 반복 실행
- 조건식: 논리형 변수/연산 사용
do-while 문 (최소 한 번은 반드시 실행애야 하는 while문)
do { 작업문 //1. 작업문 } while(조건식); //2. 조건식
- 작업문: do-while문이 반복되는 동안 반복 실행
- 조건식: 논리형 변수/연산 사용
- 빈칸이면 컴파일 오류 발생
- 조건식에 사용되는 변수를 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이 명령행 인자
- 명령행 인자들이 각각 문자열로 만들어진다.
- 문자열이 된 인자들이 문자열 배열에 저장된다.
- 문자열 배열에 대한 래퍼런스가 매개변수 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): try-catch 블록으로 ==제어(handling)할 수 있는== 실행시간 오류(run-time-error)
추가 exception 생성 가능
예외 처리: 개발자가 작성한 프로그램의 실행 중에 예외가 발생하면 이에 대응하는 것
event처리 매커니즘(함수 >> 함수 로 점프)
= 예외처리 매커니즘(함수 안 >> 함수 안 으로 점프)try { 예외가 발생할 가능성이 있는 실행문 } catch (처리할 예외 타입 선언 e) { //e: 예외 정보가 저장된 예외타입 객체 예외 처리문 //catch는 오버로딩이 가능하다. (래퍼런스 형) } //System.exit(0)을 호출하면 언제든지 프로그램 종료 가능 finally { //생략 가능 예외 발생 여부와 상관없이 try에서 return 하더라도 반드시 실행되는 문장 }
- if문(사전 예방): 원래 코드에 필요한 if문과 에러를 위한 if문을 한 눈에 구분X >> 가독성 떨어짐
- try-catch문(사후 처리): 평소에는 try문만 읽으면 됨 >> 가독성 올라감
예외 클래스
OS: (예외)에러가 나면 기본적으로 프로그램 종료
구조체 전달> JVM: 구조체에 대응하는 클래스를 부름
클래스 전달> APP
'수업 > Object-Oriented Programming' 카테고리의 다른 글
<객체지향 프로그래밍> Chapter 04 클래스와 객체 (0) | 2019.04.22 |
---|---|
<객체지향 프로그래밍> 객체 지향 특성 (0) | 2019.04.05 |