자바 기본 문법에 대해 학습했다. 헷갈리는 부분, C++과 다른 개념에 대해 기록했다.
- 반복문
for문: 여러 형식으로 작성 가능하다.
ex) for(초기작업;;반복 후 작업) 이처럼 반복 조건이 비어있으면 true로 간주하고 무한 반복
while문: 반복 조건이 들어가 있지 않으면 컴파일 오류
ex) while(조건식){
....
}
do-while문: 최소 한 번 작업문을 실행한다. 반복 조건이 없으면 컴파일 오류
break문: 하나의 반복문만 벗어난다.
ex) for(...){
while(...){
break;
}
} //안쪽에 있는 while문만 벗어난다
- 배열: 인덱스와 인덱스에 대응하는 같은 타입의 데이터들이 순차적으로 저장
- 한 번에 많은 메모리를 할당할 수 있다.
<배열 만들기>
선언 -> 생성 두 단계가 필요
선언: int[] array; //자바에서는 주로 자료형을 앞쪽에 붙여서 선언한다.
선언과 동시에 생성: int intArray[] = new int[10];
자바에서 레퍼런스 타입으로는 배열, 클래스, 인터페이스가 있다. -> 객체로 다루는 느낌
<선언>
int intArray []; -> 배열의 타입 int / 배열에 대한 레퍼런스 변수 intArray / 배열 선언 []
레퍼런스 변수는 보통 스택 메모리에 저장된다.
레퍼런스 변수는 객체를 가리킬 수 있는 레퍼런스 값을 가진다.
<생성>
intArray = new int[5]; -> 객체로 만드는 것이다.
int타입의 객체를 힙 메모리에 저장한다.
<잘못된 예시>
잘못된 선언 : int intArray[10]; ---> 배열의 크기를 미리 지정하면 안된다.
잘못된 접근 : int intArray[]; ---> 아직 배열이 생성되지 않음 == 객체가 할당되지 않음
int intArray[1] = 8;
<레퍼런스 치환과 공유>
int intArray[] = new int[5];
int myArray[] = intArray;
intArray[1] = 2;
myArray[1] = 6 //값을 바꿀 수 있다
myArray라는 다른 레퍼런스가 같은 객체인 배열을 공유한다. 접근 또한 가능하다.
<length 필드>
length는 메소드가 아닌 변수로 생각한다. 필드라고 하면 클래스 멤버변수로 생각하면 된다.
배열의 크기 즉, 사이즈를 나타낼 수 있다.
<for-each문>
배열이나 나열에 순차적으로 접근하는데 유용하다.
for(int i : num) { ... }
C++과 유사한 방식이다.
- 2차원 배열
2차원 배열은 배열을 가지는 배열로 생각하면 된다.
int i[][] = new int[2][5];
int size1 = i.length; // 2
int size2 = i[0].length; // 5
int size3 = i[1].length; // 5 -> 1번째 행의 열의 개수이다.
i가 1차원 배열을 갖는 배열을 가리킨다고 생각하자.
- 배열의 리턴
int[] makeArray(){
int temp[] = new int[4]; //temp는 레퍼런스 변수이고 int형 size가 4인 배열 객체를 가리키는 값이다.
return temp; //메소드에서 레퍼런스값을 리턴한다.
//temp는 객체 값을 가지는 게 아니라 객체를 찾아갈 수 있는 값을 가진다.
}
.
.
.
int[] intArray; //intArray는 레퍼런스 변수이다.
intArray = makeArray(); //레퍼런스 값을 리턴한다.
//따라서 외부에서도 배열 객체에 접근이 가능하다.
리턴 타입에 배열의 크기를 지정하지 않는다.
- main(String[] args) 메소드 인자 전달
공백을 구분으로 전달하는데 이때 String 배열에 저장한다.
- 예외 처리
Compile error : 문법 오류 / C나 C++이 처리하는 과정과 동일하다.
Runtime error: 실행 중 발생한 오류 / Java에서는 Exception
-정수를 0으로 나누는 경우
-배열보다 큰 인덱스로 배열의 원소에 접근하는 경우
-존재하지 않는 파일을 읽으려고 하는 경우
-정수 입력을 기다리는 코드가 실행되고 있을 때, 문자가 입력된 경우
등 다양한 예외 존재
예외 발생 -> 자바 플랫폼 인지 -> 응용프로그램에서 전달
==> 예외를 처리하지 않으면 강제 종료된다. ( JVM이 종료시킴)
try / catch / finally 사용하여 예외 처리 가능
try{
//->예외가 발생!
//실행문
// 예외 발생 X이면 바로 finally로 간다
}
catch(처리할 예외 타입 선언){
//->예외 처리문으로!
//예외 처리문
}
finally{
//->마지막으로 finally
//finally 블록 문
}
다양한 예외 타입(클래스)가 존재한다.
try{
n = scanner.nextInt(); //예외가 발생하면 객체 형식으로 던진다.
}
catch(InputMismatchException e){ //부모 클래스인 Exception으로 받아도 된다.
//예외 처리문
//예외 처리문이 존재하지 않으면 무한 루프 돈다.
}
배열에 대한 개념이 C++과 많이 다른 거 같다.
데이터 타입에 따라 다른 해석, 배열, 예외 처리를 중점적으로 공부해야겠다.
'자바기반응용프로그래밍' 카테고리의 다른 글
5. 클래스와 상속(2) (0) | 2025.09.30 |
---|---|
4. 클래스와 상속(1) (0) | 2025.09.23 |
2. 자바 문법 (1) (1) | 2025.09.12 |
1. 자바 입문 (0) | 2025.09.12 |