[elegant] ch03 (정리중)
2022. 6. 23. 02:09
책/엘레강트 오브젝트
5 개 이하의 public 메소드만 노출하세요 → 작은 객체를 만드세요 작은 객체를 만들 수록 유지보수에 좋다는 의견에는 동의한다. 작은 크기의 객체를 만들 수록, 응집도가 높은 객체를 만들 “확률"이 높아지기 때문이다. 하지만 그 “크기" 에 대해서는 약간 의문스럽다. 책의 저자는 항상 단정지어 “이렇게만 만들어!!!” 라고 하는데 그 내용을 추상화 시켜서 딱 “ 작은 크기의 객체를 만들어 유지보수성을 높이자" 정도로만 생각하면 좋을 듯 하다. 그리고 여기서 는 “public 메소드의 개수를 제한" 하고 있는데, 실질적으로 객체 사이에 메시지를 주고 받을 때의 메시지가 “퍼블릭 메소드" 이기 때문이다. 이는 해당 “객체가 제공하는 기능" 에도 해당된다고 생각한다. 만약 그 개수가 너무 많다면, 너무 많..

[elegant] ch02 - 2.8
2022. 6. 15. 11:37
책/엘레강트 오브젝트
엘레강트 오브젝트의 ch2.8 을 읽으며 실습의 필요성이 느껴져 아래와 같이 진행해보았다. 생각과정이 꽤 많이 들어가서 이상한 코드들이 존재할 수 있으니 많은 첨언 부탁드립니다 🥺 외부 자원( 외부 서버 등)에 의존하는 클래스를 테스트하기 위한 방법은 뭐가 있을까?? 의존하는 인터페이스에 대한 모의객체 생성하기 우리는 이 가짜 객체 중 Mocking 의 단점에 대해 살펴볼 것이다 우리는 이 가짜 객체 중 하나인 Fake 객체를 사용 해 볼 것이다. 우리는 이 가짜 객체 중 Fake 객체의 장점에 대해 살펴볼 것이다 결론은 → 가능하다면 인터페이스에 대한 Fake 클래스를 작성하여 단위테스트를 합시다!!! (이 글을 작성할 때는 test double 에 대한 정리가 안되어 있었어서 그런지 혼란스러운 부분이..

불변객체사용하라 - 책 예시 코드 구현 (식별자 가변성)
2022. 6. 9. 22:28
책
가변객체의 위험성 -> 식별자 가변성 말그대로 식별자로서 사용되는 객체가 (가변객체이기 때문에) 변경되는 것이 허용되어있게 되는 것이고 , 이로 인해 예측하지 못한 일들이 벌어진다는 것이다. Cash 타입의 객체들은 "값 객체" 처럼 생각하고 작성하였다. private class Cash { private int cash; public Cash(int cash) { this.cash = cash; } public void setCash(int cash) { this.cash = cash; } public void mul(int operand) { this.cash *= operand; } @Override public boolean equals(Object o) { if (this == o) return..

[elegant]ch02_ ~ 2.6.4
2022. 6. 9. 01:24
책/엘레강트 오브젝트
가능하면 적게 캡슐화 객체는 함께 동작하는 객체들의 집합체 이기 때문에, 객체에는 캡슐화된 객체들이 있어야 한다 . 객체는 상태(내부의 객체)를 이용해 식별되어야 하는데, Java 에서는 껍질(==이나 Object 클래스의 기본적인 equals() 정의를 생각해보면 된다 ) 로 비교하고 있어 결함이 존재한다는 얘기를 하고 있다. 책에서 “상태로 객체를 식별" 한다는 것은 값객체에 대한 말인가? 엔티티와 값객체를 구분하면서 쓰여진 것인지 그 의도가 분명하지 않다는 생각이 들었다. 객체에 너무 많은 상태가 존재하는 것 보다는, 일부 상태를 캡슐화한 이루어져야 한다. 그 이유는 너무 많은 상태를 가진 객체는 인간의 인지적 한계로 이해하기 어렵기 때문이다. 상태를 객체들로 쪼개놓으면, 개별적인 객체들을 이해하기..

Self-invocation 과 @Transactional
2022. 6. 6. 03:03
Spring
로그인을 구현하지 않았기 때문에 게시글을 작성하는 작성자에 대한 writerId 를 전달 받아와야만 한다. writerId 를 받아와 게시글을 작성하는 서비스 메소드 뿐만 아니라, 후에 로그인 구현을 할 것을 생각하고 ( 이게 잘못되었던 걸까..) Writer 를 인자로 받는 메소드 또한 정의해 놓았다. 컨트롤러에서부터 Authentication 이라던가 Authmember 라던가 LoginMember 라던가 User 객체를 받아올 것으로 생각 했다. 그래서 이 메소드를 내부적으로 호출하도록 하였는데 여기서 @Transactional 과 this…() 에 대한 지적을 받았다 @Transactional public PostDto.PostInfo store(String title, User writer, S..

[elegant] 1. Birth 와 관련 자료 발표 영상
2022. 6. 5. 16:29
책/엘레강트 오브젝트
이 책은 객체가 살아있는 생명체인 것 처럼 표현한다. 객체가 태어나고 학습하고 취업하고 은퇴한다는.. 일종의 객체의 생명주기? 로 컨텐츠를 설명하고 있다. 그 중 첫 번째 챕터인 Birth 내용을 정리한다 +++(추가) 교육을 수강하며 ch01 과 관련하여 발표했던 자료가 있어 첨부한다 https://present.do/documents/62dd647c85df05656ca15627?page=0 객체의 가시성 객체의 가시성? 숫자 5 는 extra 라는 Cash 타입 객체 의 내부에 캡슐화 되어있다.반면 외부세계는, extra 객체가 어떻게 캡슐화 되어 있는가에 따라 extra 내부에 존재하는 5 를 직접적으로 볼 수도, 간접적으로 볼 수도 있을 것이다. if(price < 100){ Cash extra ..

[Java] ImmutableCollection 과 UnmodifiableCollection 과 Immutability
2022. 5. 31. 01:32
Java
테스트 코드를 작성할 때면 List.of 를 무지성으로 사용하고는 했었다.해당 정적팩토리 메소드를 통해 리턴되는 리스트는 불변 객체라고는 알고 있었지만, 어떤 의미에서의 불변인지.. 해당 컬렉션에 담겨있는 element는 변경이 가능한 것 같은데 왜 Immutable 이라는 이름이 붙어있는지 궁금해졌다.그래서 교육 방학 첫날(?) release note 를 통해 알아보았다 ImmutableCollection @jdk.internal.ValueBased static abstract class AbstractImmutableCollection extends AbstractCollection { // all mutating methods throw UnsupportedOperationExc..

[JPA]EntityManager merge와 persist
2022. 5. 10. 15:28
JPA
JPA 강의 듣고 공부하면서 velog 에 썻던 글이길래 티스토리에 복붙 + 그 때는 사실 그래서 이 차이가 어떤 결과를 낳는데? 라고 생각하며 사실상 글 번역 정도였었어서 몇가지를 더 추가했다. 무려 12년 전 글이다. - JPA EntityManager: Why use persist() over merge()? 상황 JpaRepository를 extend하는 UserRepsoitory interface를 생성하였다. 해당 repository를 사용하여 save 하면, 기존에 존재하던 object의 경우, 데이터를 update하고, 새로운 것일 경우 insert하는 것을 확인했다. SimpleJpaRepository.class 라는 클래스를 살펴보면, save() method에서는 em.persist(..