[Atomic Kotlin] ch03 사용성 : 30 ~ 32 까지 (when 전)
2023. 10. 17. 22:39
책
이번 챕터는 내용이 재밌어서 개인적 공부 , 견해, 책 내용을 정리 해 보았다 30 : 확장 함수(Extension function) 기존 클래스에 “멤버 함수” 를 추가하는 효과 따라서 확장함수에서는 , 확장 타겟 클래스의 멤버들에 접근 가능 (this 생략 가능) 물논 public 멤버 들에 대해서만 !! 접근 가능 확장 타겟 클래스 : receiver type(수신 객체 타입) package ExtensionFunctions import atomictest.eq fun String.singleQuote() = "'$this'" // 수신타입.확장함수 fun String.doubleQuote() = "\\"$this\\"" fun main() { "Hi".singleQuote() eq "'Hi'" /..
ch08 경계 -결론: 외부 API 를 사용할 경우 우리의 interface를 작성한다면 좋을 텐데 (가능한 일인지는 잘 모르겠다 ㅎ)
2023. 4. 12. 19:18
책/클린 코드
이번 장은 전체적으로 같은 얘기를 하고 있어서 “결론” 으로 전체 내용을 잘 정리해 볼 수 있을 것 같았다. 이번 챕터는 나의 발표순서도 아니니 간단하게 정리해서 이 부분은 블로그 포스팅을 하기로 했다. 간단하지만 중요한 얘기 같다. 하지만 아직……. 회사에서…개발을 안하다 보니… 외부 API 를 사용할 때 어느정도까지 우리만의 인터페이스나 wrapper 클래스를 작성하는 지 까지는 감이 잘 오지 않는다. 결론 내가 원하는 기능을 정의한 오픈 소스들은 이미 많이 존재하고 있다. 이러한 외부 API 를 사용할 경우 시스템 자체에서 다 개발할 필요가 없어 개발 속도가 빨라질 것이다. 하지만 외부 API 를 사용할 경우, 우리의 코드가 상당히 위험해짐에 항상 주의해야 한다! 이 책에서 말하는 “경계” 란 외부..
[Item 73] 추상화 수준에 맞는 예외를 던져라
2022. 12. 31. 18:32
책/effectiveJava
이런 상황이 있다고 가정 해보자! 저수준 예외를 처리 하지 않으면서, 그대로 바깥으로 전파할 때 생기는 일?예외 발생 시, 수행하려는 일과 관련 없어 보이는 예외가 나올 수도 있다. → 어떤 로직 에서 이러한 예외가 발생했는지 파악하기가 힘들어져 디버깅 이 어려워진다그리고 보통(?) 이 예외와 관련된 예외 메시지를 응답으로 보내주기 때문에, 사용자 입장에서는 뜬금없는 SQLException 과 관련된 에러 메시지를 응답으로 받게 될 수도 있다..고 생각한다.내부 구현 방식을 드러낸다이를 사용하는 클라이언트가 오염된다. 다음 릴리즈 에서 내부 구현을 변경하며 예외도 달라지 면, 이를 사용하던 기존 코드가 깨진다.저수준 예외를 처리하지 못한다면, 어떻게 해줘야 할까?예외가 발생하면 우리는 흔히들 아래와 같이..
Item 53 : 가변인수는 신중히 사용하라
2022. 8. 24. 13:33
책/effectiveJava
가변인수가 등장하기 전에는? varargs 는 Java 5 에 도입되었다. 그렇다면 그 이전에는 “임의 개수의 인자가 전달되어 올 수 있는 상황" 에 대해 어떻게 다루고 있었을까? 배열을 받는 메소드 → 명시적으로 배열을 인자로 받는 메소드 선언 public int sum(int[] args) { ... } N 개의 메소드를 선언 ( 1개,2개,3개,…. 인자를 받는 메소드들) public int sum() { ... } public int sum(int value) { ... } public int sum(int val1, int val2) { ... } 가변인수? 가변인수 명시한 타입의 인수를 “0개 이상" 받을 수 있다. 가변인수 메소드 호출시 무조건 “배열을 생성" 하여 인수들을 배열에 저장하여 ..
[elegant]ch04 ! 끝!
2022. 6. 23. 22:33
책/엘레강트 오브젝트
모든 내용은 정답에 대한 내용이 아닙니다 개인적인 생각들이 추가 되어있으며,책의 내용에 대한 의문도 적어두었습니다 Null 반환 대신 예외던지기 null 반환 메소드 클라이언트에서는 “null 방어 코드" 를 작성해야만 한다. 반환 결과를 확인하는 코드를 작성해야만 한다 → 객체지향세계에서 객체는 “(자신만의 행동, 상태, 생명주기 를 가지는 )자율적인 객체" 이고, 우리는 이 “객체를 신뢰”하며 사용해야 한다. 그런데 객체가 반환하는 결과를 확인해야만 한다면 “신뢰 할 수 없는 객체" 가 되는 것이나 다름없다. 객체는 자신의 행동을 책임져야 한다. 심지어 내부적으로 예외를 발생시키는 것도 괜찮은데, 그 사실에 대해 알려줘야 한다. null 을 반환하는 객체를 신뢰할 수가 없으니 우리는 반환된 결과를 다..
[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..