JAVA 디버깅 프로세스 단계별 접근

#JAVA003 #MiniProject #디버깅프로세스 #섭씨/화씨변환프로그램
Dec 13, 2023
JAVA 디버깅 프로세스 단계별 접근
 

🍅 MiniPoject : 섭씨 화씨 구하기

❓ 문제

notion image
  • 사용자로부터 화씨/섭씨 온도를 받아서 다른 온도를 구하는 프로그램
  • 예제문에 나온 대로 나올수 있게 만드시오!
 
 
💡
프로그램을 짤 때는 세가지 결과 값이 필요하면 한 번에 모든 것을 만드는 것보다 단계적 접근을 해야 된다. 작업을 세분화하여 단계를 나누고 단계의 목표에 맞는 코드를 작성하는 것이 편하다.
 
단계별로 접근하되 각 단계의 코드 구현이 되는지 확인하고 넘어가야지, 어디서 잘못된 코드 작성을 했는지 확인 할 수 있다. 만약에 이런 과정없이 한꺼번에 많은 프로젝트를 해버린다면 어디서 잘못되었는지 파악 하지 못한채 많은 시간을 그것을 찾기위해 불필요한 일을 해야할 것이다.
 
 
Planning
일단 처음 시작하기에 앞서 단계적으로 어떤 단계가 필요한지 생각해보아야한다. 화씨를 섭씨로 만들수 있는 코드, 그리고 섭씨를 화씨로 만들 수 있는 코드, 마지막으로 그 두부분을 같이 묶어주는 코드가 필요할 것이다. 그리고 여기서는 if문대신에 삼항연산자를 가지고 활용해야된다는 조건으로 시도해 보자.
 
  • 화씨로 섭씨를 구하는 코드
  • 섭씨를 화씨로 구하는 코드
  • if문 대신 삼항 연산자를 사용하기
 
 
 

1️⃣ FIRST TRY

 
코드구현
import java.util.Scanner; public class FtoC2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("화씨 (미국 F)온도를 입력하시오"); // 1.화씨 온도 받기 double temp = sc.nextDouble(); //System.out.prinln(f); // 화씨 -> 섭씨 온도로 변환 double result = 5 / 9 * (temp - 32); System.out.println(result); } }
  • 사용자에게서 입력을 받을수 있는 Scanner객체를 만든다. 이 객체는 힙메모리에 할당이 될것이다.
  • 화씨 온도를 받을 temp 변수 설정
  • 그리고 교과서에 나와있는 식을 토대로 정상 작동하는 지 구현해본다.
 
 
결과값
notion image
  • 0이 나오면 어딘가가 잘못된 것이다.
  • 구글 검색해보면 실제 값은 37정도가 나온다.
  • 이제부터 디버깅을 해볼것이다.
  • 잘못 될 가능성이 있는 모든 가능성을 생각해본다.
    • 코드 구현은 되었으니 철자가 잘못된 것은 아닐 것이다.
    • 자료타입 문제도 아니라는 것을 육안으로 확인이 가능하다.
    • 수식에 문제가 있을수도 있다. 하지만 이를 확인하기 위해서 TEST클래스를 새로 만들어보자
 
 

🤔 디버깅 프로세스

 

1️⃣ 수식분해

notion image
  • 따로 테스트를 위해서 [FtoCTest] 를 만들고 수식을 테스트 해보자
  • 5 / 9 * (100 - 32) 를 하나씩 분해해본다.
  • 5 / 9 * 68 로 다시 정리할 수 있을것이다.
  • 5 / 9 먼저 테스트 해 본다.
 
notion image
  • 윗 항은 정상이나 5 / 9 에서 문제를 일으킨것 같다.
  • 결국 0곱하기 값이 되니 0이 나오게 되었던 것이다.
  • 해볼수 있는 추론은 정수형이기 때문에 실수형이 계산이 되지 않았을 가능성이 있다.
 
 
수정 & 수정된 결과
notion image
 
notion image
  • 소수점이 변경되었더니 다른 값이 나왔다. 이것이 원인이었을 가능성이 크다.
  • 실제 구글링 해본 값은 37이었기 떄문에, 실수의 문제였을 가능성이 높다.
  • 기존 코드에서 실수로 다시 변경해보자.
 
 

2️⃣ 수정된 수식으로 다시 FtoC2로 테스트

notion image
  • 빨간칸 안의 수를 소수점으로 바꾸었다.
 
 
notion image
  • 이제 수식은 문제가 없고, 의도대로 잘 나오고 있는 것 같다.
  • 이제 섭씨를 화씨로 바꾸는 코드를 만들어보자.
 
 
 

3️⃣ 섭씨에서 화씨 구하는 코드 작성

 
화면분할을 할 수 있다??!
notion image
  • 원하는 탭을 드래그해서 화면 한 쪽으로 가져가면 창 색이 나누어 지면서 화면 분할 기능을 사용할 수 있다.
 
 
notion image
  • 화면은 이렇게 분할이 된다. 이렇게 비슷한 기능을 개발할 때 대조하면서 필요한 부분을 수정할 때 효율적일 것 같다.
  • 우리가 원하는 대로 섭씨에서 화씨 구하는 식만 수정하고 결과값을 도출해보자.
 
 
결과값
결과값
  • 일단 구글링해서 나오는 값이다. 잘 작동하는 것 같다.
  • 이제 두 작업을 하나로 묶어 주는 작업이 남았다.
 
 
 

4️⃣ 두 개의 개별코드를 합치고 삼항연산자 사용하기

 
다시 두 개의코드를 합칠 클래스를 생성한다. [FtoC4]
import java.util.Scanner; public class FtoC4 { public static void main(String[] args) { // 입력기능을 구현해줄 Scanner클래스 Scanner sc = new Scanner(System.in); //1. 화씨 혹은 섭씨 선택받기 // 1번 또는 2번을 받을 것이기 때문에 sc로 객체를 호출하고 nextInt로 받는다. // 입력받은 값을 selectedNum에 할당한다. System.out.println("화씨(1) 또는 섭씨(2)를 선택하시오 : "); int selectedNum = sc.nextInt(); //2. 온도 값을 입력받기 // 온도값은 실수로 받고 표현하기로 했으니 double을 사용한다. // 입력받은 double값을 temp에 저장한다. System.out.println("온도를 선택하시오 : "); double temp = sc.nextDouble(); // //3. 화씨 혹은 섭씨 온도를 받아서 변환하기 // 삼항 연산자 ( a ? b : c )를 사용하여서 참일때는 화씨공식을 거짓일때는 섭씨공식을 사용할 수 있게 한다. double result = selectedNum == 1 ? (5.0 / 9.0 * (temp - 32)) : (9.0 / 5.0 * temp + 32); System.out.println("온도는 : " + result); } }
 
  • 새로운 클래스 [FtoC4]를 생성하고 책에서 요구되었던 화면모습을 일단 구현해본다.
 
  1. 화씨 혹은 섭씨 선택받기
    1. 1번 또는 2번을 받을 것이기 때문에 sc로 객체를 호출하고 nextInt로 받는다. 입력받은 값을 selectedNum에 할당한다.
  1. 온도 값을 입력받기 온도 값은 실수로 받고 표현하기로 수정하였으니 double을 사용한다. 입력 받은 double값을 temp에 할당한다.
  1. 화씨 또는 섭씨 온도를 받아서 변환하기 삼항 연산자 ( a ? b : c )를 사용하여서 참일 때는 화씨 공식을 거짓일 때는 섭씨 공식을 도출하게 한다.
결과값
결과값
  • 화씨에서는 잘 작동중인것 같다.
 
 
결과값
결과값
  • 섭씨도 마찬가지로 잘 작동하고 있다.
  • 모든 기능이 잘 작동하고 있으니, 좀 더 디테일하게 교재의 요청내용을 그래도 구현하는 일만 남았다.
 
 
 

5️⃣ 디버깅후 완성된 코드

 
마지막 제출 코드
notion image
  • 교제에는 출력 멘트가 다른게, if문을 사용하였기 때문이다.
  • 일단 선생님께서는 if문까지 진도가 안나갔으니 삼항연산자로 미션을 주셨기 때문에, 아래 처럼 “온도는”으로 멘트가 대체되었다.
  • 좀 더 깔끔하게 만들기 위해 println에서 ln이 없어야 될 것 같은 곳도 수정을 좀 해주었다.
 
 
결과
notion image
  • 교제에서 요구한대로 깔끔하게 화씨버전은 작동하고 있다.
 
notion image
  • 섭씨 버전까지 깔끔하다.
 
Share article
RSSPowered by inblog