본문 바로가기
우테코 프리코스

[우테코] 7기 프리코스 1주차 회고- 1탄

by ♡˖GYURI˖♡ 2024. 10. 22.
728x90

 

1주차 미션 : 문자열 덧셈 계산기

6기 프리코스 1주차 미션보다 간단한 내용이었다. 그렇기에 기능 구현 외에도 스스로 성장할 수 있을만한 포인트들을 고민하였다. 

 

 

3가지 성장 포인트!

  • MVC 패턴 적용
  • 테스트코드 작성
  • 클래스 다이어그램 작성

 

고민했던 부분 🧐

MVC 패턴 적용

Q. 복잡하지 않은 기능을 구현하는데 있어 MVC 패턴을 적용해야 할까?

A. 적용해보자!

  • 이유1 : 앞으로의 과제들에도 MVC 패턴을 적용할 생각이기에 미리 익혀두기 위함
  • 이유2 : 최근 객체지향의 사실과 오해라는 책을 읽고 OOP와 MVC 패턴에 관심이 높아짐
  • 이유3 : 코드의 명확성과 가독성 향상
  • 이유4 : 각 클래스별로 책임 분리

 

클래스 다이어그램 범위

Q. 정적 클래스의 사용도 클래스 다이어그램에 포함되어야 할까?

A. 포함하자!

  • 이유1 : 정적 메서드는 클래스의 인스턴스 없이 호출되지만, 해당 클래스에 대한 의존성은 여전히 존재함

 

 

과제를 수행하며 배운 점 🤓

MVC 패턴의 명확한 개념

참고

 

  • Model은 Controller와 View에 의존하지 않아야 한다. (Model 내부에 Controller와 View에 관련된 코드가 있으면 안 된다.)
  • View는 Model에만 의존해야 하고, Controller에는 의존하면 안 된다. (View 내부에 Model의 코드만 있을 수 있고, Controller의 코드가 있으면 안 된다.)
  • View가 Model로부터 데이터를 받을 때는, 사용자마다 다르게 보여주어야 하는 데이터에 대해서만 받아야 한다.
  • Controller는 Model과 View에 의존해도 된다. (Controller 내부에는 Model과 View의 코드가 있을 수 있다.)
  • View가 Model로부터 데이터를 받을 때, 반드시 Controller에서 받아야 한다.

 

NumberFormatException

  • 문자열을 숫자 형식으로 변환할 때 발생하는 오류
  • IllegalArgumentException의 하위 클래스
  • 주로 Integer.parseInt() 또는 Double.parseDouble()과 같은 메서드를 사용할 때 유효하지 않은 형식의 문자열이 주어지면 발생
    • 발생하는 경우
      • 잘못된 형식의 문자열 : 숫자가 아닌 문자가 포함된 문자열을 숫자로 변환하려고 할 경우
      • 비어있는 문자열 : 빈 문자열 ""을 숫자로 변환하려고 할 경우
      • 숫자 범위를 초과 : 숫자가 해당 데이터 타임의 최대/최소 범위를 초과하는 경우

 

IllegalArgumentException

  • 메서드에 전달된 인자가 유효하지 않거나 부적절할 때 발생
  • RuntimeException의 하위 클래스
  • 개발자가 메서드를 설계할 때 특정 조건을 요구하는 경우, 조건이 충족되지 않았을 때 사용됨
    • 발생하는 경우
      • 유효하지 않은 값 : 메서드에 전달된 인자의 값이 기대하는 범위나 조건에 맞지 않을 때
      • 부적절한 인자 타입 : 잘못된 타입의 인자가 전달된 경우

 

ByteArrayOutputStream

  • 출력 스트림 클래스
  • 메모리 내에 바이트 배열을 사용하여 데이터를 저장하는 역할
  • 데이터를 메모리에 직접 쓸 수도 있고, 나중에 해당 데이터를 바이트 배열 형태로 읽거나 다른 스트림으로 전송할 수 있음
    • 특징
      • 메모리 내 데이터 저장
      • 동적 크기 조정
      • 데이터를 바이트 배열로 변환 가능
      • 다양한 스트림과 연계 가능
  • 테스트에서 활용 : System.out을 ByteArrayOutputStream으로 변경함으로써, 실제 출력 대신 메모리에서 데이터가 어떻게 저장되는지 검증할 수 있음

 

클래스 다이어그램

참고

 

[UML] 클래스 다이어그램 이해하기

[UML] 클래스 다이어그램 이해하기[UML] 시퀀스 다이어그램 이해하기안녕하세요. 오늘은 클래스 다이어그램에 대해서 이야기 해보고자 합니다. 최근 레거시 시스템의 구조개선을 조금씩 하고 있

sabarada.tistory.com

 

Tool

 

GitMind - AI Powered Mind Map, Flowchart, Whiteboard.

GitMind is a free AI-powered mind mapping & brainstorming app. Create and collaborate on mind maps online in real-time. The easiest way to make project plan, take notes, flowcharts, org charts, UML diagrams and more.

gitmind.com

 

연관관계 vs 의존관계

구분 연관관계(Association) 의존관계(Dependency)
정의 두 객체가 지속성으로 참조하며 관계를 유지하는 상태 한 객체가 일시적으로 다른 객체의 메서드나 기능을 사용하는 상태
지속성 장기적으로 유지되는 관계 단기적으로 필요할 때만 관계가 형성됨
구현 방식 필드를 참조로 저장하고 객체간 강한 결합을 가짐 메서드의 매개변수로 객체를 전달 받거나 일회성으로 사용
예시 자동차 객체가 엔진 객체를 필드로 가지는 경우 메서드 호출 시 매개변수로 엔진 객체를 전달받아 사용하는 경우
생명 주기 두 객체의 생명 주기가 유사 한 객체의 생명 주기와 상관없이 일시적으로 관계 형성
강도 강한 결합 (두 객체가 서로 직접적으로 참조) 느슨한 결합 (필요한 순간에만 참조)



 

트러블 슈팅 🚀

BUILD FAILED : Execution failed for task '.main()'

해결하기 위해 시도한 방법들

  • 따로 설정하였던 vmoptions 삭제 : 해결 실패
  • IntelliJ 버전 업데이트 : 해결 실패
  • IntelliJ의 Settings → Gradle → Build and run을 IntelliJ로 설정 : 해결 실패
  • 폴더명을 영어로 변경 : 해결 성공!

 

 

개인적인 소감 💬

간단한 기능이었지만 고민해 볼 부분이 많았습니다! 특히 "기능 요구 사항에 기재되지 않은 내용은 스스로 판단하여 구현한다."라는 문구가 있어, 요구 사항 외의 부분들에 대해 생각해 볼 수 있었습니다.

MVC 패턴을 적용하면서, 각 계층의 역할에 대해 고민할 수 있었습니다. 이번 과제에서는 Controller가 단순히 입력과 출력 사이의 흐름을 제어하는 역할만 수행하도록 하고, 실제 비즈니스 로직은 Model에 위임하는 형태로 구현했습니다. 이를 통해 책임을 명확하게 분리하는 것이 코드의 가독성과 유지보수에 얼마나 중요한지 느꼈습니다.

또, 테스트 코드를 작성하는 과정에서 코드의 오류도 발견할 수 있었습니다. 예를 들어 A라는 예외가 발생할 것으로 예상한 테스트에서 실제로는 B라는 예외가 발생하는 것을 발견해 수정할 수 있었습니다. 이런 과정을 통해 테스트 코드의 중요성을 실감할 수 있었습니다.

 

앞으로 남은 미션들도 열심히 진행해보겠습니다! 다들 화이팅입니다❤️