안녕하세요. 강의 듣다 궁금한 것이 있어 질문 드립니다. 입문자라 기본적인 것도 많이 모릅니다. ㅠ public class ApplicationContextExtendsFindTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); @Test @DisplayName("부모 타입으로 조회시 자식이 둘 이상 있으면, 중복 오류가 발생한다") void findBeanByParentTypeDuplicate() { assertThrows(NoUniqueBeanDefinitionException.class, ()->ac.getBean(DiscountPolicy.class)); } ...... @Configuration static class TestConfig { @Bean public DiscountPolicy rateDiscountPolicy() { return new RateDiscountPolicy(); } @Bean public DiscountPolicy fixDiscountPolicy() { return new FixDiscountPolicy(); } } } 이 테스트 클래스에서는 테스트용(?) 클래스?? 만들때 @Configuration 을 사용했는데 아래 테스트 클래스에서도 테스트용 클래스를 만드는데 @Configuration을 사용하지 않아서 궁금합니다. class StatefulServiceTest { @Test void statefulServiceSingleton() { ApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); StatefulService statefulService1 = ac.getBean(StatefulService.class); StatefulService statefulService2 = ac.getBean(StatefulService.class); //ThreadA: A사용자 10000원 주문 int userAprice = statefulService1.order("userA", 10000); //ThreadB: B사용자 20000원 주문 int userBprice = statefulService2.order("userB", 20000); //ThreadA: 사용자A 주문 금액 조회 // int price = statefulService1.getPrice(); System.out.println("price = " + userAprice); // Assertions.assertThat(statefulService1.getPrice()).isEqualTo(20000); } static class TestConfig { @Bean public StatefulService statefulService() { return new StatefulService(); } } } 좋은강의 감사합니다. 열심히 배우고 있습니다!!
. 매번 친절한 답변 감사드립니다. 1. 코드를 실행하면 로딩이 느리게 되고, 화면이 뜨면 상자가 돌지 않고 그냥 네모 상태로 색이 바뀝니다.. 코드가 어디가 틀린 걸까요? ㅠㅠ keyframe loading 쪽 문제인 거 같기도 하네요.. 2. 다음 강의 분에서도 코드를 그대로 친 거 같은데도 오류가 생기고(보더 박스가 아주 작게 나올 뿐더러 만들어지지가 않네요..) 로딩이 걸리면서 뜨네요 .ㅠ 어디가 문제인지 알려주시면 감사하겠습니다.
// 질문 아님.. 문제가 있다면 덧글 남겨주세요~ Ⅰ. 개요 Ⅱ. 원인 Ⅲ. 결론 ---------------------------------------------------------- 안녕하세요. 강의 잘 듣고 있습니다. 이번 강의를 보는 중에 처음에는 너무 당연하게 생각했던 것과 다른 수강생분들의 질문을 보다보니, 저도 너무 헷갈린 나머지, 글을 남기고 싶어졌습니다. Ⅰ. 개요) !false는 true 입니다. 반대로 !true == false가 되겠죠? line_flag = false로 초기화했다면, !line_flag는 true 일 것입니다. 그렇다면 if (!line_flag) 는 if (true) 를 의미합니다***. 여기서! 오해의 원인) if (!line_flag)는 line_flag가 !false일 경우에만 if문을 실행 하겠다는 의미로 기대하게 됩니다. (아직 모호하면 아랫 글 참고 ↓↓↓) ---------------------------------------------------------- Ⅱ. 문제 원인) 이제 예시를 보겠습니다. 예상하기로, if(!line_flag)는 line_flag가 true일 경우에 if문을 실행하겠다는 의미로, 바로 위에 line_flag = false라서 실행되지 않을 것이라 기대하게 됩니다. (위 코드는 printf함수가 출력이 됩니다) 마치! 위처럼 num이 1이라면 if문은 실행되지 않았을 겁니다. 한편 "num = 0;" 으로 대입을 했다면, num != 1에 만족하니 if문이 실행되겠죠. line_flag도 똑같이 생각한 것입니다. 다음 사진과 같이 생각한 것이죠. 이 때는 line_flag가 false로 초기화되어 있으니, if문도 실행되지 않겠죠. if문에 들어가기 전에 line_flag = true;로 설정값을 바꿔준다면 if문이 정상적으로 실행될 것입니다. line_flag = true; !line_flag; 1번과 2번은 엄연히 다른 개념입니다. 1번은 bool타입의 변수 line_flag에 true값을 넣어준 것이고, 2번은 true값을 가지고 있는 line_flag를 일시적으로, 그 때에만! 반대값인 false로 바꿔주는 것입니다. ---------------------------------------------------------- Ⅲ. 결론) 돌고돌아 간단합니다.. 개요에서 이미 답이 나왔죠? line_flag가 false인 상태입니다. !line_flag는 true를 의미합니다. 즉, if(!line_flag) == if(true) 인 것입니다. 이미 쓰여있던 질문과 답변을 보았는데, 분위기가 마치 엄청 배고픈데, 햄버거 한 개밖에 못 먹은 분위기였어요.. 그래서 남겨보아요..
안녕하십니까!? 늘 좋은 강의 잘 듣고 있습니다. 문제에서 보면, 1. 도시의 갯수가 1~100까지로 되어 있는데 코드상에서도, vector<pair<int, int> > map[100] 이 되어야 하는 것이지요? 2. 도로비용이 음수일 수 도 있다고 했는데, 이 경우도 고려가 되는건가요? 감사합니다.
5분 45초 부분에서 ReclaimPolicy를 따로 설정하지 않은 경우, 기본 정책이 Retain이라고 하셨는데, 쿠버네티스 공식문서에는 기본값이 Delete라고 되어있습니다. 혹시 이 부분이 강의를 찍으실 시점에서는 Retain이 기본정책이었나요? https://kubernetes.io/ko/docs/concepts/storage/storage-classes/
안녕하세요 팀장님 강의 내용을 토대로 다양하게 혼자 연습해보고 있는데, Dto로 조회하는 과정에서 오류가 계속 발생했는데 어떤식으로 해결해야될지 몰라서 질문 남깁니다.! Member - Team 관계에서 Team을 Dto로 조회하는 과정입니다. 우선 Dto말고 Tuple로 조회했을때는 정상 동작했습니다. 1. Tuple 조회 ( 정상 동작) @BeforeEach public void setup () { queryFactory = new JPAQueryFactory (em); Team teamA = new Team ( "teamA" ); Team teamB = new Team ( "teamB" ); em. persist (teamA); em. persist (teamB); Member member1 = new Member ( "member4" , 10 , teamA); Member member2 = new Member ( "member4" , 20 , teamA); Member member3 = new Member ( "member4" , 30 , teamB); Member member4 = new Member ( "member4" , 40 , teamB); Member member5 = new Member ( "member5" , 40 , teamB); em. persist (member1); em. persist (member2); em. persist (member3); em. persist (member4); em. persist (member5); em. flush (); em. clear (); } List < Team > fetch = queryFactory . selectFrom ( team ) . join ( team .members, member ). fetchJoin () . fetch (); System . out . println ( "fetch.get(0).getMembers() = " + fetch. get ( 0 ). getMembers ()); 정상동작 2. Dto 조회 @Data public class TeamDto { private String name; private List < MemberDto > members = new ArrayList <> (); } @Data public class MemberDto { private String username; } List < TeamDto > result = queryFactory . select ( Projections . fields ( TeamDto . class , team .name. as ( "name" ), Projections . fields ( MemberDto . class , member .username ). as ( "members" ) ) ) . from ( team ) . join ( team .members, member ). fetchJoin () . fetch (); System . out . println ( "dto = " + result. get ( 0 ). getMembers ()); 실행결과 not compatible with java.util.List이 발생했습니다. ㅠㅠ 이것저것 바꿔가면서 다양하게 시도해봤는데도 계속 오류가 발생했습니다.. 어떤 식으로 변경해야 될까요? 추가로 시도하면서 느낀게 한 개 이상의 Dto가 있을 경우 코드의 가독성이 너무 떨어지게 되더라고요. 혹시 팀장님께서는 여러개의 Dto를 조회할 때 따로 사용하는 방식이 있으신가요?
tuple은 불변형이기 때문에 변화가 있을 때마다 아예 새로운 id값을 생성해서 변수를 할당하고 list는 가변형이기 때문에 그냥 그 id값에 값을 추가하는 식이 된다고 이해했습니다. 그런데 m = m * 2와 m *= 2의 경우 전자는 id값에 변화가 생기고, 후자는 id값에 변화가 생기지 않는데 이는 두 연산자가 하는 일이 본질적으로 동일하지만 내부적으로 처리하는 과정이 다르기 때문인가요?