package nested.test.ex1; import java.util.ArrayList; import java.util.List; public class Library { private List<Book> library = new ArrayList<>(); private int MaxBookCount; public Library(int maxBookCount) { this.MaxBookCount = maxBookCount; } public void addBook(String bookName, String author) { Book book = new Book(bookName, author); if (MaxBookCount == library.size()) { System.out.println("도서관 저장 공간이 부족합니다."); return; } library.add(book); } public void showBooks() { for (Book book : library) { System.out.println("도서 제목: " + book.bookName + ", 저자: " + book.author); } } static class Book { private String bookName; private String author; public Book(String bookName, String author) { this.bookName = bookName; this.author = author; } } } 코드를 이렇게 작성해도 될까요? 조건에 객체 배열을 사용하도록 하긴 했는데 실무에서도 이런 경우엔 배열을 더 많이 사용할까요?
실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
build.gradle에 plugin만 추가하니 오류나고 아래 내용이 추가되니 오류가 사라지고 정상 동작하였습니다. implementation "org.jetbrains.kotlin:kotlin-reflect" 정확한 원인은 모르겠는데 contextLoads할때 부터 error가 나서 kotlin으로 만든 Book을 Entity로 인식하지 못하는 것 같았습니다. 이렇게 해결하는게 맞는건지 궁금합니다. windows10 / java11 / intellij 사용중입니다! [오류원문] Failed to resolve parameter [com.group.libraryapp.service.book.BookService bookService] in constructor [public com.group.libraryapp.service.book.BookServiceTest(com.group.libraryapp.service.book.BookService,com.group.libraryapp.domain.book.BookRepository,com.group.libraryapp.domain.user.UserRepository,com.group.libraryapp.domain.user.loanhistory.UserLoanHistoryRepository)]: Failed to load ApplicationContext org.junit.jupiter.api.extension.ParameterResolutionException: Failed to resolve parameter [com.group.libraryapp.service.book.BookService bookService] in constructor [public com.group.libraryapp.service.book.BookServiceTest(com.group.libraryapp.service.book.BookService,com.group.libraryapp.domain.book.BookRepository,com.group.libraryapp.domain.user.UserRepository,com.group.libraryapp.domain.user.loanhistory.UserLoanHistoryRepository)]: Failed to load ApplicationContext at app//org.junit.jupiter.engine.execution.ExecutableInvoker.resolveParameter(ExecutableInvoker.java:239) at app//org.junit.jupiter.engine.execution.ExecutableInvoker.resolveParameters(ExecutableInvoker.java:183) at app//org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:74) at app//org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestClassConstructor(ClassBasedTestDescriptor.java:355) at app//org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateTestClass(ClassBasedTestDescriptor.java:302) at app//org.junit.jupiter.engine.descriptor.ClassTestDescriptor.instantiateTestClass(ClassTestDescriptor.java:79) at app//org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:280) at app//org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:272) at java.base@11.0.24/java.util.Optional.orElseGet(Optional.java:369) at app//org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:271) at app//org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:102) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:101) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:66) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) 이하 생략..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. users/dlwns 에 test3.mv .db 를 만들고 터미널에 입력을 하여 연결을 했습니다. spring: datasource: url: jdbc:h2:tcp://localhost/~/test3 username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: show_sql: true format_sql: true logging: level: org.hibernate.SQL: debug 그리고 Test를 진행했을 때, h2 database에 접근하면 table이 생성되지 않습니다. 어떤 점이 문제인지 알고 싶습니다. 감사합니다.
아래와 같이 perform 과정에서 validator -> serialize로 넘어가는 부분에서 json 이 eventDTO를 찾을 수 없다는 에러가 발생하여 json을 직렬화할 수 없어서 error 메시지가 반환되지 않아 test 실패가 나타나는 것 같습니다. 혹시 버전 차이로 인해 필요한 어노테이션이나 함수가 달라져 발생하는 문제일까요? 관련하여 검색해도 답안을 찾기 어려워서 질문 드립니다. 감사합니다. Inconvertible types; cannot cast 'org.example.springrestproject.Events.EventControllerTests' to 'org.springframework.test.util.JsonPathExpectationsHelper' No value at JSON path "$[0].objectName" java.lang.AssertionError: No value at JSON path "$[0].objectName" at org.springframework.test.util.JsonPathExpectationsHelper.evaluateJsonPath(JsonPathExpectationsHelper.java:302) at org.springframework.test.util.JsonPathExpectationsHelper.assertExistsAndReturn(JsonPathExpectationsHelper.java:326) at org.springframework.test.util.JsonPathExpectationsHelper.exists(JsonPathExpectationsHelper.java:190) at org.springframework.test.web.servlet.result.JsonPathResultMatchers.lambda$exists$3(JsonPathResultMatchers.java:123) at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:214) at org.example.springrestproject.Events.EventControllerTests.createEvent_Bad_Request_Wrong_Input(EventControllerTests.java:149) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) Caused by: java.lang.IllegalArgumentException: json can not be null or empty at com.jayway.jsonpath.internal.Utils.notEmpty(Utils.java:401) at com.jayway.jsonpath.JsonPath.read(JsonPath.java:390) at com.jayway.jsonpath.JsonPath.read(JsonPath.java:377) at org.springframework.test.util.JsonPathExpectationsHelper.evaluateJsonPath(JsonPathExpectationsHelper.java:299) ... 8 more
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. 자바 중급1을 모두 학습하고 다시 보면서 복습을 하고 있던 도중 이해가 가지 않는 부분이 있어 질문 드립니다. 섹션5 Class클래스강의 (13:26)에 나오는 ClassCreateMain 클래스에 대해 질문 드리려고 합니다. main부분에서 throws Exception을 해야 오류가 않나는 것을 확인했습니다. 예외파트 강의에서 main에서도 예외를 던져버리면 에러가 난다고 이해했었는데 main에서도 예외를 던졌는데 이 예외는 어떻게 리되는 건가요?
JPQL 모든 쿼리가 다음의 순서를 지키는 것인지 궁금합니다.(조회만인지?), 일단 다음의 순서를 전체조회 JPQL이라고 가정하겠습니다. flush -> flush로 인한 변경감지 update 쿼리문 적용 -> 이때동안 모은 쓰기지연 저장소 sql 쿼리 적용 1차로 DB 우선 조회 2차로 영속성 컨텍스트 서치해서 DB와 겹칠 경우 영속성 컨텍스트의 엔티티로 대체 (Q&A 찾아보다가 얻게된 결론입니다.) 1.의 제가 서술한 과정이 맞다면 이해가 안되는 것이 마지막 과정인 영속성 컨텍스트 서치 부분입니다. 이미 flush로 변경감지 등을 모두 적용했으니 영속성 컨텍스트를 다시 서치해서 얻을 이점이 있을까요? 단순 조회일 경우에 2차로 영속성 컨텍스트를 서치하는 것이 어떠한 이점도 없는 것 같아서요.
만약 제가 reverse 함수를 구현한다고 하면 tempValue 를 제네릭 E 로 구현해야하나요 ? 아니면 아래와 같이 구현해도 전혀 문제가 없나요 ? public void reverse() { if( elementData == null || size <=1 ){ return ; } for (int i = 0 ; i < (int)( size / 2 ) ; i++){ Object tempValue = elementData[i] ; elementData[i] = elementData[size-1-i] ; elementData[size-1-i] = tempValue ; } }ㅁ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 12분에 선생님이 클래스, 추상 클래스, 인터페이스는 프로그램 코드, 메모리 구조상 모두 똑같다. 모두 자바에서는 .class 로 다 루어진다. 인터페이스를 작성할 때도 .java 에 인터페이스를 정의한다 라고 하셨는데 여기서 .class 로 다뤄진다 와 .java 에 인터페이스를 정의한다가 무슨뜻인가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. 4:30 쯤에 dirtyChecking이 일어나게 하기 위해서, em.flush();를 꼭 해줘야하는 이유가 있을까요? 선생님 다른 강의에서는 find로 찾아온 객체를 setter를 통해 변경 후 따로 em.flush(); 를 하지 않았어도 transaction 끝나는 시점에 자동으로 update쿼리가 나갔던 것으로 기억하는데요. 혹시 junit을 이용한 테스트코드이어서 동작 방식이 다른걸까요? 감사합니다~
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] year를 바꿀 때 왜 month 와 day는 생성자에 입력했던 값을 유지하나요? new ImmutablaMyDate 객체를 만들었으면 멤버변수 초기화값인 0이 되어야 할것 같은데 public ImmutableMyDate changeYear(int year) { ImmutableMyDate immutableMyDate = new ImmutableMyDate(year,month,day ); return immutableMyDate; }
이제 회원관리 예제 들어가기 시작했는데 인터페이스나 Map등 자세히 모르는 단어들이 많이 나오는데 수강을 중단하고 자바 개념 및 자료구조 공부 후 다시 수강 하는 게 좋을까요 아니면 그대로 진행하면서 모르는 개념만 그때그때 공부하는 것이 좋을까요..? 답변 간절합니다 ㅜㅜ
8:26화면에 나오는 문자형태 예시 전체에 대한 질문입니다. s= "Hello, World!" ->큰따옴표를 사용하였는데 출력값은 전부 '' 작은따옴표로 나옵니다. 단순 오탈자인가요? join 내장타입 설명시 기준문자 앞뒤는 작은따옴표인가요 큰따옴표인가요? find와 index 문자 위치는 앞에서부터 0,1,2....로 나아가는거죠? 큰따옴표는 문자라는 것을 표기해주기 위함이므로 H부터 위치를 세면 되는건가요? 큰따옴표부터 세야하는건가요? 실제 시험은 종이에 문제가 나오고, 종이 답안지에 답을 작성하는건가요? 아니면 종이 문제지에 답을 적는건가요? 코딩문장을 보면 띄어쓰기가 좀 불분명해보여서 답을 생각하다보면 띄어쓰기를 빼먹는 경우가 있습니다. 예를들어 강사님 강의에서 Hello,World 인지 Hello, World 인지와 같이요. 답을 적을때 띄어쓰기를 확실히 표현해서 출력값 등 답안작성하는 것이 맞나요?
안녕하세요. 김영한 강사님의 자바 입문강의, 기본강의까지 들은 후 스프링 입문 강의를 듣게 된 학생입니다. 다름이 아니라 처음 프로젝트를 생성할때부터 이해가 어려워서 질문드립니다. controller라던지, resolver같은 처음 듣는 용어들이 나오고, 용어가 생소하니 매우 간단한 동작환경그림조차 이해가 어렵습니다. 혹시 이 강의를 듣기전에 미리 알아야하는 기초적인 배경지식이 있을까요? 자바입문과, 자바기본강의는 제공해주신 파일만으로 공부해도 입문자인 저도 충분히 이해가 가능하게 기본부터 설명이 되어있었는데, 스프링 입문강의는 처음보는 개념이나 용어들이 부가적인 설명없이 전개되어 강의파일만으로는 이해가 불가능해서 질문드립니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 아니오 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 여기에 질문 내용을 남겨주세요. 관련내용의 질문들이 있으나, 제 케이스는 다른 것 같아서 질문 올립니다. 아래와 같이 작성하였으나, 적용이 되지 않습니다. jpa: hibernate: ddl-auto: create properties: hibernate: default_batch_fetch_size: 100 위치를 옮겨봤는데요, properties.default_batch_fetch_size 위치에서 적용이 되는 것으로 보입니다. 다만, 실제 실행해보면 적용되지 않습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 18,20줄에 nextInt()를 두 번 사용하면 버퍼에 \n\n줄바꿈 문자 2개가 남게되고, 이후에 21줄에서 nextLine()을 통해 입력 버퍼를 비운다고 했는데, nextLine()은 \n 하나만 처리하는거 아닌가요? 그렇게 되면 버퍼에 \n이 하나 남게되고, 순회(int i = 1)할 때, 다음 16줄의 nextLine()에서 \n을 처리하여 빈 문자열(" ")을 반환하지 않나요? 그런데 이 코드를 돌려보면 nextInt()를 두 번 호출하고, nextLine()을 호출하면 \n\n 줄바꿈 문자 2개를 연속으로 버퍼에서 처리되었는데 그 이유가 무엇인가요?
준영속상태에 대한 설명에서 영속성 컨텍스트에서 이전에 존재했지만 지금은 detach된 엔티티가 아니라 영속성 컨텍스트에서 이전에 존재 + 적어도 한번은 flush()되어 DB에 엔티티가 존재하는 경우 아닌가요? 즉 이전에 컨텍스트에서 존재 + flush로 인한 DB에 반영되었던 엔티티