Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ITEM 17. 변경 가능성을 최소화하라 #35

Closed
VSFe opened this issue Feb 21, 2021 · 1 comment
Closed

ITEM 17. 변경 가능성을 최소화하라 #35

VSFe opened this issue Feb 21, 2021 · 1 comment
Assignees
Labels
Assignment Something to submit

Comments

@VSFe
Copy link
Collaborator

VSFe commented Feb 21, 2021

지난 스터디에서도 이야기했지만, 일급 컬렉션이라고 하는 것을 활용하면 불변성을 보장하면서도 상태와 행위를 한 군데서 관리할 수 있는 이점이 있다는 이야기가 잠시 나왔습니다.

item 17은 변경 가능성을 최소화 하는 방법으로 확장 가능성을 차단하고, Setter를 없애버리는 등의 방법을 제시하고 있는데, 이 규칙을 유지하면서 일급 컬렉션을 생성하는 방식으로 클래스를 만들 수 있습니다.

우리의 목표는 다음과 같습니다.

현재 대한민국의 대입 전형은 정시와 수시로 나누어져 있습니다.
수시는 9월부터 접수하며, 최대 6개의 대학을 쓸 수 있습니다.
같은 대학을 지원하는 것은 가능하지만, 같은 대학의 같은 학과를 다른 전형으로 지원하는 것은 불가능합니다.
입시 사이트를 만든다고 가정하고, 다음 조건을 만족하는 EarlyAdmission 클래스를 설계해 봅시다.

  • 레퍼런스를 참고하여 일급 컬렉션으로 설계해야 합니다.
  • 학생의 이름과 생년월일, 그리고 지원 학교 및 학과 정보, 합격 여부를 담아야 합니다. 타입은 제한되어 있지 않으나, 구분만 제대로 되어 있으면 됩니다.
  • toString, compareTo, hashCode를 재정의하되, 앞에서 배웠던 원칙을 지켜가며 작성해야 합니다.
  • 지원할 수 있는 학교 및 학과는 0개 이상 6개 이하입니다. 만약 7개 이상일 경우 예외를 반환해야 합니다.
  • EarlyAdmission에서 새로 정의해야 할 메소드는 최소 3개 이상입니다.
    • showResult(): 만약 합격한 학교가 1개도 없다면 다 떨어졌다는 메시지와, 재수 학원 홍보 문구를 출력합니다. 반대로 학교에 1개라도 합격했다면 더 좋은 학교를 갈 수 있도록 반수를 권하는 문구를 출력합니다.
    • getAcceptedResult(): 합격한 대학의 정보를 출력합니다.
    • getDeclinedResult(): 불합격한 대학의 정보를 출력합니다.
  • 그 외 책에서 명시하는 유의점 (비용 절약을 위해 캐싱하는 방식을 사용한다, 빌더 패턴을 사용할 수도 있다 등등...) 을 잘 살펴보시고 작성해보세요. 기왕이면 PR에 명시해도 좋습니다.

적어보니까 많이 빡세네요... 다들... 파이팅...

Reference: https://jojoldu.tistory.com/412

@VSFe VSFe added the Assignment Something to submit label Feb 21, 2021
@sypark9646
Copy link
Collaborator

https://www.acmicpc.net/problem/1454
https://www.acmicpc.net/problem/3085
https://www.acmicpc.net/problem/2578

요런거 해보면 될 것 같네용!! 문제 푸는것도 좋지만 게임 규칙만 따와서(?)
VSFe님의 다른 좋은 아이디어도 좋슴다!!😆

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Assignment Something to submit
Projects
None yet
Development

No branches or pull requests

4 participants