일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 자바 실습
- 컴퓨터비전
- 데이터베이스
- ChatGPT
- 컴퓨터구조
- 파이썬
- SQL
- 중학수학
- 중학1-1
- 상속
- 정보처리기사필기
- 자바
- rnn
- 개발일기
- JDBC
- html/css
- 딥러닝
- 자바스크립트
- 자바스크립트심화
- CSS
- 순환신경망
- 디버깅
- JSP/Servlet
- 데이터분석
- c언어
- 정보처리기사실기
- 연습문제
- JSP
- 머신러닝
- 혼공머신
- Today
- Total
클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지
[Spring반] 중간시험 2 - Java 이론 시험 및 문제 풀이 2 : 문제 7~8번 <조건문> 본문
[Spring반] 중간시험 2 - Java 이론 시험 및 문제 풀이 2 : 문제 7~8번 <조건문>
huenuri 2024. 12. 4. 03:04이어서 7번 문제부터 풀어보겠다. 처음 문제는 학습 준비도 하고 일기도 쓰느라 1시간 반 가까이 걸렸지만 이번에는 1시간 안에 두 번째 문제 풀이를 마치려고 한다.
Java 이론 시험 두 번째
문제 7번
Java의 조건문 중 if 문과 switch의 차이점을 서술하시오.
자바의 조건문 if와 switch는 모두 조건에 따라 다른 실행 경로를 선택할 때 사용되지만, 각각의 동작 방식과 사용 상황에 차이가 있다.
1. if 문
- 용도 : 조건식의 결과가 true인지 판단해서 코드 블록을 실행
- 특징
- 범용성 : 다양한 형태의 조건을 지원
- 비교 연산 (==, >, <, >=, <=)과 논리 연산 (&&, ||)을 자유롭게 조합 가능
- 조건의 수에 제한이 없음. 여러 개의 조건을 else if로 연결 가능
- 조건식이 복잡하거나 범위 기반의 조건에 적합
- 범용성 : 다양한 형태의 조건을 지원
- 구조
if (조건1) {
// 조건1이 true일 때 실행
} else if (조건2) {
// 조건2가 true일 때 실행
} else {
// 위 조건들이 모두 false일 때 실행
}
예제
num이 10이니 양수가 된다.
2. switch 문
- 용도: 하나의 변수 값에 따라 여러 경우(case) 중 하나를 실행
- 특징
- 비교하는 값이 정수, 문자, 문자열, 열거형(enums)에 한정됨
- 조건식 대신 정확히 일치하는 값에만 반응
- 조건이 많아지면 가독성이 좋아지고, 특정 값 기반의 분기에 적합
- case 뒤에 break를 명시하지 않으면 다음 case로 이어져 실행됨
- 구조
switch (변수) {
case 값1:
// 값1일 때 실행
break;
case 값2:
// 값2일 때 실행
break;
default:
// 어떤 case에도 해당하지 않을 때 실행
}
예제
case가 3이니 결과는 수요일이 된다.
차이점 요약
구분 | if 문 | switch 문 |
조건식 형태 | 비교 연산, 논리 연산 등 복잡한 조건 가능 | 변수 값이 특정 값과 일치하는지 판단 |
사용 가능한 데이터 | boolean, 정수, 실수, 문자열 등 거의 모든 값 | 정수, 문자, 문자열, 열거형(enums) |
가독성 | 조건이 많아지면 복잡해질 수 있음 | 많은 경우를 다룰 때 가독성이 좋음 |
속도 | 조건이 많을수록 성능에 약간의 영향 있음 | 특정 값 기반이라 더 빠를 수 있음 |
유연성 | 범위, 복잡한 조건식 모두 가능 | 단순히 값과 일치 여부만 판단 |
사용 예시
- if 문은 범위 기반 또는 복잡한 조건이 필요한 경우에 적합
- switch 문은 고정된 값(정확히 일치하는 값)에 따라 분기할 때 적합
근데 여기서 이해가 안되는 코드가 있어 한번 분석해보려고 한다. char grade = sc.next().charAt(0);이다. 이 코드는 사용자로부터 문자열을 입력받아 그 문자열의 첫 번째 문자를 char 타입으로 가져오는 과정이다.
1. sc.next()
- Scanner의 next() 메서드는 사용자가 입력한 한 단어를 문자열(String)로 읽어온다.
- 입력은 공백이나 엔터로 구분되는데, 첫 번째 공백이나 줄바꿈 전까지의 내용을 가져온다고 보면 된다.
- 예를 들어, 사용자가 A B C라고 입력하면 sc.next()는 A를 반환
2. .charAt(0)
- String 객체에서 특정 인덱스(index)에 위치한 문자를 가져오는 메서드이다.
- charAt(0)은 문자열의 첫 번째 문자(인덱스 0)를 가져온다.
- 예를 들어, 문자열 "A"에서 charAt(0)은 문자 'A'를 반환
3. 결과적으로
- sc.next()로 사용자 입력을 문자열로 읽고, .charAt(0)으로 그 문자열의 첫 번째 문자를 꺼내서 char 타입으로 저장한다.
그러니까 charAt(0)은 A에서부터 영문자를 받기 위한 문자를 반환하는 함수였다.
문제 8번
다음 두 코드의 실행 결과는 같지만 실행 방식에서는 차이점이 존재한다. 어떠한 차이점이 있는지 서술하시오.
예시 1
원래 시험문제는 else문이 없었지만 난 추가해 보았다. 그리고 이 코드를 변형해 사용자로부터 입력받아 출력하는 예제로 바꾸어보겠다.
예시 1 변형
현재 가지고 있는 돈에 따라 메뉴가 달라지는 출력 코드로 작성해 보았다. 이제 예시 두 번째 코드이다.
예시 2
이 코드를 조금 전처럼 사용자로부터 값을 받는 코드로 수정해 보겠다.
예시 2 변형
이제 진짜 문제를 풀어보자.
1. 첫 번째 코드
- 조건문 특징
- 조건문이 연속적으로 작성되어 있어, 각 조건은 독립적으로 평가된다.
- 조건 money >= 12000, money >= 10000, money >= 8000, money >= 6000 등이 순차적으로 평가된다.
- 실행 방식
- 조건이 위에서 아래로 실행되며, if-else if 구조에 따라 첫 번째로 참인 조건에서 실행이 멈춘다.
- 불필요하게 조건을 평가하는 경우는 없다. 예를 들어, money = 12000이라면 첫 번째 조건이 참이므로 이후 조건은 평가되지 않는다.
2. 두 번째 코드
- 조건문 특징
- 조건문에 범위를 명시적으로 설정하여 조건을 더 구체화했다.
- 각 조건에 money >= X && money < Y 형태로 범위를 설정했기 때문에 조건이 좀 더 명확하다.
- 실행 방식
- 각 조건은 특정 범위 내에서만 참이 되므로, 논리적으로 불필요한 범위 비교가 제거된 것처럼 보인다.
- 하지만 첫 번째 코드에 비해 추가적으로 범위를 체크(money < Y)하는 조건이 포함되므로, 조건 평가 비용이 조금 더 높다.
비교
특징 | 첫 번째 코드 | 두번째 코드 |
조건 구성 | 각 조건이 독립적으로 >=만 검사 | 각 조건이 범위(>= X && < Y)로 구체화 |
효율성 | 조건이 참이면 이후 조건은 평가하지 않음 | 조건에 추가적인 범위 비교가 들어가 실행 비용이 약간 증가 |
가독성 | 비교적 간결하지만 조건 범위가 명시적이지 않음 | 범위가 명시적이라 논리적으로 이해하기 쉬움 |
유연성 | 조건 추가 시 범위를 고려하지 않아도 됨 | 조건 추가 시 범위 설정을 명확히 해야 함 |
결론
- 첫 번째 코드는 간단하며, 조건이 참인 경우 추가적인 평가를 하지 않으므로 효율적이다.
- 두 번째 코드는 조건이 더 명확하게 표현되어 가독성이 좋지만, 추가적인 범위 평가가 포함되므로 조건 평가 비용이 약간 더 높을 수 있다.
실제 코드 작성 시 가독성과 명확성을 중시한다면 두 번째 방식을, 단순하고 효율적인 조건 평가를 원한다면 첫 번째 방식을 선택하면 된다!
학습을 마치고
문제 하나를 푸는데 정확하게 이해하려고 하기에 예제도 많이 들고 풀이 과정이 정말 길었다. 이번 포스트에서는 두 문제를 푸는 것으로 끝마치기로 했다. 이 문제를 통해 그동안 개념적으로 알기는 하지만 잘 설명할 수 없었던 if와 switch 문의 차이점을 확실하게 이해할 수 있게 되었다.
역시 공부는 이렇게 깊이 있게 해야 한다는 걸 느끼는 시간이 되었다. 다음 문제도 계속해서 풀어보겠다.
'개발 포트폴리오 > 수료증 및 시험' 카테고리의 다른 글
[Spring반] 중간시험 4 - Java 이론 시험 및 문제 풀이 4 : 문제 9번 응용 ~ 11번 <반복문2> (0) | 2024.12.08 |
---|---|
[Spirng반] 중간시험 3 - Java 이론 시험 및 문제 풀이 3 : 문제 9번 <반복문> (0) | 2024.12.04 |
[Spring반] 중간시험 1 - Java 이론 시험 및 문제 풀이 1 : 문제 1~6번 <자료형과 연산자> (1) | 2024.12.04 |
자바 2 이수증 (0) | 2024.12.03 |
자바스크립트 심화 이수증 (1) | 2024.12.02 |