이 포스트는 인프런 "김영한의 자바 입문" 섹션 4 강의를 바탕으로 작성하였습니다 :)
[지금 무료] 김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음 강의 - 인프런
프로그래밍에 처음 입문하는 분들을 위한 자바 강의입니다. 코드를 따라하면서 손쉽게 자바를 배울 수 있습니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 자바 입문[사진][임베
www.inflearn.com
01. if문1 - if,else
조건문은
특정 조건에 따라서 다른 코드를 실행하는 문장이다.
크게 if문과 switch문으로 나눌 수 있는데, 우선 if문부터 살펴보자.
If문은
특정 조건이 참인지 확인하고, 그 조건이 참(true)일 경우 특정 코드 블록을 실행한다.
if (condition) {
// 조건이 침일 때 실행되는 코드
}
여기서 "코드 블록"이란
{ } (중괄호) 사이에 있는 코드를 의미한다.
# If1
package cond;
public class If1 {
public static void main(String[] args) {
int age = 20; //사용자 나이
if (age >= 18) {
System.out.println("성인입니다");
}
if (age < 18) {
System.out.println("미성년자입니다");
}
}
}
성인입니다
age = 20 이기 때문에 처음 if문에서 참이 되어 이에 해당하는 코드 블록이 출력된다.
else문은
if문에서 만족하는 조건이 없을 때 실행되는 코드를 제공한다.
if (condition) {
// 조건이 참일 때 실행되는 코드
} else {
// 만족하는 조건이 없을 때 실행되는 코드
}
# If2
package cond;
public class If2 {
public static void main(String[] args) {
int age = 20;
if (age >= 18) {
System.out.println("성인입니다"); //참일 때 실행
} else {
System.out.println("미성년자입니다"); //만족하는 조건이 없을 때 실행
}
}
}
02. if문2 - else if
아래 코드와 같이 조건문에 무조건 if문만을 사용한다면 크게 2가지 문제점이 나타난다.
package cond;
public class If3_1 {
public static void main (String[] args) {
int age = 14 ;
if(age <= 7) { //~7: 미취학
System.out.println("미취학");
}
if(age >=8 && age <= 13) { //8~13: 초등학생
System.out.println("초등학생");
if(age >=14 && age <=16) { //14~16 : 중학생
System.out.println("중학생");
if(age >=17 && age <=19) { //17~19 : 고등학생
System.out.println("고등학생");
if(age >= 20) { //20~: 성인
System.out.println("성인");
}
}
}
첫번째로, 불필요한 조건 검사를 해야한다.
이미 조건을 만족해도 불필요한 다음 조건을 계속 검사해야 한다.
두번째로, 코드의 효율성이 떨어진다.
" age = 14 " 로 선언한 age는 초등학생을 체크하는 조건인 if ( age >= 8 && age <= 13 ) 를 통해
이미 초등학생 이상이라는 사실을 알 수 있다.
그럼에도 불구하고 다음 줄에 있는 age >= 14 라는 줄은 이미 앞의 age <=13 이라는 조건과 관련이 있기에,
결과적으로 조건을 중복 체크한 것이 된다.
이런 if만을 사용한 코드에 else if 를 사용하면
불필요한 조건 검사를 피하고 코드의 효율성을 향상시킬 수 있다.
else if 문은
if문의 조건이 거짓일 때 다음 조건을 검사하는 문장이다.
앞선 if문이 참이라면 else if 를 실행하지 않는다.
if (condition1) {
// 조건 1이 참일 때 실행되는 코드
} else if (condition2) {
// 조건 1이 거짓이고, 조건2가 참일 때 실행되는 코드
} else if (condition3) {
// 조건2가 거짓이고, 조건3이 참일 때 실행되는 코드
} else {
// 모든 조건이 거짓일 때 실행되는 코드
}
# If3
package cond;
public class If3 {
public static void main(String[] args) {
int age = 23;
if (age <= 7) {
System.out.println("미취학");
} else if (8 <= age && age <= 13) {
System.out.println("초등학생");
} else if (14 <= age && age <= 16) {
System.out.println("중학생");
} else if (17 <= age && age <= 19) {
System.out.println("고등학생");
} else {
System.out.println("성인");
}
}
}
특정 조건이 만족하면 해당 코드를 실행하고 if문 전체를 빠져나온다.
특정 조건을 만족하지 않으면 다음 조건을 검사한다.
순서대로 맞는 조건을 찾아보고,
맞는 조건이 있으면 딱 1개만 실행이 된다.
03. if문3 - if문과 else if문
if문에 else if를 함께 사용하는 것은 "서로 연관된 조건"일 때 사용한다.
하지만 서로 관련이 없는 독립 조건이면,
아래와 같이 else if를 사용하지 않고 if문을 각각 따로 사용해야 한다.
if (condition1) {
// 작업1 수행
}
if (condition2) {
// 작업2 수행
}
예시의 조건들은 둘 중 하나만 수행되는 것이 아니라, 조건이 맞다면 둘다 수행될 수 있다.
# If5
package cond;
public class If5 {
public static void main(String[] args) {
int price = 10000;
int discount = 1000;
int age = 23;
if (price >= 10000) {
price = price - discount;
System.out.println("10000원 이상 구매, 1000원 할인");
}
if (age <= 10) {
price = price - discount;
System.out.println("나이 10살 이하, 1000원 할인");
}
}
}
// 위에 적은 건 내 코드지만, 강의랑 다름.
// 참고해서 다시 적기.. 강의는 할인에 증감을 적용해서 총 금액을 프린트 하게끔 해둠
문제에서는 할인받은 금액이 얼마만큼인지를 출력하는 것을 요구했지만,,
나는 할인받아서 총 계산해야 할 돈이 얼마인지를 출력하는 코드를 짰다.
package cond;
public class If5_1 {
public static void main(String[] args){
int price = 10000; // 아이템 가격
int age = 10; // 나이
int discount = 0;
if (price >= 10000){
discount = discount + 10000;
System.out.println("10000원 이상 구매, 1000원 할인");
}
if (age <= 10){
discount = discount + 1000;
System.out.println("어린이 1000원 할인");
}
System.out.println("총 할인 금액: " + discount + "원");
}
}
코드를 수정하면 다음과 같다.
가격과 나이에 대한 할인은 연관되어 있지 않기 때문에 독립된 if문으로 조건을 나열한다.
조건이 맞다면 둘 다 실행될 수도 있는 것이다.
만약 이 문제에서 else if를 썼다면,
첫 번로 충족하는 조건만 할인이 되고 나머지는 무시된다.
따라서 사용자는 나머지 할인을 놓칠 수 있는 것이다.
# If6
package cond;
public class If6 {
public static void main(String[] args) {
int price = 10000;
int age = 23;
int discount = 0;
if (price >= 10000) {
discount = discount + 1000;
System.out.println("10000원 이상 구매, 1000원 할인");
} else if (age <= 10) {
discount = discount + 1000;
System.out.println("어린이 1000원 할인");
} else {
System.out.println("할인 없음");
}
}
}
// else if와 if의 조건이 둘다 충족이 되는 조건식이더라도, 한번 실행되면 반복문 걍 나옴
// if에 한 번 걸리면 자동적으로 나오게 되어있기에 둘다 중복 반복에서는 적용 x
// if문 안에 조건식을 코드 블럭 없이 2개를 사용한다면 첫 조건식만 if절 안에서 돌아가는 것
// 밑에 있는 조건식은 if절에서 돌아가는 것이 아닌 별개로 작동
//if(true)
// System.out.println("if문에서 실행됨");
// System.out.println("if문에서 실행안됨");
// 예시로 들었듯 if문에서 실행안됨을 나타내는 sout은 if절에서 돌아가는 것이 아님
위 else if 사용 설명에 대한 예시가 바로 If6 코드 내용이다.
정리하자면
if문을 각각 사용할지, if와 else if를 함께 묶어서 사용할지는 요구사항에 따라 다르다.
이 차이를 이해하고 적절히 사용하는 것이 중요하다.
04. switch문
switch문은 if문을 조금 더 편리하게 사용할 수 있는 기능이다.
다만 if문과의 차이점이 있다면,
if문은 비교 연산자를 사용할 수 있지만, switch문은 단순히 값이 같은지만 비교할 수 있다.
switch문의 기본형은 다음과 같다.
switch (조건식) {
case value1:
//조건식의 결과값이 value1일때 실행되는 코드
break;
case value2:
//조건식의 결과값이 value2일때 실행되는 코드
break;
default:
//조건식의 결과값이 위의 어떤 값에도 해당하지 않을 때 실행되는 코드
}
# Switch1
package cond;
public class Switch1 {
public static void main(String[] args) {
int grade = 2;
int coupon;
if (grade == 1) {
coupon = 2000;
} else if (grade == 2) {
coupon = 3000;
} else {
coupon = 500;
}
System.out.println("발급받을 쿠폰"+ coupon);
}
}
# Switch2
package cond;
public class Switch2 {
public static void main(String[] args) {
int grade = 2;
int coupon;
switch (grade) {
case 1:
coupon = 1000;
break;
case 2:
coupon = 2000;
break;
case 3:
coupon = 3000;
break;
default:
coupon = 500;
}
System.out.println("발급받은 쿠폰"+coupon);
}
}
// if문은 비교 연산자를 사용할 수 있지만,
// switch문은 단순히 값이 같은지만 비교할 수 있음
조건식 grade의 결과값이 어떤 case의 값과 일치하면 해당 case의 코드를 실행한다.
즉 grade == 1일 경우, coupon=1000;이 실행된다는 뜻이다.
그리고 default는 조건식의 결과값이 모든 case의 값과 일치하지 않을 때 실행된다.
if문의 else와 같으며, 이 default 구문은 선택사항이다.
# Switch3
package cond;
public class Switch3 {
public static void main(String[] args) {
int grade = 2;
int coupon;
switch (grade) {
case 1:
coupon = 1000;
break;
case 2:
case 3:
coupon = 3000;
break;
default:
coupon = 500;
break;
}
System.out.println("발급받은 쿠폰" + coupon);
}
}
// case에 해당되는 조건문? 조건값을 한 줄 안 넣으면,
// 밑에 있는 조건문이 자동적으로 실행된다
// 강의 7분 48초 쯤부터 설명 참고해서 복기할것
위 예제와 같이 break문이 없을 경우에는
그 문장 아래에 있는 조건문이 자동적으로 실행된다.
case 2:의 경우 break;가 존재하지 않기 때문에 case 3:으로 내려가 조건문이 실행된다.
따라서 이 예제는 '발급받은 쿠폰 3000'이 출력된다.
# Switch4
package cond;
public class Switch4 {
public static void main(String[] args) {
int grade = 2;
int coupon = switch (grade) {
case 1 -> 1000;
case 2 -> 2000;
case 3 -> 3000;
default -> 500;
};
System.out.println("발급받은 쿠폰"+coupon);
}
}
자바 14부터는 새로운 switch문이 도입되었다.
기존 switch문과는
* -> 를 사용
* 선택된 데이터를 반환할 수 있음
이라는 차이점이 존재한다.
05. 삼항 연산자
# CondOp1
package cond;
public class CondOp1 {
public static void main(String[] args) {
int age = 18;
String status;
if (age >= 18) {
status = "성인";
} else {
status = "미성년자";
}
System.out.println("age="+age+" status="+status);
}
}
// 근데 파이썬에서 변수 선언할 때는 무조건 0이라도 넣어야 했던거 아닌가?
위 예제는 age 조건에 따라 status라는 변수에 문자열 값이 정의되는 코드이다.
자바는 변수를 선언할 때 초기화를 하지 않아도 String status; 라고 변수 선수할 수 있다.
문득 파이썬에서의 변수 초기값 선언이 방식이 헷갈렸는데, 이에 대해 gpt에 물어보았다.

파이썬에서의 변수 선언을 정리해보자면 다음과 같다.
* 파이썬은 자동으로 변수의 데이터 형식을 결정한다.
* 초기값을 지정하지 않고도 status=" "와 같이 변수를 선언할 수 있다.
필자가 까먹고 있었던 부분은 초기값 설정을 따옴표로 할 수 있다는 부분이다..
ChatGPT에게 이렇게 도움을 받았다 ..ㅎ
https://chat.openai.com/share/3615cf2d-bf43-436d-abe1-9ef3f13babbc
ChatGPT
A conversational AI system that listens, learns, and challenges
chat.openai.com
# CondOp2
package cond;
public class CondOp2 {
public static void main(String[] args) {
int age = 18;
String status= (age >= 18) ? "성인" : "미성년자";
System.out.println("age="+age+" status="+status);
}
}
// 이거는 switch문 최신 버전 느낌이랑 방법이 비슷한듯?
// 삼항연산자로 칭하는 이유는 항이 3개라서
// 1.age>=18
// 2.성인
// 3.미성년자
// 4분 11초 내용 정리
06. 문제와 풀이 1
# ScoreEx
package cond.ex;
public class ScoreEx {
public static void main(String[] args) {
int score = 85;
String grade="0";
if (score >= 90) {
grade = "A";
} else if (score >= 80) {
grade = "B";
} else if (score>=70){
grade = "C";
} else if (score >= 60) {
grade = "D";
} else {
grade = "F";
}
System.out.println("score: "+score);
System.out.println("학점은 "+grade+"입니다.");
}
}
// 지피티한테 물어봤던거 같이 첨부해서 오답 정리할 것
String 문자열에 대한 내용 기입할 것
https://chat.openai.com/share/424ccf4a-6748-4b0d-989e-e1a585352626
ChatGPT
A conversational AI system that listens, learns, and challenges
chat.openai.com
# DistanceEx
package cond.ex;
public class DistanceEx {
public static void main(String[] args) {
int distance = 100;
String transform="0";
if (distance <= 1) {
transform = "도보";
} else if (distance <= 10) {
transform = "자전거";
} else if (distance <= 100) {
transform = "자동차";
} else {
transform = "비행기";
}
System.out.println(distance);
System.out.println(transform+"를 이용하세요.");
}
}
String 문자열 변수 사용할 때 한 번 더 신경쓰게 되었다는 ..
# ExchangeRateEx
package cond.ex;
public class ExchangeRateEx {
public static void main(String[] args) {
int dollar = 10;
int won = 1300;
if (dollar < 0) {
System.out.println("잘못된 금액입니다.");
} else if (dollar > 0) {
won = dollar * won;
System.out.println("환전 금액은 " + won + "입니다.");
} else {
System.out.println("환전할 금액이 없습니다");
}
}
}
//0이 int에 속하지 않는다는 것을 생각 못하고 0을 기준으로 3가지 식을 만들었음
// dollar=0을 else if 말고도 표현할 방법이 있다는 것을 생각하지 못했음
// 아 .. 아니다... dollar=0은 변수 선언이 되는 표현이다..
// dollar==0 표현이 맞는 표현임을 .... 멍청했다....
// 복기할 때 정답 코드 5분 53초랑 비교해서 둘다 함께 첨부할 것
07. 문제와 풀이 2
# MovieRateEx
package cond.ex;
public class MovieRateEx {
public static void main(String[] args) {
double rating = 7.2;
if (rating <= 7) {
System.out.println("'어바웃타임'을 추천합니다.");
System.out.println("'토이 스토리'를 추천합니다.");
System.out.println("'고질라'를 추천합니다.");
} else if (rating <= 8) {
System.out.println("'어바웃타임'을 추천합니다.");
System.out.println("'토이 스토리'를 추천합니다.");
} else if (rating <= 9) {
System.out.println("'어바웃타임'을 추천합니다.");
}
}
}
// 파이썬처럼 입력 변수를 받을 때 사용하는 input 기능이 없는걸까?
// 이런 케이스가 중복을 이용한거니까 중복 if문을 사용해야하는군...
// else if 사용이 효율적이지 않은 경우가 이 경우네..
# GradeSwitchEx
package cond.ex;
public class GradeSwitchEx {
public static void main(String[] args) {
String grade = "B";
switch (grade) {
case "A":
System.out.println("탁월한 성과입니다!");
break;
case "B":
System.out.println("좋은 성과입니다!");
break;
case "C":
System.out.println("준수한 성과입니다!");
break;
case "D":
System.out.println("향상이 필요합니다.");
break;
case "F":
System.out.println("불합격입니다.");
break;
default:
System.out.println("잘못된 학점입니다.");
}
}
}
# CondOpEx
package cond.ex;
public class CondOpEx {
public static void main(String[] args) {
int a = 10;
int b = 20;
int max = (a > b) ? a : b;
System.out.println("더 큰 숫자는 "+max+"입니다.");
}
}
# EvenOddEx
package cond.ex;
public class EvenOddEx {
public static void main(String[] args) {
int x = 5;
String odd = (x % 2 == 0) ? "짝수" : "홀수";
System.out.println("x = "+x+", "+odd);
}
}
'JAVA' 카테고리의 다른 글
| [ 김영한의 자바 입문 ] 섹션 3. 연산자 (1) | 2024.01.27 |
|---|---|
| [ 김영한의 자바 입문 ] 섹션 2. 변수 (0) | 2024.01.08 |
| [ 김영한의 자바 입문 ] 섹션 1 . Hello World (0) | 2024.01.08 |