강사님 안녕하세요! 16분 50초경에 출력이 2번된다 말씀하시면서 diaryList 의길이가 0일때는 수행할 필요가 없다고 말씀하시면서 if(diaryList.length >= 1) 안에 넣어주셨는데.. 이부분이 잘 이해가 가지않습니다. 콘솔로 찍어보면 항상 length는 5가 나오구 if(diaryList.length >= 1) 를 넣어주지않아도 달력 다음버튼이나 이전 버튼을 누르면 똑같이 1번만 찍히는데 어째서 해주신걸까용..?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 기선님. 리팩토링 이전 코드인 `for문`을 사용한 코드는 반복문이 한번으로 보여지는데 리팩토링 이후 코드는 `filter`, `map`, `filter`, `collect` 네번의 반복문이 도는 것일까요?
안녕하십니까 강사님. 이렇게 유익한 강의를 만들어주셔서 감사합니다. 다름이 아니라 이 부분에 관한 다른 질문들을 보고 따라해봤지만 제 경우에는 해결되지 않아 도움을 부탁드립니다. [MemoryMemberRepositoryTest] ->findByName에서 오류가 발생합니다. package hello.hellospring1.repository; import java.util.List; import java.util.Optional; import hello.hellospring1.domain.Member; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.*; import java.net.PortUnreachableException; import static org.hamcrest.MatcherAssert.assertThat; public class MemoryMemberRepositoryTest { MemoryMemberRepository repository = new MemoryMemberRepository(); @AfterEach public void afterEach() { repository.clearStore(); } @Test public void findByName() { Member member1 = new Member(); member1.setName("spring1"); repository.save(member1); Member member2= new Member(); //위에거 복사 & shift+f6 누르면 member 이름 한번에 바꿀 수 있음 member2.setName("spring2"); //여기서 spring2는 자동으로 안바뀜 직접 바꾸기 repository.save(member2); Member result = repository.findByName("spring1").get(); Assertions.assertThat(result).isEqualTo(member1); } } [MemberRepository] package hello.hellospring1.repository; import hello.hellospring1.domain.Member; import java.util.ArrayList; import java.util.Map; import java.util.HashMap; import java.util.List; import java.util.Optional; public class MemoryMemberRepository implements MemberRepository { private static final Map<Long, Member> store = new HashMap<>(); private static long sequence = 0L; @Override public Member save(Member member) { member.setId(++sequence); store.put(member.getId(),member); return member; } @Override public Optional<Member> findById(Long id) { return Optional.ofNullable(store.get(id)); } @Override public Optional<Member> findByName(String name) { return store.values().stream() .filter(member -> member.getName().equals(name)) .findAny(); } @Override public List<Member> findAll() { return new ArrayList<>(store.values()); } public void clearStore(){ store.clear(); } @Override public Optional<Member> findId(Long memberId) { return Optional.empty(); } } [에러]
public static class Helper { private static readonly ThreadLocal<int> Num = new ThreadLocal<int>(() => 0); public static int Plus(int n) { Num.Value += n; return Num.Value; } } public class Program { public static void Main() { var action = () => { Console.WriteLine(Helper.Plus(1)); }; Parallel.Invoke(action, action); Parallel.Invoke(action, action); Parallel.Invoke(action, action); Console.WriteLine(Helper.Plus(100)); /* 결과 * 1 * 1 * 2 * 2 * 3 * 3 * 104 */ } } ThreadLocal<SendBuffer> 타입은 스레드가 해당 값을 참조하려 할 때 스레드의 스택 영역에 할당해주잖아요. 이 것은 마치 냉장고에서 재료를 꺼내러 갔더니 요리사들에게 재료의 사본을 꺼내 주는 것과 같은 거네요? 그렇다는 것은 클라이언트 A와 B는 { 1, 1, 0, 0 }의 ArraySegment 동시에 가져가게 되는 꼴인데, A와 B가 서로 2 바이트 만큼 SendBuffer에 덧붙인다고 했을 때 A가 Open & Close해서 작성한 SendBuffer {1, 1, 1 , 1 }과 B가 Open & Close해서 작성한 SendBuffer {1, 1, 1 , 0 }이 서로 충돌하는 상황이 될 것 같은데요. 1) 제가 이해한 것이 맞는지 궁금하구 2) 충돌하는 상황이라면 문제가 되는지 궁금합니다. 항상 감사합니다.
에러가 난건 아니지만 저는 onToggleLike 함수부분에서 강의를 잠시 멈춰두고 작성해보았습니다. 이런 식으로 작성해봤는데요. 잘 작동하는것같긴한데.. 강사님 처럼 useCallback() 을 사용하였을때와 비교했을때 불리한 점이 있을까요? 코드를 짜고 강의를 틀어보니 좀 달라서 질문들비니다
10분쯤 강의 듣다가 잘 모르겠어서 질문합니다. 위 사진에 담긴 내용을 보면 처음에 함수로 'callbackFunc'라는 이름의 함수를 정의하고 시작하셨잖아요?? 그리고 나서 아래에 sayHello라는 함수를 정의할 때 인자로 callback까지만 쓰셨구요. 1. sayHello안의 인자로 들어간 callback은 callbackFunc이라는 함수와는 아예 다른 새로운 매개변수 함수일 뿐인가요? 2. 함수의 인자로는 함수만 들어갈 수 있는 건 아니고, 'x'와 같은 값?도 들어갈 수 있죠?? 그럼 함수는 인자가 함수인지 값인지를 어떻게 알고 처리하나요?
회원가입을 하면 token은 db로 들어옵니다. 강사님이 하신것처럼 콘솔에있는 토큰값을 복사해서 테스트를 해보았는데요. 제대로 반영이 된것 같은데 디비에는 email_verified, joined_at이 update가 안됩니다. 추가로 더 수행해야할 것들을 못찾겠는데 원인이 뭔지 알수있을까요??
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 영한님 강의 잘 듣고 있습니다! Order 엔티티와 OrderItem 엔티티를 양방향 매핑 했을 때, 강의에서 보여주신 것과 같이 엔티티 안에 비즈니스 로직을 작성할 수 있었습니다. //== 조회 로직 ==// /** * 전체 주문 가격 조회 */ public int getTotalPrice() { int totalPrice = 0; for (OrderItem orderItem : orderItems) { totalPrice += orderItem.getTotalPrice(); } return totalPrice; } 그런데 OrderItem에서 Order로 다대일 단방향 매핑만 했을 때는 service에서 // 주문의 총 가격 조회 List<OrderItem> orderItemList = orderItemRepository.findByOrderId(orderId); int totalPrice = 0; for (OrderItem orderItem : orderItemList) { totalPrice += orderItem.getTotalPrice(); } 이런식으로 작성을 해야할 것 같은데 맞을까요? 그리고 이런 상황에서 선택을 하신다면 단방향 매핑을 양방향 매핑으로 바꾸시는지 아니면 다른 방법을 사용하시는지 궁금합니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. #include <stdio.h> int fibonacci(int number); int main() { for (int count = 1; count < 13; ++count) printf("%d ", fibonacci(count)); return 0; } int fibonacci(int number) { if (number != 1 && 2) return fibonacci(number - 1) + fibonacci(number - 2); else return 1; } if (number > 2) 일땐 되는데 왜 if (number != 1 && 2) 일땐 정상실행 안될까요..,?