[학습목표]
1. if – else 와 switch 문을 활용하여 조건을 평가하고 프로그램의 흐름을 제어할 수 있다. 2. 비교 연산( > , < . == , !=) 와 논리 연산(&&, || , !)을 조합하여 복잡한 조건식을 구성할 수 있다. 3. 반복문 (for, while, do-while) 을 이해하고 상황에 맞게 활용할 수 있다. - for 루프를 사용하여 정해진 횟수만큼 반복되는 로직을 구현할 수 있다. - while 루프를 활용하여 특정 조건이 충족될 때까지 반복되는 코드를 작성할 수 있다. - do – while 루프를 이용하여 코드를 최소 한 번 실행한 후 , 조건을 확인하여 반복을 결정하는 구조를 익힌다. 4. switch 문을 활용하여 다중 분기 구조를 이해하고 활용할 수 있다. 5. 중첩 조건문을 활용하여 복잡한 조건을 효율적으로 처리할 수 있다. |
if 문
조건문은 프로그램이 특정 조건을 만족할 경우에만 특정 코드 블록을 실행하는 구조를 제공한다.
[선언형식]
if (boolean expression) {
statement;
} else if (boolean expression) {
statement;
} else {
statement;
}
ex)
package com.sec04.exam;
public class d_ifTest {
// 1. 여러 조건을 조합한 경우
public static void checkPassOrFail(int score, boolean isPassed) {
// score이 80 이상이고 홀수인 경우
if (score >= 80 && isPassed && score % 2 != 0) {
System.out.println("우수한 성적으로 합격했습니다.");
} else {
System.out.println("조건을 충족하지 못했습니다.");
}
}
// 2. 범위와 논리 연산자를 조합한 경우
public static void checkEligibility(int age, String country) {
// age가 18세 이상 30세 이하이고 "Korea"인 경우는 조건을 충족한다라고 출력하자
// .equals() :
if ((age >= 18 && age <= 30) || country.equals("Korea")) {
System.out.println("조건을 충족합니다.");
} else {
System.out.println("조건을 충족하지 않습니다.");
}
}
// 3. 객체 유형과 조건을 조합한 경우
public static void checkStringLength(Object obj) { // 가장 상위 부모 타입을 선언하게 되면 모든 class 객체는 대입된다.
//instanceof : 객체의 type을 확인하는 연산자
//obj가 String 클래스의 인스턴스이고 , 문자열의 길이가 5보다 큰 경우 메세지 출력
// String -> Object -> (String) obj (String.length())
if (obj instanceof String && ((String) obj).length() > 5) {
System.out.println("길이가 5보다 큰 문자열입니다.");
} else {
System.out.println("조건을 충족하지 않습니다.");
}
}
// 4. 삼항 연산자와 조합한 경우
public static void checkEvenPositive(int num) {
//삼항연산자 : 조건식 ? true 명령 : false 명령;
//num이 2의 배수인 경우 'true' 출력 , 아닌 경우 false 출력
boolean isEven = (num % 2 == 0) ? true : false;
//num이 0보다 크면 "양수" 출력 , 아니면 "음수 또는 0" 출력
String result = (num > 0) ? "양수" : "음수 또는 0";
//isEven이 true이고 result의 결과가 "양수"dlaus 메세지 출력
if (isEven && result.equals("양수")) {
System.out.println("짝수 양수입니다.");
} else {
System.out.println("조건을 충족하지 않습니다.");
}
}
public static void main(String[] args) {
// 1. 여러 조건을 조합한 경우
checkPassOrFail(85, true);
checkPassOrFail(75, false);
// 2. 범위와 논리 연산자를 조합한 경우
checkEligibility(25, "USA");
checkEligibility(35, "Korea");
checkEligibility(17, "Japan");
// 3. 객체 유형과 조건을 조합한 경우
checkStringLength("HelloWorld");
checkStringLength(123);
// 4. 삼항 연산자와 조합한 경우
checkEvenPositive(10);
checkEvenPositive(-5);
}
}
if문을 활용한 예제로 여러 메소드들을 만들어 호출하는 클래스를 만들어보았다.
if ((age >= 18 && age <= 30) || country.equals("Korea"))
여기서 '==' 대신 equals()를 사용한 것을 볼 수 있다.
' =='는 값이 아닌 주소값을 비교한다
값이 같은지 비교하고 싶다면 .equals()를 사용하면 된다.
equals()는 객체의 값을 비교하는 재정의 메소드이다.
그림판으로 그림을 그려 보았다.
m == m1 일 경우에는 주소값으로 비교하게 되어 &100 과 &200으로 다름을 확인할 수 있다.
m.equals(m1)일 경우에는 그 주소 안에 들어있는 값인 100을 비교하므로 같음을 확인할 수 있다.
public static void checkStringLength(Object obj) {
if (obj instanceof String && ((String) obj).length() > 5) {
System.out.println("길이가 5보다 큰 문자열입니다.");
} else {
System.out.println("조건을 충족하지 않습니다.");
}
}
이 부분에서 Object obj를 확인할 수 있다.
이는 가장 상위 부모 타입을 선언하여 모든 class들이 대입될 수 있도록 한다.
instanceof 는 객체의 type을 확인하는 연산자이다.
do ~ while 문
do ~ while 문의 경우 무조건 명령을 한 번 수행한 다음 반복의 조건을 만난다.
이를 사용하는 경우는 예약 시스템으로 볼 수 있다.
[선언형식]
do {
statement;
} while (condition);
```
ex)
public class DoTest {
public static void main(String[] args) {
int i = 1;
do {
System.out.println(i);
i++;
} while (i >= 3);
}
}
for 문
[선언 형식]
for (initialization; condition; update) {
statement;
}
initialization : 초기값을 여러개 선언할 수 있고 , 비워둘 수 도 있다.
condition : 조건식은 여러개 가능하나 결과가 true , false 로 리턴되어야 한다.
update : 루프 변수(제어 변수 , 조건 변수)에 해당하는 변수값을 증가 , 증감한다.
ex)
public class ForTest03 {
public static void main(String[] args) {
for(int i=1; i<=2; i++) {
for(int j=1; j<=3; j++) {
System.out.println("i="+i +" j="+j);
}
System.out.println();
}
}
}
위 코드의 실행을 그림으로 살펴보면 아래와 같다.
여기서 i는 행을 의미하고 j는 열을 의미함을 알 수 있다.
+) 제네릭 타입 for문 출력 형태
for ( int res : ar) {
System.out.println(res);
}
break 문 , continue 문 , return 문
1) break 문
for (int i = 1; i <= 10; i++) {
if (i == 5) {
break;
}
System.out.println(i);
}
위 코드를 보면 for문으로 1부터 10까지 가다가 5를 만날 경우 동작을 멈추고 빠져나온다.
2) continue 문
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) { // 짝수일 경우 루프 진행 , 홀수 일 경우 출력
continue;
}
System.out.println(i);
}
위 코드를 보면 1부터 10까지 가는데 2로 나누었을 경우 나머지가 0이면 루프를 진행하고 그렇지 않은 경우는 출력하는 동작을 한다. 즉 짝수일 경우는 루프 진행하고 홀수일 경우는 출력하는 코드이다.
3) return 문
public class ReturnTest {
public static void main(String[] args) {
printMessage();
}
public static void printMessage() {
System.out.println("Hello, World!");
return;
}
}
return 문은 실행중인 코드를 중단하고 호출한 곳으로 돌아간다.
위 메소드에서 반환형이 void인 경우는 return이 필요 없지만 그렇지 않은 경우는 return을 써야 한다.
switch 문
기존의 `switch` 문에서는 정수형 (`int`)이나 열거형 (`enum`)만 사용할 수 있지만, JDK 21부터는 객체 타입과 `when` 조건을 함께 활용할 수 있다.
[선언 형식]
switch (expression) {
case Type1 variable -> statement;
case Type2 variable -> statement;
case Type3 variable when condition -> statement;
default -> statement;
}
ex)
package com.sec04;
import java.util.Scanner;
public class SwitchTest01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = 0, b = 0;
char op = '\0';
System.out.print(" 두수 와 연산자를 입력(+,-,*,/) : ");
a = sc.nextInt();
b = sc.nextInt();
op = sc.next().charAt(0);
switch (op) {
case '+' :
System.out.println(a + " + " + b + " = " + (a + b));
break;
case '-' :
System.out.println(a + " - " + b + " = " + (a - b));
break;
case '*' :
System.out.println(a + " * " + b + " = " + (a * b));
break;
case '/' :
System.out.println(a + " / " + b + " = " + (double) a / b);
break;
default :
System.out.println("연산자 error");
}// switch end
}// main end
}// SwticTest01 end
switch 문의 변수 -> char , short , int, String 까지 받을 수 있다.
+)
ex)
Object obj = "null"; //type들을 선택해서 쓸 수 있음
switch (obj) {
case Double d -> System.out.println("실수 : "+d);
case Integer i when i > 10 -> System.out.println("10보다 큰 정수: " + i);
case String s -> System.out.println("문자열: " + s);
case Integer i -> System.out.println("정수: " + i);
case null -> System.out.println("Null 값이 입력되었습니다.");
default -> System.out.println("기타 값: " + obj);
}
1) ': break;' 를 -> 화살표 레이블로 대체할 수 있다.
2) 표현식을 간략하게 지정할 수 있다.
3) when 문 사용할 수 있다.
4) null을 사용할 수 있다.
배열
1) 배열의 개념
- 동일한 자료형의 데이터를 하나의 이름으로 관리하는 데이터 객체(data object)이다.
- 배열은 같은 종류의 데이터를 여러 개 선언하는 대신 하나의 변수로 나열형 상수를 인덱스를 통해 관리한다.
- 기본 데이터형과 참조형 객체 배열을 포함하여 모든 자료형에서 사용 가능하다.
- 배열은 선언과 동시에 주소를 할당받아 (바인딩됨) 요소로 관리되며 연속된 메모리 공간을 차지한다.
2) 배열 선언과 생성
참조 변수 선언 -> 배열 생성 -> 초기화의 단계를 거쳐 사용된다
[선언 방식 ]
1) int[] arr;
2) int arr[];
3) var arVar = new int[] {10,20,30}; // 자바 10 이상
- new 연산자 사용하여 배열 생성
ar = new int[5]; //5개의 정수를 동적할다아 배열로 메모리 생성한 후 시작주소 리턴 = 기본값으로 초기화
- 배열 선언 및 초기화
int[] ar = {10, 20, 30, 40, 50}; //나열형 상수로 배열의 메모리 확보 후 시작 주소 리턴
- 그 외
int[] ar = new int []{10,20,30,40,50}; // 나열형 상수로 배열의 동적할당 후 시작 주소 리턴 = 나열된 값으로 초기화
ex)
package com.sec05;
public class a_array {
public static void main(String[] args) {
Test();
}
private static void Test() {
// TODO Auto-generated method stub
// 1) 배열 선언 생성 출력 확인
// 나열형 값을 선언과 동시에 대입했다. , 동적 할당 x
int[] ar = {10, 20, 30, 40, 50};
int ar02[] = {10, 20, 30, 40, 50};
System.out.println("===== case 01 ar 출력 ======");
System.out.println(ar[0]);
System.out.println(ar[1]);
System.out.println(ar[2]);
System.out.println(ar[3]);
System.out.println(ar[4]);
System.out.println();
System.out.println("===== case 02 반복 for문 출력 ======");
for (int i =0;i <5;i++) {
System.out.println(ar[i]);
}
System.out.println("===== case 03 제네릭 타입 for문 출력 = for ~each 루프 출력 ======");
for ( int res : ar) {
System.out.println(res);
}
System.out.println("===== case 04 제네리 ======");
for ( int res : ar) {
System.out.println(res);
}
}
}
'🦁멋쟁이 사자처럼 15기 > 3월달 수업 내용 정리' 카테고리의 다른 글
멋쟁이 사자처럼 12회 ( 03 / 13 ) (0) | 2025.03.13 |
---|---|
멋쟁이 사자처럼 11회차 ( 03 / 12 ) (0) | 2025.03.12 |
멋쟁이 사자처럼 10회차 ( 03 / 11 ) (0) | 2025.03.11 |
멋쟁이 사자처럼 9회차 ( 03 / 10 ) (0) | 2025.03.10 |
멋쟁이 사자처럼 7회차 ( 03 / 06 ) (0) | 2025.03.06 |