GithubHelp home page GithubHelp logo

ios-bank-manager's Introduction

은행 창구 매니저

프로젝트 기간 2022-04-25 ~ 2022-05-06 팀원 : @두기 @쿼카 / 리뷰어 : @Tony

STEP 1 기능 구현

  • LinkedList를 통한 Queue구현

고민했던 것들

1.Linked Listclass VS struct

LinkedList는 상속도 참조도 하지 않으니 heap영역을 사용하지 않는 값타입의 struct를 사용하는 것이 성능 적인 측면에서 좋을 것이라고 생각을 했다 그런데 LinkedList를 struct로 만들게 된다면 mutating키워드를 사용하게 되다보니 결국 값의 변경을 위해 복사를 해놓는 비용이 생기게 되는데 이걸 상쇄시킬 만큼의 성능적 이득이 있을지 고민을 했다 -> 일단은 큰 차이가 없을 것이라고 생각해 class를 선택하긴 했으나 명확한 차이를 내는 사실을 찾게 된다면 그 사실에 따라 변경 가능성 있음

2. 연산프로퍼티와 메서드의 사용의 구분 법

사이드이펙트가 없이 간단히 값만 확인하는 목적인 isEmpty, first는 연산프로퍼티로 구현해주고 사이드이펙트가 발생하는 기능은 메서드로 구현함

배운 개념

  • Linked List
  • ARC

PR 후 개선사항

1. early return시 guard vs if

  guard !isEmpty else { return }

프로젝트 코드 중 조건을 확인해 리턴을 바로 해주는 구문이 있었는데 통상적으로 early return을 할 때는 guard문을 사용한다고 알고 있었으나 리뷰어의 말에 따르면 'guard문을 써서 얻는 이득이 무엇인지, 어떤게 더 가독성이 좋은지에 따라서 선택하면 좋겠다 그리고 일반적으로 ~해서 했다 라는 생각은 내려두면 좋겠다' 라는 말을 듣고 훨씬 더 알아보기 쉬운

if isEmpty { return }

으로 코드변경을 하게 되었다

2. Node에 들어올 값의 네이밍

최초에 큐에 사용되는 제네릭 타입의 이름을 Element라고 지었으며 Node에 들어올 값의 네이밍은 data로 지었다 그런데 이렇게 되면 노드의 값을 부를 때 data라고 부르는 사람이 있을 수 있고 Element타입의 요소니 element라고 부를 사람이 생겨 혼용 될 수 있을 수 있으니 dataelement로 변경 하기를 제안해 주셨다 최종적으로, Element와 값의 구분을 위해 datanewElement로 수정하게 되었다

커밋 룰

Commit message 커밋 제목은 최대 50자 입력

💎feat : 새로운 기능 구현 ✏️chore : 사소한 코드 수정, 내부 파일 수정, 파일 이동 등 🔨fix : 버그, 오류 해결 📝docs : README나 WIKI 등의 문서 개정 ♻️refactor : 수정이 있을 때 사용 (이름변경, 코드 스타일 변경 등) ⚰️del : 쓸모없는 코드 삭제 🔬test : 테스트 코드 수정 📱storyboard : 스토리 보드를 수정 했을 때

Commit Body 규칙 본문은 한 줄 최대 72자 입력 제목 첫 글자를 대문자로 제목은 명령문으로 제목 끝에 마침표(.) 금지 제목과 본문을 한 줄 띄워 분리하기 본문은 “어떻게” 보다 “무엇을”, "왜"를 설명한다. 본문에 여러줄의 메시지를 작성할 땐 "-"로 구분

ios-bank-manager's People

Contributors

quokkaaa avatar doogie97 avatar yagom avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.