끝을 보는 용기

Spring 사전캠프 Day 022 - 자바(Java) 공부: 조건문 (1/3)

writingforever162 2024. 10. 28. 21:36

TIL을 작성하는 데 걸리는 시간은 최대 60분으로 잡자.

 

어제 복습 겸 TIL을 찬찬히 읽고 뜯어고치며 다짐했다. 당장 다음 주부터 아침 9시부터 밤 9시까지 12시간을 내리 공부하고 프로젝트를 진행해야 하는데, 사색에 빠져 느긋하게 키보드를 두들길 수는 없었다. 다행이라면, 사전캠프의 마지막 주의 첫날인 오늘은 캠프에 참여한 첫날과 다르게 감정이 파도처럼 요동치지 않는다. 마음속에 물비늘만 찰랑거릴 따름이다. 그토록 정복하고야 말겠다고 벼르고 벼려온 '조건문'을 학습해서인가 보다. 물론 강의만 듣고 코드 몇 번 따라 작성해봤다고 당장 문제를 한 방에 풀기엔 무리이겠지만, 이제 좀 코드 길이가 늘어나니 마음은 오히려 차분하고 편해졌다. 현재 듣는 '[100제 풀이] 예제로 마스터하는 Java(자바) 종합 클래스'의 'Part.3 조건문, 반복문' 속 강의가 총 6개라 매일 2개씩 들으려고 했는데, 순식간에 절반이나 들었다.

 

if, if─else, 조건문

 

if, 중첩 if문, 조건문

 

switch, 조건, 조건문, 사용법

 

두 가지 조건문을 모두 배웠으나 각각 주의해야 할 사항이 다를뿐더러, 실습하는 동안에는 시간에 쫓기는 느낌을 받고 싶지 않아서 switch 조건문 정리는 내일 아침에 하련다. 조건문으로 문장을 출력하는 재미가 쏠쏠해서 저번에 배운 비교 연산자와 논리 연산자까지 야무지게 섞었다. 겸사겸사 직접 작성한 주석 또한 내일 다시 읽으면 다른 사람의 눈에 쉽게 읽히도록 적혔는지 점검할 수 있겠다.

 

재미있어서 시간 가는 줄 몰랐다, 오늘의 자바(Java) 공부도.

 

[습관 관련]

아침 일찍 눈을 뜨기는 했는데, 어제 밤새도록 뒤척인 여파로 다시 이불 속으로 들어가 버렸다. 자정 넘어서까지 모든 TIL에 출처를 표기하며 열심히 [shift]와 [F10] 키를 누른 까닭인지 아침에 피로감이 확 밀려왔다. 공부에 한 번 빠져들면 시간의 스위치를 끄기가 참 망설여진다. 혹시 몰라서 커피 대신 카페인 없는 보리 커피인 오르조(Orzo)에 우유를 타서 카페에서 공부하는 느낌을 흉내 냈다.

 

[인용 및 참고 출처]

1. 강의: 클래스101 온라인클래스, "[100제 풀이] 예제로 마스터하는 Java(자바) 종합 클래스", 강의 소개, (2024.10.28)

2. 구글 검색: 티스토리, "자바 if else 조건문 중첩", [JAVA] 조건문 if, (2024.10.28)

3. 구글 검색: 티스토리, "자바 중첩문 if else", [JAVA] 자바 조건문(if문, 중첩if문), (2024.10.28)

4. 구글 검색: 티스토리, "자바 and 연산자", 자바의 논리 연산자 종류, (2024.10.28)

5. 구글 검색: 티스토리, "자바 비교 연산자", 자바의 비교 연산자 종류, (2024.10.28)

 

[학습 관련]

1. if

public class IfElsePrac {
    public static void main(String[] args) {
       // [1] 정수형 int 타입 kor, eng, math 변수 선언 및 초기화
       int kor = 85, eng = 95, math = 100;

       // [2] 정수형 int 타입 totalScore 변수 선언 및 초기화
       int totalScore = kor + eng + math;

       if ((kor>=85)&&(totalScore>=280)){
          System.out.printf("총점수는 %d점으로 A학점입니다. 고생했어요.", totalScore);
          // [1] (소괄호) 안의 조건식이 참이면 {중괄호} 속 문장이 수행된다.
          // [2] &&는 논리 연산자 중 하나인 'and 연산자'이다.
          //     &&는 좌항과 우항 모두 참이어야만 전체가 참이 된다.
          //     즉, kor>=85와 totalScore=>280 모두 참이어야 출력이 된다.
          // [3] 출력문: 총점수는 280점으로 A학점입니다. 고생했어요.
          // [4] 복습: printf()의 지시자 %d는 정수를 출력한다.
       }
    }
}

 

2. if─else문

public class IfElsePrac {
    public static void main(String[] args) {
       int kor = 80, eng = 100, math = 100;
       int totalScore = kor + eng + math;

       if ((kor>=85)&&(totalScore>=280)){
          System.out.printf("총점수는 %d점으로 A학점입니다. 고생했어요.", totalScore);
       }
       else {
          System.out.printf("총점수는 %d점, 국어는 %d점으로 B+학점입니다.", totalScore, kor);
          // 앞에 있는 if의 조건식이 거짓이면, else 안의 문장이 수행된다.
          // 좌항인 kor>=85는 국어가 80점이라 거짓이 된다.
          // 우항인 totalScore>=280은 총점수가 280점이라 참이 된다.
          // and 연산자(&&)는 양변이 모두 참일 때만 전체가 참이 된다.
          // 따라서 조건식이 거짓이 되므로 else 안의 문장이 출력된다.
          // 출력문: 총점수는 280점, 국어는 80점으로 B+학점입니다.
       }
    }
}

 

3. if─else if─else문

public class IfElsePrac {
    public static void main(String[] args) {
       int kor = 85, eng = 90, math = 100;
       int totalScore = kor + eng + math;
       if ((kor>=85)&&(totalScore>=280)){
          System.out.printf("총점수는 %d점으로 A학점입니다. 고생했어요.", totalScore);
       }
       else if ((kor>=85)||(totalScore>=280)) {
          System.out.printf("총점수는 %d점, 국어는 %d점으로 B+학점입니다.", totalScore, kor);
          // [1] 앞에 있는 if 조건식이 거짓일 때 수행할 문장을 적는다.
          // [2] else if의 조건식이 참이면 {중괄호} 속 문장이 수행된다.
          // [3] ||는 논리 연산자 중 'or 연산자'이다.
          //     ||는 좌항과 우항 둘 중 하나가 참이면 전체가 참이 된다.
          //     즉, 총점수가 280점 미만이나 국어가 85점이므로 참이 된다.
          // [4] 출력문: 총점수는 275점, 국어는 85점으로 B+학점입니다.
       }
       else {
          System.out.printf("총점수는 %d점, 국어는 %d점으로 C학점입니다.", totalScore, kor);
          // if와 else if의 조건식이 모두 거짓이면 else 속 문장이 수행된다. 
       }
    }
}

 

4. 중첩 if문

public class IfElsePrac {
    public static void main(String[] args) {
       int kor = 94, eng = 90, math = 100;
       int totalScore = kor + eng + math;
       if ((kor>=90)&&(totalScore>=280)){
          if (kor>=95) {
             System.out.printf("총점수는 %d점, 국어는 %d점으로 A+학점입니다.", totalScore, kor);
          }
          else if (kor<92) {
             System.out.printf("총점수는 %d점, 국어는 %d점으로 A-학점입니다.", totalScore, kor);
          }
          else {
             System.out.printf("총점수는 %d점, 국어는 %d점으로 A0학점입니다.", totalScore, kor);
             // [1] 중첩 if문은 if문 안에 또 다른 if문을 넣은 조건문이다.
             // [2] if 조건식이 참이면 중첩된 조건문으로 넘어간다.
             // [3] 중첩 if문 안에서 else if문 또한 사용할 수 있다.
             // [4] 국어가 94점이므로 중첩된 else 안에 있는 문장이 수행된다.
             // [5] else문 또한 중첩이 가능하다. 
             //     즉, else문 안에 if문과 else문을 넣을 수 있다.
             // [6] 출력문: 총점수는 284점, 국어는 94점으로 A0학점입니다.
          }
       }
    }
}

 

5. 실습 결과

자바를 공부하지 않았으면 부호와 영어가 난무하는 코드라고만 알았을 텐데, 신기하게도 점점 코드의 틀이 눈에 들어온다. 

 

6. 깜짝 퀴즈 

저번 주에 내가 했듯이 오늘 데일리 스크럼(Daily Scrum)과 회고를 맡은 팀원분이 퀴즈를 하나 내셨다. 문법에 꽂힌 나머지 틀렸는데, 출제 의도를 들어보니 꼭 기억해야겠다 싶었다. C#인가 C++ 언어였나, 아무튼 다른 언어로 이루어진 문장이라 배운 대로 수정해 보았다. 아래의 코드를 실행하면, 점수가 90점인데도 'Hamburger Time!'이 출력되었다. 그 원인이 무엇인지 찾는 문제였다. 여담으로 이때 문제를 본 동시에 '정답! 제가 문제인데요!'라고 아주 당당하게 외쳤다! 진짜 답이 뭔지 감조차 안 잡혔는데…….

public class IfElsePrac {
    public static void main(String[] args) {
       int score = 90;
       if (score>=70) {
          System.out.println("Hamburger Time!");
       }
       else if (score>=80){
          System.out.println("Steak Party!");
       }
       else if (score>=90) {
          System.out.println("Amusement Park VIP Ticket!");
       }
    }
}

원인은 보이는 그대로였다. 90점은 물론이고 설령 100점을 맞았다 해도 맨 처음에 작성된 if (score>=70) 조건문에 걸려서 파티도 VIP 티켓도 나오지 않았다. 수정 방법은 의외로 간단했는데, 조건문 순서를 바꾸면 되었다.

데일리 스크럼(Daily Scrum)과 회고를 알찬 시간으로 만들고자 노력해 준 팀원분 덕분에 코드는 작성된 순서대로 실행된다는, 아주 기본 중의 기본을 다시 한번 되짚었다.  

 

[기타 사항]

며칠 자바 프로그램을 붙들었다고 직장인 신분인 시절처럼 코드 입력하는 속도가 처음보다 빨라진 느낌이 든다. 키보드 두들기는 소리가 한두 방울 톡톡 떨어지는 빗소리에서 요란한 우박 소리를 알게 모르게 닮아갈수록 손목의 안부가 신경 쓰인다. 그다음으로는 주인을 잘못 만난 허리의 심정이. 아무래도 조만간 스트레칭 시간을 추가로 하루에 넣어야겠다. 이렇게 할 일이 하나 또 늘어난다.