SSAFY11th-book-study / book-study

0 stars 0 forks source link

[5.1.4] 클래스가 초기 값을 알고 있는 것이 부적절한 이유 #43

Open gmelon opened 4 months ago

gmelon commented 4 months ago

p.337 상단에 보면 아래와 같은 문장이 있습니다.

처음 가입할 때를 제외하면 무의미한 정보인데 단지 이 로직을 담기 위해 클래스에서 직접 초기화하는 것은 좀 문제가 있어 보인다.

User 클래스에서 level 필드를 아예 처음부터 Level.BASIC으로 초기화해버리는 것이 부적절하다는 것을 설명하면서 나온 문장입니다. 이에 대한 대안으로 UserService.add() 에서 초기 값을 설정해주는 것을 제시하는데 User 클래스가 초기 값을 아는 것이 어떤 의미에서 부적절한 것인지 대강은 이해가 되는데 정확하게 납득이 되지 않아 질문 올려봅니다.

sootudio commented 4 months ago

제가 생각했을 때는 User 클래스에 새 정보가 들어갈 시 초기 정보가 BASIC으로 고정된다는 조건이 변할 수도 있기 때문에, User 클래스 내에서 초기화 하는것은 확장성 면에 있어서 좋지 않다고 생각했습니다.

또한, 유저의 정보를 저장하는 틀(?)을 만드는 역할을 하는 유저 클래스에서, 유저의 속성 값을 직접 알고, 설정해 주는 것은 User 클래스의 책임이 아니라는 생각이 들었습니다.

뭔가 토프링 공부를 하기 이전에 생각했다면, User 클래스에 고정값을 미리 넣어놓고 add할 때마다 신경쓰지 않아도 된다는 것이 더 효율적이라고 생각했을것 같은데, 토프링을 배우면서 확장성을 고려하게 된 것 같아서 신기하기도 하고... 그러네용

도와준 사람: @limjongheok

sootudio commented 4 months ago

추가 논의 - 객체와 클래스의 차이가 뭘까요?

image

나온 얘기들

hj-k66 commented 4 months ago

객체는 소프트웨어 세계에 구현할 대상이고, 설계도(클래스)에 따라 소프트웨어 세계에 구현된 실체가 인스턴스입니다.

gmelon commented 4 months ago

클래스는 설계도이기 때문에 비지니스 로직인 값을 가지면 안 됨

limjongheok commented 4 months ago

그렇다면 만약 초기값 설정이 필요 상황이 있을시 db 테이블 default 를 설정해 두면 어떨까요??