[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'" /..
testcontainer with docker-compose
2023. 6. 21. 20:48
카테고리 없음
먼저 이 글은.. docker run 명령어도 copy&paste 를 하지 않고는 치지 못하는 시점에 시도 해 보았던 것 임을 밝힙니다 ( 현재 사용 하고 있지는 않음 ) Intro : 왜 dokcer compose 랑 testcontainer ? docker-compose.yaml 로 내가 실행할 컨테이너에 대한 이미지 버전, 해당 컨테이너에 대한 환경 변수들의 설정 을 하고 docker-compose up -d 만 실행해 주는 것이 매 번 필요한 것들(변수 설정, expose 포트 명시, lifecycle 전략 등등 ) 을 여러 줄로 이루어진 docker run 명령어로 치는 것 보다 더 유용하다고 생각이 들었다 이런 생각이 들 때 즈음, testcontainer 에 대해서도 본격적으로 한 번 시도 ..
패키지 원칙에 대해 고민해보자 (with OOD)
2023. 6. 6. 14:25
카테고리 없음
여느 개발에서 마주하는 문제들과 같이, 패키지 구조에 대한 설계 역시 패키지 구조를 어떻게 잡는가 에 대한 명확한 가이드 라인은 없는 것 같다. 최근(아직까지) 수행중인 인턴 프로젝트의 구조를 잡는 과정에서 우왕좌왕 하다보니 패키지 구조마저 우왕좌왕 한 구조로 만들어져 있었다. 한 눈에 들어오지 않는 구조, 새로운 클래스를 만들었을 때 어떤 패키지에 넣어야 할지 고민하게 되는 구조가 탄생 함에 따라 패키지 구조를 설계할 때 고려 해 볼 원칙들을 다시 한 번 정리해 보았다. 이런 원칙들을 정리하며, 이번 프로젝트의 패키지 구조도 어떻게 잡아 볼지에 대한 개관을 얻고자 했다. 패키지 원칙 (package principle) (위키피디아) 큰 시스템에서 클래스들을 조직화 하는 방법 목적 : 좀 더 정돈된 시스..
@DataJpaTest 를 사용 시 Test data 가 영속성 컨텍스트에 남아있지 않도록 만들기
2023. 5. 5. 20:50
JPA
수정해야 하는 부분 -> TransactionEntityManager 사용은 '트랜잭션 분리' 는 아니고, 영속성 컨테스트 상태를 분리한 것 정도로 생각할 수 있다. 동일한 Test manged transaction 내에서 그저 영속성 컨텍스트를 비우기 위해 em.flush() 및 em.clear() 를 하는 것이기 때문 Intro JPA 강의를 들은지 굉장히 오래되었고.. 부끄럽지만 확실하지 않은 상태에서 코드를 작성했는데, 이로 인해 쿼리를 제대로 예상하지 못한 일이 발생했다. 생각했던데로 쿼리가 나가고 있긴 했지만 이를 확인하기 전에는 다른 분의 질문에 (매우매우 매우매우 기본적인 개념이었음에도..)“아마..맞을걸요?” 라는 대답을 하고 있었다 ㅠ-ㅠ. 거기에 더불어 쿼리를 확인하겠다고 작성한 테스..
ConcurrentModificationException 은 어디서, 언제 throw 되는걸까?
2023. 4. 12. 19:40
Java
Java 개발을 한 사람들이라면 ConcurrentModificationException 에 대해 들어보았을 것이다. Collection에서 순회중, 데이터의 조작이 발생하는 경우 ( 이름만 보면 분명 Concurrent 인데 멀티스레드가 아닌 단일 스레드 환경 에서도 해당 예외가 발생한다. ) thread가 간섭 하면서 발생 이라고 흔히들 알고 있을 것 같다. 오늘은 대체 이 ConcurrentModificationException 이 내부적으로 어떤 로직에 의해 throw 되는 것인지 알아보기로 했다. ConcurrentModificationException 발생 시켜 보기 내부적으로 Iterator 를 사용하는 코드가 존재하는 경우 발생하게 된다. 가장 흔하게 볼 수 있는 것은 이미 해당 Colle..
ch08 경계 -결론: 외부 API 를 사용할 경우 우리의 interface를 작성한다면 좋을 텐데 (가능한 일인지는 잘 모르겠다 ㅎ)
2023. 4. 12. 19:18
책/클린 코드
이번 장은 전체적으로 같은 얘기를 하고 있어서 “결론” 으로 전체 내용을 잘 정리해 볼 수 있을 것 같았다. 이번 챕터는 나의 발표순서도 아니니 간단하게 정리해서 이 부분은 블로그 포스팅을 하기로 했다. 간단하지만 중요한 얘기 같다. 하지만 아직……. 회사에서…개발을 안하다 보니… 외부 API 를 사용할 때 어느정도까지 우리만의 인터페이스나 wrapper 클래스를 작성하는 지 까지는 감이 잘 오지 않는다. 결론 내가 원하는 기능을 정의한 오픈 소스들은 이미 많이 존재하고 있다. 이러한 외부 API 를 사용할 경우 시스템 자체에서 다 개발할 필요가 없어 개발 속도가 빨라질 것이다. 하지만 외부 API 를 사용할 경우, 우리의 코드가 상당히 위험해짐에 항상 주의해야 한다! 이 책에서 말하는 “경계” 란 외부..
Aggregation 과 Composition 개념
2023. 3. 24. 11:41
Java
서브클래스, 서브타입, 클래스들간의 각종 관계 등에 대해 정리해보고자 시리즈물로 준비했다. 나는 이 부분에 대해 전혀 모르기 때문에 간단한 정리가 될 것이다. 1. 타입과 클래스들의 관계 그리고 리스코프 치환원칙 2. Aggregation 과 Composition 개념 3. Subtype 과 Subclass Aggregation 과 Composition Composition 은 Java 개발을 하면서 “상속 대신 컴포지션을 사용하라” 라는 말로 수도 없이 많이 들어온 용어다. 그리고 알게모르게 대부분의 자바 개발자들은 Composition 을 사용하고 있으니 익숙하다..고 생각했다. 그런데 이펙티브 자바 스터디를 진행하는 과정에서 누가 화두를 꺼냈다. Aggregation 과 Composition 의 차..
타입 및 클래스들 사이에 존재하는 각 종 관계들과 리스코프 치환 원칙
2023. 3. 24. 11:35
Java
서브클래스, 서브타입, 클래스들간의 각종 관계 등에 대해 정리해보고자 시리즈물로 준비했다. 나는 이 부분에 대해 전혀 모르기 때문에 간단한 정리가 될 것이다. 1. 타입과 클래스들의 관계 그리고 리스코프 치환원칙 2. Aggregation 과 Composition 개념 3. Subtype 과 Subclass 봐도 봐도 헷갈린다. 그래도 이제는 헷갈릴 때 마다 여러번 봐 놓았었더니 wiki 내용이 조금 와 닿기 시작했다. wiki 에 있는 Is-a 와 관련된 설명들을 바탕으로 s-a , has-a 등 각종 타입간의 관계와 이를 리스코프 치환 원칙과 연관 지어 정리 해 보기로 했다. 타입 및 클래스들 사이에 존재하는 각 종 관계들과 리스코프 치환 원칙 리스코프 치환원칙 과 “Java 에서의 is-a 관계” ..