@1Consumption
안녕하세요 올라프!⛄️⛄️⛄️⛄️
STEP3 PR관련해서 추가적으로 질문드립니다.
# 질문 드리고 싶은 부분
## Bank를 class로 구현해야할지 struct로 구현해야할지
저희는 `ClientWaitingLine`을 제외한 모든 타입들을 struct타입으로 구현하였습니다. `Bank`, `BankManager`, `Client`가 struct로 구현되었습니다. 이 중 `BankManager`, `Client`는 struct로 구현되는게 적절하다고 생각합니다.
이유는 다음과 같습니다:
1. struct는 한 번 생성되면 immutable합니다.
값을 바꾸려면 새로운 struct를 생성해야합니다. `BankManager`는 프로퍼티를 가지고 있지 않기 때문에, 변경할 값 자체가 없습니다. `Client`는 프로퍼티를 가지고 있지만, 두 개의 프로퍼티는 고정적인 상수이고, 나머지 두 개는 `banking`에 따라 값을 반환해주는 연산프로퍼티입니다. 그래서 값이 변경될 일이 없습니다.
2. 상속해주거나 상속받을 일이 없습니다.
struct가 class보다는 불변적이지만, 성능상의 이점이 있습니다. 그래서 상속해주거나 상속받을 일이 없으면 class보다는 struct를 사용하는 것이 좋다고 알고 있습니다.
그런데, `Bank`는 struct로 구현하는게 적절했을지 모르겠습니다.
이유는 다음과 같습니다:
**값이 변화될 필요가 있습니다.**
struct 내부의 값을 변화시키기 위해서 mutating func들을 구현하고 있는 상황입니다. mutating func을 통해 struct의 값을 바꿀 수 있지만, 클래스처럼 프로퍼티 값만 바꿔주는 것이 아니라 아예 새로운 copy를 생성하는 방식이라고 합니다. 이런 경우라면, 프로퍼티 값을 자체적으로 바꿔줄 수 있는 class가 더 적합하지 않을까 하는 의심이 듭니다.
위와 같은 이유로 `Bank`를 어떤 타입으로 구현해야할지에 대한 의문이 생기는 바입니다. 이 부분에 대해서 조언해주시거나 공부할 부분을 짚어주신다면 감사하겠습니다🥹🙏🏻
안녕하세요 올라프!!