1. 조건문과 반복문
조건문: if문, switch문
- if문은 조건이 참일 경우 특정 코드를 실행하는 조건문이다.
- 조건식이 참일 때만 해당 블록의 코드가 실행된다.
int num = 10;
if (num > 5) {
System.out.println("num은 5보다 크다");
}
- if-else문은 조건이 참일 때와 거짓일 때 각각 다른 코드를 실행하는 구조이다.
int num = 3;
if (num > 5) {
System.out.println("num은 5보다 크다");
} else {
System.out.println("num은 5보다 작거나 같다");
}
- if-else if-else문은 여러 조건을 순차적으로 검사하여 해당 조건이 참일 경우 그 블록의 코드를 실행한다.
int score = 85;
if (score >= 90) {
System.out.println("A 등급");
} else if (score >= 80) {
System.out.println("B 등급");
} else {
System.out.println("C 등급");
}
- switch문은 하나의 변수 값에 따라 여러 분기 처리를 할 때 유용하다.
- case를 사용해 각 조건을 구분하고, break로 각 조건이 끝나면 빠져나가도록 한다.
int day = 3;
switch (day) {
case 1:
System.out.println("월요일");
break;
case 2:
System.out.println("화요일");
break;
case 3:
System.out.println("수요일");
break;
default:
System.out.println("기타 요일");
}
반복문: for문, while문, do-while문
- for문은 반복 횟수가 정해져 있을 때 사용하는 반복문이다. 초기화, 조건식, 증감식을 이용해 반복을 제어한다.
for (int i = 0; i < 5; i++) {
System.out.println("i의 값: " + i);
}
- while문은 조건식이 참일 동안 반복 실행하는 구조이다.
- 조건을 먼저 검사하기 때문에 조건이 거짓일 경우 한 번도 실행되지 않을 수 있다.
int count = 0;
while (count < 3) {
System.out.println("count: " + count);
count++;
}
- do-while문은 최소 한 번은 블록 내의 코드를 실행한 후, 조건을 검사하여 반복 여부를 결정한다.
int count = 0;
do {
System.out.println("count: " + count);
count++;
} while (count < 3);
- break문은 반복문을 즉시 종료하는 데 사용된다.
- switch문에서도 사용되어 특정 조건을 만족할 때 분기 처리를 중단할 수 있다.
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // i가 5일 때 반복문 종료
}
System.out.println("i: " + i);
}
- continue문은 반복문의 나머지 부분을 건너뛰고 다음 반복으로 넘어가게 한다.
- 반복을 건너뛰고 조건을 다시 검사하게 된다.
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue; // 짝수일 경우 출력하지 않고 다음 반복으로 넘어감
}
System.out.println("i: " + i);
}
2. 참조 타입
참조 타입과 참조 변수
- 자바에서 데이터 타입은 크게 기본 타입(primitive type)과 참조 타입(reference type)으로 나눌 수 있다.
- 기본 타입에는 int, float, boolean 등이 있으며, 참조 타입에는 배열, 클래스, 인터페이스 등이 포함된다.
- 기본 타입은 실제 값을 저장하고, 참조 타입은 값이 저장된 메모리 주소를 참조한다.
- 기본 타입의 데이터는 스택(stack)에 저장되지만, 참조 타입의 데이터는 힙(heap) 영역에 저장된다.
- 참조 타입의 변수는 힙 영역에 저장된 객체의 주소를 참조한다.
- 참조 타입의 변수에서 ==와!= 연산자는 두 참조 변수가 같은 객체를 참조하는지 비교할 때 사용된다.
- 객체의 값을 비교하려면 .equals() 메서드를 사용해야 한다.
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1 == str2); // false, 서로 다른 객체를 참조
System.out.println(str1.equals(str2)); // true, 문자열의 내용이 같음
- 참조 타입 변수는 null 값을 가질 수 있다.
- 이는 어떠한 객체도 참조하지 않는 상태를 의미한다.
- null 상태에서 객체의 메서드나 멤버에 접근하려고 하면 NullPointerException이 발생한다.
String str = null;
// str.length(); // NullPointerException 발생
- String은 참조 타입으로, 문자열을 표현하는 데 사용된다.
- 문자열 리터럴은 힙 영역의 문자열 상수 풀에 저장되며, 동일한 문자열 리터럴은 동일한 메모리 주소를 참조한다.
String s1 = "Hello";
String s2 = "Hello";
System.out.println(s1 == s2); // true, 같은 리터럴은 동일한 메모리 주소를 참조
배열
- 배열은 같은 타입의 여러 데이터를 하나의 변수로 묶어서 저장하는 자료구조이다.
- 배열은 고정된 크기를 가지며, 인덱스를 사용해 요소에 접근할 수 있다.
- 배열을 사용하려면 먼저 선언해야 한다.
- 배열의 타입과 이름을 지정하고, 대괄호([])를 사용한다.
int[] numbers;
- 배열은 new 키워드를 사용하여 생성한다. 배열의 크기를 지정해야 한다.
numbers = new int[5];
- 배열의 길이는. length 속성을 통해 알 수 있다.
System.out.println("배열의 길이: " + numbers.length);
- 자바 프로그램은 명령 라인에서 인수를 받아 배열로 저장할 수 있다.
- main 메서드의 매개변수인 String[] args를 통해 입력값을 받는다.
public static void main(String[] args) {
for (String arg : args) {
System.out.println(arg);
}
}
- 다차원 배열은 배열의 배열이다.
- 주로 2차원 배열이 많이 사용되며, 행과 열로 데이터를 관리한다.
int[][] matrix = new int[3][3];
matrix[0][0] = 1;
- 배열은 객체를 참조할 수도 있다.
- 객체를 담는 배열을 선언하고 각 요소에 객체를 할당할 수 있다.
String[] names = new String[3];
names[0] = "Alice";
names[1] = "Bob";
names[2] = "Charlie";
- 배열을 복사할 때는 System.arraycopy() 메서드를 사용하거나 Arrays.copyOf() 메서드를 사용할 수 있다.
int[] original = {1, 2, 3};
int[] copy = new int[original.length];
System.arraycopy(original, 0, copy, 0, original.length);
- 향상된 for문은 배열이나 컬렉션의 모든 요소를 순차적으로 반복할 때 사용된다.
for (int number : numbers) {
System.out.println(number);
}
열거 타입
- 열거 타입(enum)은 여러 개의 상수값을 정의하는 데 사용된다.
- 열거형은 코드의 가독성을 높이고 특정 값만 허용하도록 강제할 때 유용하다.
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
- 열거형 타입으로 변수를 선언하고 사용할 수 있다.
- 열거형을 통해 코드를 보다 직관적이고 안전하게 만들 수 있다.
Day today = Day.WEDNESDAY;
System.out.println("오늘은: " + today);
- 열거형에는 몇 가지 기본 메서드가 포함되어 있다.
- 예를 들어, values() 메서드를 사용하면 열거형에 정의된 모든 값을 배열로 반환할 수 있다.
for (Day day : Day.values()) {
System.out.println(day);
}
- switch문에서 열거형을 사용하면 코드의 가독성을 높이고, 특정 열거형 값에 따라 분기 처리를 할 수 있다.
Day today = Day.MONDAY;
switch (today) {
case MONDAY:
System.out.println("월요일입니다.");
break;
case FRIDAY:
System.out.println("금요일입니다.");
break;
default:
System.out.println("기타 요일입니다.");
}
'IT & AI > AI 지식' 카테고리의 다른 글
JAVA 객체 지향 프로그래밍: 클래스, 상속 (0) | 2024.11.21 |
---|---|
JAVA 초보자를 위한 변수, 연산자, 데이터 입출력 이해 (1) | 2024.11.20 |
C 언어 메모리 동적 할당, 구조체, 파일 입출력 (1) | 2024.11.20 |
C 언어 변수, 다차원 배열, 응용 포인터 정리 (1) | 2024.11.19 |
C 언어 배열, 포인터, 문자열 활용 심화 (0) | 2024.11.19 |