240219-240225 TIL

2024. 2. 18. 22:42스파르타_부트캠프/TIL

24.02.25(일)

오늘 한일

Java 

  • "Java - Annotation"  관련 내용을 정리하고 테스트 코드를 작성하였다. Annotation에 대해 아는 것만 

스프링

  • 비즈니스 로직 설계를 위한 Controller, Service, Repository 관계 관련 간단한 예제 실습

내일 할일

  • 알고리즘 문제 풀이
  • 스프링 입문 인프런 강의 청취
  • JPA 실전 강의 청취 및 모르는 부분 정리
  • 야놀자 클론 코딩에 회원가입 기능 구현

24.02.23(금)

오늘 한일

코딩 테스트

내일 할일

  • 알고리즘 문제 풀이
  • 스프링 입문 인프런 강의 청취
  • JPA 실전 강의 청취 및 모르는 부분 정리
  • 야놀자 클론 코딩에 회원가입 기능 구현

24.02.22(목)

오늘 한일

코딩 테스트

특강

  • 학습법 특강을 줌 회의를 참석하여 청취하였다. 가장 기억에 남는 말은 개발자는 "목적과 의도를 가지고 설명할 수 있어야한다" 는 말이였다. "설명할 수 없으면 아는 것이 아니다" 라는 말처럼 안다는 것의 동일한 말은 설명할 수 있다는 뜻인데 개발자에게는 이 말이 특히 중요하구나 라는 것을 다시 한번 느낄 수 있었다.
  • 질문으로 기업 지원 자격에 맞는 기술 스택 경험을 가지고 있는지 물어봤는데 가능성이 낮다고, 필터링될 확률이 높다고 이야기를 들었다. 목적과 의도를 가지고 기술을 선택하였으나 기업에 기술 스택과 맞지 않으면 취업할 확률이 낮다는 것이다.
  • 뭐든지 극단으로 치우친 생각은 좋지않다. 중요한 것은 균형이다. 기술 스택, 개발자적 사고 방식 모두 중요하다. 좁은 취업문이라면 당연히 "딱" 맞는 인재가 필요한 법이다. 채용 담당자가 "딱" 맞는 인재가 지원했다는 것에 감탄하도록 만드는게 핵심이다. 여기에 집중하는 것이 당면한 취업에 핵심 목표로 잡는다.

파이썬 과제

  • 과제를 받았고 내용을 분석하였다. 
  • 챕터 1, 2 를 구현하였고 github에 push하였다. - https://github.com/lsi3131/SpartaPersonalTask
  • Up,Down게임 / 가위,바위, 보 게임을 파이썬으로 풀어보니 예전 대학생 때(무려 9년이 지났다) C언어로 비슷한 문제를 풀었던 생각이 난다. C언어를 공부할 때는 SoEn: 소프트웨어 공학 연구소 로 공부했는데 오랜만에 생각나서 찾아가보니 여전히 그대로인 화면 인터페이스가 나타나니 감회가 새롭다.
  • 파이썬으로 간단한 S/W를 구현해보니 편의성이 '압도적'이다. 특히 C++로 앱을 짰을 때와 생산성이 비교가 안된다. 간단히 다음과 같은 부분에서 차이를 느꼈다.

가위, 바위, 보 결과 비교 함수

[python 코드]

WIN_LIST = [
    ('rock', 'scissor'),
    ('scissor', 'paper'),
    ('paper', 'rock'),
]

LOSE_LIST = [
    ('rock', 'paper'),
    ('scissor', 'rock'),
    ('paper', 'scissor'),
]

DRAW_LIST = [
    ('rock', 'rock'),
    ('scissor', 'scissor'),
    ('paper', 'paper'),
]

def fight(user: str, computer: str):
    comp = (user, computer)
    if comp in WIN_LIST:
        return FightResult.WIN
    if comp in LOSE_LIST:
        return FightResult.LOSE
    if comp in DRAW_LIST:
        return FightResult.DRAW

    return FightResult.INVALID

 

가위, 바위,보 조건에 따라 fight 함수내의 if, elif가 다닥다닥 붙어있는 것이 싫어서 다음과 같이 (user, computer) 조합을 미리 승, 무, 패가 정의된 튜플 페어 리스트에 존재하는지 비교하여 결과를 반환하도록 했다. 이 코드를 C++로 변환하면 어떻게 될까?

[C++ 코드]

#include <iostream>
#include <vector>
#include <utility>

enum class FightResult {
    WIN,
    LOSE,
    DRAW,
    INVALID
};

FightResult fight(const std::string& user, const std::string& computer) {
    std::vector<std::pair<std::string, std::string>> WIN_LIST = {
        {"rock", "scissor"},
        {"scissor", "paper"},
        {"paper", "rock"}
    };

    std::vector<std::pair<std::string, std::string>> LOSE_LIST = {
        {"scissor", "rock"},
        {"paper", "scissor"},
        {"rock", "paper"}
    };

    std::vector<std::pair<std::string, std::string>> DRAW_LIST = {
        {"rock", "rock"},
        {"scissor", "scissor"},
        {"paper", "paper"}
    };

    std::pair<std::string, std::string> comp = std::make_pair(user, computer);

    if (std::find(WIN_LIST.begin(), WIN_LIST.end(), comp) != WIN_LIST.end()) {
        return FightResult::WIN;
    }
    if (std::find(LOSE_LIST.begin(), LOSE_LIST.end(), comp) != LOSE_LIST.end()) {
        return FightResult::LOSE;
    }
    if (std::find(DRAW_LIST.begin(), DRAW_LIST.end(), comp) != DRAW_LIST.end()) {
        return FightResult::DRAW;
    }

    return FightResult::INVALID;
}

타입이 템플릿으로 덕지덕지 붙은 코드가 나온다. 단순히 튜플 리스트를 만드는 것도 너무 장황하다. find 함수 역시 직관성과 거리가 멀다. C++을 오랫동안 써왔기 때문에 폄하할 의도는 전혀 없지만 python 코드는 딱보면 알겠는데 C++은 장황한 코드에 정신이 살짝 아득해진다. 언어 차원에서 리스트, 튜플, 딕셔너리를 지원한다는게 얼마나 강력한지 새삼 느꼈다. 

내일 할일

  • 알고리즘 문제 풀이
  • 스프링 입문 인프런 강의 청취 및 야놀자 클론 코딩 기능 구현에 반영

24.02.21(수)

오늘 한일

코딩 테스트

  • "네트워크 딜레이 타임" 내용을 정리하여 팀원들에게 발표하였다.
  • "K 경유지 내 가장 저렴한 항공권" 문제를 풀이하였다.책에 나온 예제에 따라 구현했는데 Time Limit Exceed가 발생하여 엄청 삽질하였다. 튜더님에게 도움을 얻어서 원인 파악 및 문제를 해결할 수 있었고 내일까지 정리할 예정이다.

내일 할일

  • 알고리즘 문제 풀이
  • 스프링 입문 인프런 강의 청취 및 야놀자 클론 코딩 기능 구현에 반영

24.02.20(화)

오늘 한일

코딩 테스트

  • 다익스트라 알고리즘에 대해 학습하였고 "네트워크 딜레이 타임" 문제 풀이를 진행하였다. 정리는 내일까지 진행할 예정이다.
  • "문자열 팰린드롬 비교 문제"를 팀원들에게 설명하였고 leetcode 상에서 문제 풀이되는 것을 보여주었다.

야놀자 클론 코딩

  • 야놀자 클론 코딩 github 리포지토리를 생성하였다.
  • 유스케이스, 기술 스택, 반복주기 관련 위키를 작성하였다.(https://github.com/lsi3131/yanolja_clone/wiki)
  • 스프링을 사용하여 index.html까지 출력하는 것을 진행하였다. 스프링 MVC에 대해 튜토리얼을 진행하지 않아 @Controll 어노테이션, index.html 배치, thymeleaf 사용법 등에서 삽질을 많이 했다. 
  • 무작정 클론 코딩을 진행하기 보단 스프링 입문 인프런 강의 와 병행하여 배운 내용을 코드에 적용하는 방식으로 진행해야겠다.

내일 할일

  • 알고리즘 문제 풀이
  • 스프링 입문 인프런 강의 청취 및 야놀자 클론 코딩 기능 구현에 반영

 


24.02.19(월)

오늘 한일

코딩 테스트

신규 팀원 OT

  • 인사 및 자기소개. 팀명 정하기. Ground Rule 작성 등을 진행
  • 이전 미니 프로젝트 리뷰를 진행

팀원들과 소통에 많은 시간을 보냈다. 내일은 클론 코딩 프로젝트를 조금이라도 진행할 수 있도록 한다.

내일 할일

  • 학습 내용 정리 및 공유
  • 알고리즘 문제 풀이
  • 야놀자 클론 코딩 유스케이스 분석

'스파르타_부트캠프 > TIL' 카테고리의 다른 글

240228 TIL  (0) 2024.02.28
240226~240303 TIL  (0) 2024.02.26
240213-240218 TIL  (2) 2024.02.13
비슷한 직무 JD 분석  (0) 2024.01.22
스파르타 부트캠프 Daily TIL 제출 로그  (0) 2024.01.18