끝을 보는 용기

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

writingforever162 2024. 10. 29. 23:23

“코드를 잘 짜는 능력만큼 잘 보는 능력도 중요하다.”


“본인이 만든 코드는 본인이 설명할 수 있어야 한다.”

 

오늘 담임 매니저님과 팀원분과 함께 지금까지 해온 학습 방향이 맞는지 고민을 털어놓고 의견을 주고받으며 자만은 위험하지만, 스스로를 믿기로 했다. 위에 적은 두 가지 외에도 벌꿀보다 달콤한 조언을 한 아름 얻었는데, 문자열로 구현할 능력이 부족해서 두 가지만 적었다. 앞으로는 얘기를 가만히 듣기만 하지 말고 틈틈이 메모하는 태도를 곁들어야겠다. 기록의 중요성을 제대로 체감했다.

 

[습관 관련]

항상 이때쯤 일어나긴 하는데 얼마 못가 자꾸만 이불 속으로 다시 들어간다. 아침을 잠으로 채운 탓에 웨비나(webinar) 후 시계를 본 순간 발등에 불덩이가 뚝 떨어졌다. 지금까지 내세울 만한 역량으로 '성실성'과 '꼼꼼함' 두 가지만 생각했는데, 오늘 시간 활용을 반성하면서 한 가지 더 추가하고 싶어졌다.

 

'마감을 칼같이 지키는 개발자'

 

직장인 시절에 '칸트 사촌'이라는 별명을 달고 다닌 만큼 이 분야에서도 저 별명을 꼭 들어야겠다는 각오가 일었다. 개발자로 취업할 생각이라면 '쉽게 읽히도록 코드를 짜는 개발자'란 명찰은 당연히 장착해야 하니 굳이 목표로 잡지 않았다. 뛰어난 실력은 디폴트(default), 즉 기본값이니까 '나'라는 사람이 '팀원으로 데려가고 싶은 사람'으로 돋보이려면 실력뿐만 아니라 시간 관리 능력 같은 역량을 부지런히 가꾸어야 했다. 매일매일 공부할 때마다 '비전공자'라는 네 글자가 떠오르다 보니, 공부가 재미있다는 마음과 별개로 지금 가진 자원이 뭔지 매번 고민하고 어떻게든 한 가지라도 더 발굴하려고 애쓰게 된다.

 

오늘을 기점으로 진흙 속에서 쓸 만한 원석 몇 덩이를 발견했다.


훗날 하나하나가 돌멩이로 끝날지 보석으로 빛날지는 내 몫이다.

 

해보자, 끝까지.

 

[인용 및 참고 출처]

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

2. 구글 검색: 티스토리, "자바 switch 조건문", [JAVA] 조건문(if문과 switch-case문), (2024.10.29)

 

[학습 관련]

1. 중첩 조건문 실컷 사용해보기!

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

       // if 조건식이 참이면,
       // 즉 국어가 90점 이상이고 총점수가 280점 이상일 때
       // 아래 중첩된 if, else if, else 중 하나가 실행된다.
       if ((kor>=90)&&(totalScore>=280)){
          if (kor>=95) {
             System.out.printf("총점수는 %d점, 국어는 %d점으로 A+학점입니다.", totalScore, kor);
             // 국어가 95점 이상이면 출력됨
          }
          else if (kor<93) {
             System.out.printf("총점수는 %d점, 국어는 %d점으로 A-학점입니다.", totalScore, kor);
             // 국어가 93점 미만이면 출력됨
          }
          else {
             System.out.printf("총점수는 %d점, 국어는 %d점으로 A0학점입니다.", totalScore, kor);
             // 국어가 95점 이상도 아니고,
             // 국어가 93점 미만도 아닐 때 출력됨
          }
       }

       // and 연산자(&&)가 있는 if 조건식이 거짓이면 else문으로 넘어가고,
       // 아래 중첩된 if, else 중 하나가 실행된다.
       else {
          if (kor>=80) {
             System.out.printf("총점수는 %d점, 국어는 %d점으로 B학점입니다.", totalScore, kor);
             // 국어 점수가 80점 이상이면 출력됨
          }
          else {
             System.out.printf("총점수는 %d점, 국어는 %d점으로 C학점입니다.", totalScore, kor);
             // 국어가 80점 미만이면,
             // 즉 else에 중첩된 if 조건식이 거짓이면,
             // else {중괄호} 안에 있는 문장이 수행된다.
          }
       }
    }
}

println()만큼이나 printf() 사용에 한 걸음 더 익숙해졌다. 처음에는 공부 차원에서 일부러 printf()를 썼는데, 쓰다 보니 정수형 int 변수 totalScore의 값이 변할 때마다 '총점수를 계산하기 귀찮아서' 어느새 자연스레 printf()를 찾았다. 얼마나 고맙고 편하던지!

 

if문, 특히 중첩을 스스로 얼마나 이해했는지 점검하고 싶어서, "총점수는 %d점, 국어는 %d점으로 C학점입니다." 출력을 목표로 잡고 코드를 작성했다. 다행히 정수형 int 변수 kor에 75를 저장했을 때 원하는 대로 문장이 출력되었다. 물론 연습이라 C학점으로 출력했지, 목표는 A+학점이지만. 어느 분야에서든.

 

2. switch-case문

(1) 기본 실습

public class SwitchPrac {
    public static void main(String[] args) {
       // (소괄호) 안에 들어가는 변수 조건
       // [1] 정수형 byte, short, int 변수는 가능하다.
       // [2] 정수형 long 변수는 불가능하다.
       // [3] 'A'나 'B'처럼 문자형 char 변수는 가능하다.

       // 주의 사항
       // [A] case 뒤에 콜론(:) 써야 한다.
       // [B] case 뒤에 세미콜론(;) 쓰면 안 된다.
       // [C] default와 break 빼먹지 말자.

       // 첫째, 정수형 int 변수 age 선언 및 값 40 저장
       int age = 40;
       
       // 둘째, switch-case문 작성
       switch (age) {
          case 20:
             System.out.println(age+"대입니다.『나의 하루는 4시 30분에 시작된다』책을 추천합니다.");
             break;
          // 한 가지 case 작성
          // 변수 age에 값 20이 저장되면, case 안에 작성한 문장이 수행된다.
          // case에는 콜론(:)을 붙여야 한다.
          // break;는 자동차 브레이크라고 생각하자.
          // break는 case의 끝을 알려주며 세미콜론(;)을 붙여야 한다.
          // [복습] 브레이크는 세미콜론, 케이스는 콜론!

          case 30:
             System.out.println(age+"대입니다.『달팽이 식당』책을 추천합니다.");
             break;
          // 변수 age에 값 30이 저장되면, case 안에 작성한 문장이 수행된다.

          case 40:
             System.out.println(age+"대입니다.『돈은 좋지만 재테크는 겁나는 너에게』책을 추천합니다.");
             break;
          // 변수 age에 값 30이 저장되면, case 안에 작성한 문장이 수행된다.

          default:
             System.out.println(age+"대 이상입니다.『최재천의 공부』책을 추천합니다.");
             break;
          // default는 변수가 어떤 case에도 해당하지 않을 때 필요하다.
          // 변수 age에 40이나 50이 저장되면 default 속 문장이 수행된다.
          // default는 case와 동일하게 콜론(:)을 붙여야 한다.
          // default는 case와 동일하게 break;를 써줘야 한다.
       }
    }
}

(2) 예외 상황 처리하기

ⓐ if문이 필요한 이유

if문으로 예외 상황을 처리하지 않으면 default에 작성한 문장이 수행된다. 분명 30대인데 '34대'로 나오는 웃지 못할 상황이 연출된다. 14로 입력하면 '14대'라는 오류에다 10대에게 제대로 책을 추천하지 못하게 된다. 이런 오류가 하나둘 쌓이면 결국 품질 문제로 직결되고 경쟁작에 밀리지 않을까?

 

ⓐ 사용자가 20 미만인 값을 입력한다면?

if (age<20) {
    System.out.println("20이라고 다시 연령대를 입력해주세요. 프로그램을 종료합니다.");
    System.exit(0);
    // 출력 행위가 이루어지며 프로그램이 종료된다.
}

ⓑ 사용자가 연령대가 아닌 나이를 입력한다면?

if (age>20&&age<30) {
    age = 20;
    // [조건] 변수 age에 저장된 값이 20 초과이며 30 미만일 때
    // 입력된 값이 20으로 수정되어 변수 age에 저장된다.
    // [복습 1] &&는 'and 연산자'이다. 
    // [복습 2] and 연산자는 좌항과 우항 모두 참이어야 전체가 참이 된다. 
}

3. 실습 결과

여기서 반전 아닌 반전이 하나 있다면, 코드에 적은 책 4권을 모두 읽었다. 직접 읽고 마음에 들어서 정말 추천하는 마음으로 문장을 썼다. case 40에서 '『부자 아빠 가난한 아빠』 책을 추천할까?' 잠시 고민했는데, 제태크든 책 읽기든 '처음'인 사람에게 책을 권할 때 내용은 물론이고 두께 또한 고려 대상이었기 때문에 『돈은 좋지만 재테크는 겁나는 너에게』 책을 추천했다. 개발 공부에 진전이 생기거든 시간 내서 다시 읽어봐야겠다.

 

[기타 사항]

"CD는 콜론(Colon), 브레이크를 밟으면 타이어 자국이 남으니까 break은 세미콜론(;)이다."

 

case와 default와 break에 붙는 구두점이 달라서 어떻게 외울지 고민하다 저 문장을 생각했을 때 혼자 엄청 뿌듯해했다. 오늘 강의로 접한 '삼항, 삼항 연산자, 연산자'만 내일 정리하면 반복문으로 넘어간다. 시간 관리! 오늘 TIL에 적으며 꼭 내 역량으로 만들자고 다짐한 만큼 조금씩 실천하자!