20201015-TIL

나영원·2020년 10월 15일
1

T.I.L.

목록 보기
53/145
post-custom-banner

오늘 공부할 내용

  • 아침공부
  • 프로젝트 진행 및 검토
  • 질문사항 조사 및 정리
  • TiL 정리 및 블로그 업데이트

오늘 공부한 것 & 배운 내용

  • 출근길 강의듣기

    • 오늘은 범계역부터 강의 듣기를 시작했는데 확실히 삼성역부터 시작할때보다 많은 내용을 들을 수 있어서 좋았다
    • 스프링 입문강의는 전체적이면서 대략적인 그림을 그려주시는데 집중하는 강의라서 도움이 많이 되는 것 같다.
    • 앞으로 스프링 공부나 다른 개발 공부에 접근할 때도 처음부터 모든걸 다 이해 하지못하더라도 큰 그림을 그리면서 가면서 공부는게 조급증도 없어지고 공부를 지속할 수 있는데 도움이 될 것 같다
    • 들으면서 생각하는 부분은 웹어플리케이션을 개발 하는 것이기 때문에 웹 전반적인 것을 조금이라도 더 알면 스프링 공부에 도움이 되면서 프론트엔드와 분업이 칼같이 나뉘어 진다는 것을 느껴 앞으로 협업이 어떻게 이루어질 것인가 대략적으로 이해할 수 가 있었다
    • 수업을 듣는 중 HTTP를 헤드와 바디로 나뉘어지고 그것을 당연히 이해하는 것으로 강사님이 생각하셔서 당연히 알아야 되는 구나하고 강의를 잠시 멈추고 생활코딩에 HTTP 짧은 강의를 듣기 시작하였다
      • 이렇게 어디에 무엇을 알고 있는지라도 알면 필요할 때 찾아 들을 수 가 있으니 한번에 배우진 못하더라도 정보에 위치를 알아두면 도움이 된는 것 같다
      • 전체적인 내용을 진행하면서 모르는 부분들은 따로 찾아서 공부하는 방식이 개발자로서의 전반적인 공부방향이 될 것같다
        • 한편으로는 이런 방식에 조금이나마 적응을 한 것 같아서 기분이 좋았다 -> 굿!
  • 오전시간 활용

    • HTTP 강의
      • Http에 대한 짧은 강의를 아침 시간을 활용하여 들었다
      • 강의내용 정리
        • HTTP 웹 클라언트와 웹서버의 통신 프로토콜로 웹을 구성하는 가장 기본적인 요소중에 하나이다
        • 개발자도구 - Network - Header 를보면 웹서버와 웹 클라이언트간의 요청과 응답 메세지들을 확인할 수 있다
        • 클라이언트에서 Request를 형식에 맞추어보내면 서버에서 Response하게 되고 그것을 바탕으로 웹브라우저는 출력을 하게 된다
          • Response에는 본문파일과 함께 본문에 대한 부가정보들을 담고 있다
          • Requset는 header와 body로 나뉘어지며 HEader에 형식에관한 내용들이 들어있고 Body에 전달하는 내용들이 담겨있다
        • HTTP에서 확장하여 HTTPS, cookie, chach, 프록시 서버 등에 관심을 가질 수있다
      • 느낀점
        • HTTP에 대해 기본적인 구조를 잡는 시간이었고 HTTP 메세지들을 확인하는 방법들을 배웠다
        • 단순히 웹페이지를 주고받는게 아닌 웹페이지가 포함하는 여러 파일들을 주고받는 통신 체계를 갖추고 있었다
        • 웹브라우저에서 이러한 정보들을 어떻게 표현하는건지 추가적인 궁금증이 생겼다
  • 프로젝트진행

    • 어제 한 부분들을 동료에게 검토 받고 어떤 방향으로 할 수 있는지 이야기를 해보았다

      • 메뉴 클래스가 중복되서 생성된 것을 enum으로 대체 할 수 있는 방식에 대해 이야기해보았다

        • 각각 Type에 메서드를 어떻게 구현할 것인가가 나에게 가장 큰 도전방식인것 같다
        • 그부분을 람다식을 활용하라고 얘기해주는 것 같은데 한번 해봐야겠다
      • List에 add하는 것을 깔끔하게 foreach를 통해서 하는 것을 수정하였다

      • SampleMenu가 MenuType을 몰라도 되기 때문에 분리하였다

        • 서로 정보를 몰라도 되는애는 철저하게 분리해주는 것에 신경을 많이쓰는것 같다
      • CheckMenuNum이 너무많은 기능하기 때문에 분리해야될 것 같다고

        • 메서드의 기능이 하나의 기능만 하도록하는것이 중요한 것 같다
      • MenuFactory를 if~else로 구현한것을 향상된 switch case로 고쳤다 -> 3개이상은 switch case가 낫다는 조언을 해주었다

      • Git을 pull할때 폴더자체를 지우고 IntelliJ를 통해 repositary를 가지고오는 방식을 알려줘서 배웠다

      • 한글을 사용하지 않고 코드도 영어로 사용하고 Git Issue등도 영어로 사용할 것을 권고 받았다

      • 장편소설을 쓰듯이 코드를 읽기 좋은 형태로 만드는 것을 목표로 해라라는 말에 코딩이 더어려워지겠지만 더 재밌어 질거같은 느낌을 받았다

    • 느낀점

      • 동료의 관점은 기능 구현은 기본이고 어떻게하면 더 좋은 코드를 짜는가를 중점적으로 얘기하는 것 같아서 많이 배울 수 있는 기회가 되고 있다
  • CUI 구현하기 #3

    • 혼자구현하기 앞서 많이 그려봐야된다고 동료가 조언을 해주어서 목표중심적으로 어떻게 구현할것인지 고민해보았다

      • 내가 구현할 것은 메뉴인데 프린트도하고 입력도 받아서 새로운 기능도 실현을 해야한다
        • 이넘을 통해 Type을 통해서 메뉴들을 표현하고 각 메뉴의 속성들을 가지게해서 출력하게 한다
        • 이넘에 Funtion을 포함해서 각각의 기능들을 가볍게 가지고 갈 수 있도록 노력한다
      • cui2 패키지를 만들어서 새로운 구조로 구현을 해보기로 하였다
    • cui2

      • 이넘을 통해 진행하는데 MenuFactory가 필요할까?

        • 이넘은 객체를 생성할 필요가 없어서 Factory가 필요가 없었다
      • 이넘구현을 기존구현에 적용하기

        • MainMenu를 출력하는 곳 까지는 어렵지 않게 구현이 가능하였다

          • 기존 구현들을 마치고 나니 클래스가 많아 subPackage까지 만들었던것들을 모두 지우고 2개의 클래스로 리팩토링할 수 있었다
          • 굉장히 뿌듯했다 -> 굿!
      • MenyType 메서드구현

        • 각 타입별 이넘들이 메서드들을 가지고 있는게 아니어서 구상하는데 어려움을 겪었다

          • 정방향 실행뿐아니라 역으로 돌아오는것과 메인으로 돌아오는것을 한번에 구현하려니 너무어렵게 느껴진다
          • 일단 정방향부터 구현해보고 해당 구현을 나누어서 구현할 수 있는지 생각해보자
        • 이넘안에 메서드를 작성하는 방법을 고민했다

          • 이넘 변수로 Funtion List를 선언해서 andthen으로 하나씩 묶는 방법을 먼저 생각해보았다
            • 한참 고민해보았지만 가능하지 않는 구현이었던 것같다..
        • Methods클래스 작성

          • 이넘들의 메서드들을 따로메서드 클래스에 작성해 사용하는 방법을 생각해 보았다
            • 먼저 inputIncome을 작성하여 최대한 구상한 내용들이 반영되도록 구현해보았다
              • 구현자체는 생각보다 쉽게 되었는데 문제는 이게 잘 쪼개져서 가볍게 돌아갈 수 있는 구현인지는 확인을 못했다
          • 구현한 inputIncome과 MenuHandler에 executeMenu에서 실행할 수 있는 방법 찾기
            • 처음엔 Enum에 뭔가를 해볼까 고민을 많이했는데 연결하기가 어려웠다
              • MenuMethods에 정적메소드 selectMenu를 만들어서 if else문을 통해 입력받은 MenuType별로 작성한 메서드들을 실행시키도록 만들었따
                • 처음엔 Enum을 switchcase로 깔끔하게 구현하고 싶었는데 외부 Enum은 Switchcase문에서 사용할 수가 없어서 그냥 if~else문으로 진행하게 되었다
                • 정적변수로 하게 되니 구지 객체를 만들필요도 없이 깔끔하게 구현이 가능했다
              • 다른 메서드들은 아직 구현을 할 단계가 아니어서 마지막으로 가계부 종료 메뉴를 추가하고 메소드를 구현하였다
                • 어떻게 구현할까 고민하다가 수업시간에 배운 System.exit이 떠올라서 사용했는데 다른 코드필요없이 바로 종료할 수 있어서 마음에 들었다
                  • 배웠던 부분중 모르는게 있으면 검색을 하지 않고 내가 작성한 TIL을 꺼내볼수 있어서 유용하기도 하고 뿌듯하기도 하다 -> 굿!
    • 재검토

      • 저녁먹으러 가기전 여태까지 구현한 내용을 동료에게 검토를 받았다
      • 피드백 내용
        • 내용 입력을 검증할 수 있는 방법들을 찾아보라고 이야기해주었다
          • 너무 긴 숫자입력이나 문자입력 등을 어떻게 처리할지 고민해보라고 했다
          • 그 후 직접 구현을 통해 어떻게 검증해야하는지 알려주었다
            • 다시한번 코드를 검토하면서 어떻게 구현했는지 살펴봐야겠다
        • 수입입력 부분에 대한 구현은 잘되었다고 해주었고 너무 긴코드를 methodExtraction해서 2개의 메서도르 나누어주었다
          • 메서드를 쉽게 Extract할 수 있는 기능을 배울 수 이썽ㅆ다
        • 클래스를 많이 줄인 부분은 함께 만족한 부분이었다
    • 다시 구현해보기

      • 구현하기전 동료가 작성한부분 검토하기
        • while문 쓰기전에 구현을 한번하고 그결과를 while문으로 돌리는 것이 배웠다
          • do-whle문을 써야하나 고민하는 부분들은 이런식으로 구현을 해도 좋을 것 같다
        • 파라미터에 람다식을 써서 메서드 내에서 활용하는 부분을 배웠다
          • 이런식으로 메소드들을 엮으라는 소리였던것 같은데.. 활용해본적 없는 방식이라 생각하기 어려웠던 것 같다
            • 그래도 다시 한번 메서드를 이런식으로 구현하면 어떻게 될지 고민해보는것은 많은 도움이 될 것 같다
        • isValidNumInput() 메서드를 통해서 정규표현식으로 검증하는 방식을 배웠다
          • 정규표현식은 아직 배우진 않았지만 이런식으로 활용하는 구나 알아두면 나중에 필요할때 찾아볼수 있을것 같다
      • inputIncome과 inputExpense는 구현상 차이가 없기 때문에 하나의 메서드로 구현하고 싶어서 방법을 연구해보았다
        • list의 들어가는 순서를 통해 쉽게 구현할 수 있었지만 이런식으로 나만알고있는 순서가 아니라 enum자체가 가지고있는 순서로 어떻게 할 수 없는지 궁금해졌다
          • Enum에 순서가 아닌 Input에 파라미터를 따로 설정해주어야 됬었다
          • inputParams List를 만들어서 Amount에 해당하는 것과 현재 list의 size가 같고 menu가 EXPENSE면 값에 -를 붙여주기로 하여 정리하였다 - 굿!

공부하면서 느낀점

  • 동료와 잠깐 쉬면서 얘기를 하는데 개발 실력이 계단식으로 느니까 여유를 가지고 공부해보라고 조언을 해주었다. 그리고 구현보다는 철학을 가지고 개발을 해나가는것이 중요하다는 얘기도 해주었는데 이번 프로젝트하면서 간접적으로 많이 경험을 해보는 것 같다

  • 프로젝트 구현을 하면서 동료에게 조언받은 대로 막힐때마다 최대한 그려보면서 했더니 어려운 문제들이 조금씩 정리되고 정리되는 것을 느꼇다

    • 머리로만 구현하지 말고 다른 수단을 이용해서 구체화해나가는 방법들을 좀더 찾아보면 좋을 것 같다
      • 아이패드 좋아보이던데..

내일 공부할 내용

  • 프로젝트 진행
  • 프로젝트 트러블슈팅
  • 질문사항 조사 및 정리
  • TiL 정리 및 블로그 업데이트
profile
배우는 개발 일기
post-custom-banner

0개의 댓글