학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 배열 - 문제와 풀이3을 switch-case문으로 하던 와중에 종료 버튼이 break문으로 종료가 안되어서 검색해서 와일문을 false로 바꾸면 종료된다는 말을 듣고 boolean proudctFile = true; while(proudctFile){ /* 나머지 내용 생략 */ case 3 : System.out.println("프로그램을 종료합니다."); proudctFile = false; } 이런식으로 만들었습니다. 나중에 다른 강의를 보니 while(true){ /* 나머지 내용 생략 */ case 3: System.out.println("시스템을 종료합니다."); return; } return문을 써서 바로 종료하던데 어떤게 더 좋은 프로그램인지 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 강의에서 다운캐스팅에 관해 이야기를 해주셨습니다. 부모 클래스인 Parent 타입의 변수에 Parent 인스턴스를 생성해서 참조값을 해당 참조변수에 넣고 Child 타입의 참조변수에 다운캐스팅을 하고 나서 해당 child 메서드를 호출하려고 했을 떄 오류가 발생했습니다. 여기서 영한님이 말씀해주신대로 생각해보면 Parent 인스턴스를 생성했을 때, 해당 메모리 안에 Parent 타입의 클래스 정보만을 저장했을테고 자식에 대한 정보가 해당 메모리 주소값 안에 없다. 따라서 다운캐스팅을 해도 자식클래스 메서드를 호출하지 못한다 -> 라고 생각하면 되는 건가요? 그렇지만 다시 생각해보면 메서드는 메서드 영역 내에서 가져다가 호출하는 방식인데, 그렇게 된다면 자식 클래스의 메서드 또한 메서드 영역내에서 불러오면 되니까 호출이 가능한 게 아닐까요..? 궁금하네요
docker exec -it kafka kafka-topics.sh --bootstrap-server localhost:9092 --create --topic testTopic 위와 같이 터미널에 토픽생성하는 명령어를 작성하면 아무것도 |움직이지 않고 터미널이 멈춥니다. 도커는 정상적으로 실행하고 kafka,zookeeper도 정상적으로 실행되어있습니다. 도커를 삭제하고 다시 다운로드해서 docker compose사용해서 kafka,zookeeper이미지 다시 작동시켜도 위와같이 토픽생성 명령어 입력하고 작동시 아무것도 안하고 멈춥니다.. (p.s 카프카 컨테이너 cli들어가서도 토픽 생성 명령어 작동시켜도 작동안합니다.) 혹시 해당 문제 해결법 아실까요..?
예제를 실행시켜보면 10분 8초경처럼 엔터를 누르면 줄바꿈이 되는게 아니라 커서가 맨 처음으로 돌아가는데 이거 왜 이러는 건가요? 구글링 해보니까 윈도우에서는 엔터키 입력이 /r/n(캐리지 리턴 및 줄바꿈)이라고 하는데 그러면 /r/n이 실행되어서 줄바꿈이되고 커서가 줄바꿈된 줄의 맨 처음으로 돌아가야 하는데 왜 /r만 실행이 되는 건가요? 밑의 질문중에 교수님이 답변해주신거에 스택오버플로우 링크가 있던데 그건 제가 영어를 못해서 이해를 못하겠더라구요
안녕하세요 코드를 보시면 void static_count() { static int ct = 0; printf("static count = %d\n", ct); ct++; } 정적변수가 만들어져있는데요, (23:23 부분) 이후 main 함수에서 static_count(); static_count(); 를 실행하는데요, 프로그램에 박힌 정적변수 ct는 처음에 0이였고 static_count()에 의해 0이 출력되고 값이 1 증가합니다. 이후 또 static_count()가 실행돼도 1이라는 값은 보존되어 1로 출력됩니다. 그런데 여기서 두 번째 static_count()가 실행될때 마찬가지로 void static_count() { static int ct = 0; printf("static count = %d\n", ct); ct++; } 를 실행시키는데 이미 정적변수 int ct가 메모리에 살아남아 있을 때 해당 코드에서 static int ct = 0 코드는 무시가 되는 원리인가요? 감사합니다.
안녕하세요. 제가 처음에 프로젝트 이름을 "8.3 Input Output Redirection"으로 작성하고 강의 3:00에서처럼 "8.3 Input Output Redirection.exe"를 입력하여 실행하였더니 아래와 같은 오류가 나왔습니다. '8.3' is not recognized as an internal or external command, operable program or batch file. 그런데 프로젝트 이름을 강사님처럼 "Lecture3"로 변경하니 강의처럼 정상 작동하더라구요. 이름에 따라서 다르게 작동하는 이유가 무엇인가요? 만약 다르게 작동한다면 프로젝트 이름을 지을 때부터 신경써야 하나요? 감사합니다.
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 페이징, 정렬에 대해서 질문이 있습니다. 1. 이렇게 했을 때 페이지 처리와 정렬이 되었습니다. 2. OrderSpecifier로 변환 3. Querydsl4RepositorySupport 질문 1 : 1~3의 차이점이 궁금합니다. 질문 2 : 상황에 따라서 다르겠지만 1~3중 실무에서는 주로 어떤 것을 사용하나요? 질문 3 : 1번과 3번의 차이는 1번으로 했을 때 루트 엔티티 범 위를 넘어가는 동적 정렬 기능이 필요할 때 orderBy에는 한계점이 있어서 Querydsl4RepositorySupport을 선택해서 사용하는 것인가요? 질문 4 : Querydsl4RepositorySupport에서 fetchCount들이 있는데 곧 지원이 끊기는데 여기서는 어떻게 변화시켜야할지 잘 모르겠습니다... 질문 5 이렇게 사용했을 때 정렬을 사용하려고 하면 .orderBy를 사용하면 되는건가요? 아니면 다른 방법이 있나요?
7분 08초 정도에 회원가입 테스트 코드를 실행하는 부분에서요,,! MemberServiceTest 클래스에 @Transactional을 걸어서 회원가입() 메소드를 하나의 트랜잭션으로 관리하는 것으로 이해했습니다... memberService.join(member); 으로 persistence context에 member를 영속화 시킨 상태인데, 그 다음 코드인 memberRepository.findOne(savedId);에서, 왜 select 문이 나가는거죠? 하나의 트랜잭션이고, member가 영속 상태라서 1차 캐시에서 관리되면, context에서 가져와야 하는게 아닌가요?... 트랜잭션을 롤백한다는 것의 의미가 DB의 트랜잭션을 롤백한다는 것 뿐만 아닌 영속성 컨텍스트도 롤백하는 것을 의미하나요?.. 만약 그렇다면, 저는 @Transactional을 메소드 단위로 걸었는데, 왜 회원가입() 메소드 중간에 롤백이 되는 건가요?..ㅠ 아예 애초부터 스프링에서의 트랜잭션 롤백은 영속성 컨텍스트에 반영조차 하지 않는 거라고 봐야 하나요?.. 너무 헷갈립니다 ㅠ.ㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx ) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG ) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. JUnit5를 사용하여 테스트 코드를 작성 중인데, JUnit4와는 다르게 @Test(expected = ) 사용이 불가하더라고요. 다음과 같이 테스트 코드를 작성하면 될까요? @Test public void 중복_회원_예약() throws Exception { //given Member member1 = new Member(); member1.setName("kim"); Member member2 = new Member(); member2.setName("kim"); //when memberService.join(member1); assertThrows(IllegalStateException.class, () -> { memberService.join(member2); }); }
게임 서버 프로그래머 지망생에게 이 강의를 추천 하신다기에 수강하게 되었는데요. 아직 강의 초반이지만 winapi에서 쓰이는 구조체나 함수들이 계속 등장하는 것 같은데 해당 지식들이 실제로 게임 업계 실무에서 사용되는 지식들인가요? 그렇다면 강의에 나오는 내용을 꼼꼼히 머릿속에 넣어야 하겠지만 지엽적인 개념보다 큰 틀(os와 관련된 지식들)이 중요한 것이라면 직접적인 winapi 사용법 보다는 os 관련된 지식을 중점으로 공부하려고 하는데 어떤 방법을 추천하시나요?
안녕하세요! 널개님 강의 듣고있는 수강생입니다. 강의 내에 나와있는 예제문제 외에도 실습을 통해 실력을 향상시키고 싶습니다. 혹시 실습을 할 수 있는 사이트를 추천해주실 수 있을까요? 이론강의는 널개님 강의를 통해 충족이 되지만 실습은 아직도 부족하네요ㅠㅠ 실습을 통해서도 배우는게 많다 생각하여 문의드립니다. 항상 시간이 아깝지않은 강의해주셔서 감사합니다!
안녕하세요 강사님! 우선 양질의 강의 잘 듣고 있다는 말씀 드리고 싶습니다. Spring Security 에서 AuthenticationProvider 를 찾아서 인증을 위임하는 역할을 수행하는 ProviderManger 도 옵저버 패턴을 사용하고있다고 볼 수 있을까요? ProviderManager (AuthenticationManager) 에서 AuthenticationProvider 들을 가져온후 이들을 순회하며 인증위임을 시키는 코드입니다 단순히 supports() 를 통해 인증을 위임시킬 AuthenticationProvider 들을 골라내는 것뿐, 이것도 옵저버 패턴이 적용된 예인지 알고 싶습니다.
안녕하세요 현재 프로젝트 세팅 및 테스트를 진행 중입니다. spring boot가 3이상으로 제한된 상황속에서 진행중이며, 강의 내용을 따라하고 있습니다! build.gradle은 https://docs.google.com/document/d/1j0jcJ9EoXMGzwAA2H0b9TOvRtpwlxI5Dtn3sRtuXQas/edit#heading=h.vfy9wirpglmx 를 복/붙 하였습니다. plugins { id 'java' id 'org.springframework.boot' version '3.2.0' id 'io.spring.dependency-management' version '1.1.4' } group = 'study' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' //test 롬복 사용 testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok' //Querydsl 추가 implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" } tasks.named('test') { useJUnitPlatform() } clean { delete file('src/main/generated') } 질문은 크게 3가지입니다. build/other/compileQuerydsl은 표기가 안되는데 다른 답변을 보니 springboot3으로 올라가며 compileQuerydsl은 표기가 안된다고 하신 것 같은데 맞을까요? 정확한 Q파일의 생성 위치가 궁굼합니다.! 강의상에서는 src/main에 둬도 괜찮지만, 버전관리 시스템(git)에는 추가 되지 않는게 좋다고 하셨던 것 같은데 맞나요? build에만 Q파일이 생성되는게 좋나요? 올려주신 google doc의 build.gradle로 진행하면, Q파일이 build/annotationProcessor아래 생성됩다... 뭐가 문제일까요? docs에 올려주신 build.gradle에서 build clean을 진행할 때 'src/main/generated'의 폴더를 삭제하는 이유가 무엇일까요? (현재 저는 Q파일을 build/ 아래 관리하고있는데, src/main/generate 아래 Q파일을 생성하시는 분들에만 해당 되는 내용인가요?) 답변해주시면 감사하겠습니다!
@JoinColumn(name = "MEMBER_ID) List<AddressEntity> addressHistory = .. 다대일이 아닌 일대다로 매핑한 이유가 있을까요? 앞에서 다쪽에 @JoinColumn하는 것을 추천하셨는데 일쪽에 연관관계 주인을 잡은 이유가 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 제 프로젝트 압축파일입니다. https://drive.google.com/file/d/1CsFmsNczcupxGIQTMM_-uA7EQFzu3KRq/view?usp=sharing JpaMain에서 Movie movie = new Movie(); movie.setDirector("aaa"); movie.setActor("asdf"); movie.setName("바람과 함께 사라지다"); movie.setPrice(10000); em.persist(movie); em.flush(); em.clear(); 에 의해 movie가 insert되어야하는데 실제로 데이터베이스의 MOVIE테이블을 조회해보면 아무것도 없습니다. 그리고 아래와 같은 에러로그가 뜨는데 어떻게 해야할지 모르겠어서 질문드립니다! https://drive.google.com/file/d/1YCpr2ZBFSC84lw3wvn5wks22DVx1GHAM/view?usp=sharing
안녕하세요 반갑습니다. 강의 22분 09초 경의 설명을 보고 부호 없는 정수의 언더 플로우가 헷갈려서 좀 생각을 해봤습니다. unsigned int k = 0; k = k-1; printf("k = %u\n", k); 을 하면 k의 비트가 00000000000000000000000000000000였는데 리터럴 1을 빼면 ALU내부에선 -1을 더하게 되는 것과 같고 -1은 11111111111111111111111111111111비트여서 둘의 합연산 결과가 11111111111111111111111111111111이 되고 이걸 %u로 출력해주면 unsigned int의 최대값인 4294967295가 나오는 건가요? 질문 1) 10000비트에서 1을 뺀다는 설명 때문에 약간 헷갈리긴 하는데 직관적으로 이해를 돕기 위해 그렇게 설명해주신 거라고 보면 될까요? 질문 2) 그리고 추가적으로 C언어가 리터럴 상수를 해석하는 과정이 참 흥미로운데 이건 강의 후반부에 다뤄주시나요? 꽤나 궁금하네요. 질문 3) 질문 1) 2) 3)에 각각 대답해주시면 감사 하겠습니다.
void print_binary(unsigned long n) { int remainder = n % 2; if (n >= 2) printf_binary(n / 2); printf("%d", remainder); return; } 맨 마지막에 리턴을 해주는데 제가 볼 때는 할 필요가 없어 보이는데 해주는 이유가 뭔가요?
질문 1) void print_binary(unsigned long n) { if (n > 0) { print_binary((n / 2)); printf("%d", n % 2); } } 이게 제가 작성한 코드입니다. 다름이 아니라 n이 0이 아니면 통과해서 recursion으로 함수 args에 5가 들어가고 그 다음엔 2.5가 들어가고 그 다음엔 1.0이 들어가고 그 다음엔 0.5값이니까 0이 들어가기에 튕깁니다. 그리고 다시 recursion 된 함수에서 돌아오는 과정을 거쳐야하는데 처음엔 5%2 이기에 1 이 출력 그 다음엔 2.5 %2 이기에 0이 출력 그 다음엔 1 % 2 이기에 1이 출력 그 다음엔 0% 2 이기에 0이 출력 그리고 끝난다. 라고 생각이 드는데요. 혹시 잘못 이해하고 있는게 있을까요? ****** 질문 2 ) 반면 강습자로부터 작성된 코드는 아래와 같습니다. void print_binary(unsigned long n) { int remainder = n % 2; if (n >= 2) print_binary(n / 2); printf("%d", remainder); return; } 이는 처음 remainder에 10 %2 = 0을 넣고 if 문에 의해 n이 2보다 크거나 같기에 통과 함수에 5를 args로 던지고 5 % 2 = 1 을 넣고 if문 통과 후 2.5를 던짐 2 % 2 = 0 을 넣고 1을 args로 던짐 1 % 2 = 1 이다. if문을 통과하지 못함 그 다음부터의 과정은 recursion을 하느라 작동되지 못한 라인부터 작동되는 것인가요? 그리고 그럴떄 거꾸로 작동되는 이유가 마지막 함수 실행의 값부터 실행되기의 그런건가요?