[트러블 슈팅] 계산기 과제

누구세요·2024년 9월 10일

정답은 가까이에 있었다.

  1. 과제 도전 기능중 하나인 제네릭 타입으로 연산을 수행하려고 했다. 단순하게 기존에 int로 받던걸 N으로 바꿔보았다. 제네릭은 뭔가 느낌상 유연하게 잘 될거라고 생각했는데 바로 빨간줄이 그였다.

  2. 너무 범위가 넓었나?? extens을 통해 타입을 제한해줄 수 있다고 해서 숫자타입의 최상위 타입인 Number를 붙여봤다. 여전히 빨간줄이 사라지지 않는다.

  3. 더 찾아보니 제네릭 타입은 연산자를 바로 사용할 수 없다고 한다. 그래서
    1. 제네릭 타입으로 받은다음
    2. 숫자 타입 중에서 광범위하고 생각한 double타입으로 변환하여 사칙연산을 수행하고
    3. 결과값을 다시 제네릭 타입으로 바꿔서 반환하도록 수정해보기로했다.
    github에 찾던 것과 비슷한 코드가 있어 참고하여 코드를 수정했다.
    https://github.com/kangjuye/-

  4. 또 캐스팅 오류가 났다. restult에 대입해주기전에 doubleValue()함수를 호출해서 double타입으로 변환해주면 해결되긴하나 참고한 코드에는 doubleValue()호출 없이도 double변수에 잘만 들어간다. 혹시 참고했던 코드도 오류가 있던건가?! 싶어서 통째로 복사해서 변수만 바꿔봤는데 너무 잘돌아간다ㅜㅜ

  5. 계속 틀린그림찾기하면서 이거 필수기능도 아닌데 이정도만해서 낼까?? 아님 그냥 복붙해서 내야하나하면서 고민하다가 찜찜해서 아예 계산기 시작부분으로 돌아가서 다시 보기 시작했다.

  6. 처음부터 읽으면서 내려오는데 클래스 생성 부분에 왔는데 노란줄이 그여있다. 엄청 단순한 코드인데 경고문이 뜬게 이상해서 번역해보니 참조형 타입을 정의하지않고 생성했다고한다.

  7. 가보니 정말 정의가 안돼어있어서 실제 사용할 타입(Double)을 정의해줬다.
    [변경전]

    [변경후]

  8. 오류가 수정됐다!!

  9. +) 연산 결과를 출력하는 부분을 stream을 사용하도록 수정했을때 내부 요소에 접근이 안돼는 현상이 있었는데 왜인지 타입을 정의해주자 이 부분도 같이 해결되었다.. 반환은 어차피 리스트로하는데.. 뭔가 묶여있나??

  10. 결론: 제네릭은 사용할때 타입을 정의해줘야하는데 제네릭 대해 제대로 이해하지 않고 무작정 사용했던것이 문제였습니다. 또 경고문은 툭하면 발생하고 에러와달리 실행했을때 별다른 문제가 없어 귀찮다는 이유로 대부분 무시했었는데 한번씩 무슨경고인지 읽어보는 습관도 들이고 번거롭더라도 가능한 경고문이 발생하지 않도록 코딩을 해야겠다는 생각을 했습니다.

0개의 댓글