Aggregation 과 Composition 개념
2023. 3. 24. 11:41
Java
서브클래스, 서브타입, 클래스들간의 각종 관계 등에 대해 정리해보고자 시리즈물로 준비했다.나는 이 부분에 대해 전혀 모르기 때문에 간단한 정리가 될 것이다. 1. 타입과 클래스들의 관계 그리고 리스코프 치환원칙2. Aggregation 과 Composition 개념3. Subtype 과 SubclassAggregation 과 CompositionComposition 은 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 관계” ..
@InjectMocks 는 구현체여야 하는데, 구현체 타입으로 명시하고 싶지 않은 경우
2023. 1. 3. 19:51
Spring
@InjectMocks 는 구현체여야 하는데, 구현체 타입으로 명시하고 싶지 않은 경우 @InjectMocks 를 사용하기 위해서는 구현체 타입이어야 한다. 생각해보면 당연하다. 해당 객체가 갖는 의존성들을 모킹해서 주입해주겠다는 것인데, 실제 구현 객체가 누구인지, 그리고 그 객체가 어떤 이들에 대해 의존성을 갖고 있는지도 모르고 어떻게 모킹해서 주입을 해 주겠는가. 당연한 거지만 이로인해 약간의 고민이 생겼어서 기록해 보았다. 아래와 같은 계층 구조 일 때, JoinAccountService 라는 “회원가입 책임” 을 가진 서비스를 테스트 하고 싶었다. 이 때 JoinAccountService 는 인터페이스로, AccountService 에서는 해당 인터페이스를 구현하는 구현체로서 두었다. 테스트 대..

[Item 73] 추상화 수준에 맞는 예외를 던져라
2022. 12. 31. 18:32
책/effectiveJava
이런 상황이 있다고 가정 해보자! 저수준 예외를 처리 하지 않으면서, 그대로 바깥으로 전파할 때 생기는 일?예외 발생 시, 수행하려는 일과 관련 없어 보이는 예외가 나올 수도 있다. → 어떤 로직 에서 이러한 예외가 발생했는지 파악하기가 힘들어져 디버깅 이 어려워진다그리고 보통(?) 이 예외와 관련된 예외 메시지를 응답으로 보내주기 때문에, 사용자 입장에서는 뜬금없는 SQLException 과 관련된 에러 메시지를 응답으로 받게 될 수도 있다..고 생각한다.내부 구현 방식을 드러낸다이를 사용하는 클라이언트가 오염된다. 다음 릴리즈 에서 내부 구현을 변경하며 예외도 달라지 면, 이를 사용하던 기존 코드가 깨진다.저수준 예외를 처리하지 못한다면, 어떻게 해줘야 할까?예외가 발생하면 우리는 흔히들 아래와 같이..

SELECT DISTINCT 와 ORDER BY 가 함께 쓰이는 경우 정렬은 예상하지 못하게 일어난다
2022. 10. 28. 20:56
DB
이번주 코테가 여러개 있어.. SQL 공부를 다시 하고 있다. 그 김에 팀프로젝트에서 알게 되었던 내용에 대해 다시 정리해 보았다. 🔧 SELECT DISTINCT 와 ORDER BY 가 함께 쓰이는 경우 정렬은 예상하지 못하게 일어난다 팀프로젝트를 하는데, 팀원 분의 쿼리에서 예상했던 결과가 나오지 않고 있었다. 나 역시 해당 쿼리로 해결 할 수 있을 거라 생각했는데 원하는 결과가 나오지 않았고, 이를 해결하는 과정에서 SELECT DISTINCT 와 ORDER BY 가 함께 쓰는 경우, 주의해야 함을 알게 되었다. 🔧 당시 상황 study - book 은 다대일 관계 ( study -> book 으로 book 의 pk 를 참조하고 있다 ) 쿼리로 가져오려고 한 것 : 최근에 스터디가 생성된 책 목록을..
Controller api 가 생각처럼 출력되고 있지 않다
2022. 9. 11. 21:46
Spring
상황 프론트에서 현재 504 타임아웃 서버 에러가 뜬다는 연락을 받았다 (후에 이 상황의 원인은 vercel 의 서버와 백엔드 서버의 지역이 달라서 생기는 타임아웃 문제 였던 것으로 밝혀졌다) 따라서 프론트에서 문제가 생겼다고 말한 api 를 호출해 보는데 로그에서 이상한 것을 발견했다. 18:10:17.702 [http-nio-8080-exec-9][LoginUserId-1] INFO c.d.c.g.l.a.ControllerLoggingAspect - params : {controller=StudyApi, http_method=GET, method=getDetailInfo, params={}, log_time=Wed Sep 07 18:10:17 KST 2022, request_uri=/api/studi..

Java 에서 Stack 구현체로는 무엇을 사용해야할까?(feat_Java로 코딩테스트 문제 풀기)
2022. 9. 2. 12:19
Java
Stack LIFO -> 처음 넣었던 원소는, 마지막에 꺼낼 수 있다. "끝" 에 대한 삽입과, 제거만을 허용한다 Stack 은 Array, LinkedList 등등을 사용하여 구현할 수 있다. 사실 자료구조상, 양 쪽(out,in 하는 곳) 이 모두 뚫려 있더라도, 제공하는 작업이 pop, push 이기만 해도 stack 으로 제공가능하다. 따라서 Queue 도 스택으로 사용이 가능하다. Java 에서 Stack 을 위해 어떤 구현체를 사용해야할까? 그렇다면 Java 에서 Stack 으로 사용할 자료구조에는 무엇이 있을까? 그냥 Stack 사용하면 안됨?? 흠.. 가장 먼저, "Stack" 클래스를 살펴보자! Java 의 Stack 에 대한 문서에는 이런 구절이 존재한다 A more complete a..

[git] squash and merge 로 인하여 dev 브랜치를 매 번 새로 파던 이슈
2022. 8. 30. 11:43
카테고리 없음
git 에 대해 잘 모른 채로 어깨너머로 팀원들의 현란한 깃 명령어들만을 구경해 왔다. 이번 프로젝트 때 squash merge 라는 것을 사용하였는데, 이로 인해 예상하지 못했던 상황이 벌어졌었어서 이에 대해 정리 해 본다. 상황 : 우리 프로젝트에서의 브랜치 전략과 merge 전략에 따른 문제점 파이널 프로젝트에서 새로운 브랜치 전략을 도입하며, squash merge 를 적극 활용하기로 했다. 좋은시도였으나 우리모두 다음엔 이렇게 하지 말자..라는 결론이 지어진 방식이 되어버렸다 🥲 하지만 이는 조직마다 선택에 따라 달라질 문제고 이번에 우리가 선택한 방식에서 조금 변경하면 괜찮을수도? 있겠다는 결론을 내렸다. 이는 뒤에서 보자! 우리의 브랜치 전략은 main, develop, feat 브랜치..