inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

부끄러운 질문 하나 하겠습니다...

미해결

김영한의 실전 자바 - 중급 1편

복습방법을 잘 모르겠습니다.. 두가지 질문을 드려봐요. 1. 강의를 전부 다시보는건 너무 시간이 오래걸릴것같고 교재랑 코드만 보면 지식의 공백이 생길것같습니다... 2. 학습적으로 제대로 이해하고 응용할 수준까지 진행하고 싶어도 주입식교육을 받은 학생이라 그런지 다양한 문제를 해결하지 않으면 그 수준까지 도달을 못하는 편입니다. 그래서 다양한 예제를 풀어볼 수있는 방법이 없을까요 ? 목차마다 한 두문제가 있는데 반복해도 나중에 다른 문제를 만낫을때 해결하지 못해서 고민입니다.. 그런 문제를 아주 가끔씩 만나기도 하고요... 뭔가 몇달째 코딩을 하면서 이것때문에 남는 지식이 얼마 없는것 같아서 딜레마에 빠졌습니다.. 좋은 방법이 없을까요?ㅠㅠ

  • java
  • 객체지향
송민석 댓글 1 좋아요 3 조회수 503

Backpressure Example 코드 질문드립니다

미해결

Kevin의 알기 쉬운 Spring Reactive Web Applications: Reactor 1부

기존 예제 (sleep 시간이 5L인 경우)에선 Exception이 발생하는 것을 확인했습니다. 하지만 sleep 시간을 더 늘리니까 Erorr가 발생하지않았습니다. 제 예상대로라면 버퍼가 더 빨리 차기 때문에 에러가 발생해야하는데, 동작이 이해가 되지 않습니다. public class BackpressureStrategyErrorExample { public static void main(String[] args) { Flux .interval(Duration.ofMillis(1L)) .onBackpressureError() .doOnNext(Logger::doOnNext) .publishOn(Schedulers.parallel()) .subscribe(data -> { // 왜 50L, 500L로 하면 에러가 발생하지 않을까? TimeUtils.sleep(500L); Logger.onNext(data); }, error -> Logger.onError(error)); TimeUtils.sleep(5000L); } }

  • java
  • spring
  • project-reactor
  • webflux
drew 댓글 2 좋아요 0 조회수 277

패키지 생성

미해결

김영한의 실전 자바 - 기본편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 여기에 질문 내용을 남겨주세요. 선생님께서 패키지를 생성하실 때 com.helloshop이라고 생성하시면 인텔리제이에서 자동으로 com이라는 패키지를 만들고 그 밑에 helloshop이라는 패키지를 만들어 주던데 저는 그냥 com.helloshop이라는 패키지 생성됩니다. 어떤 세팅을 바꿔야 하는지 알고 싶습니다!

  • java
  • 객체지향
송현수 댓글 2 좋아요 4 조회수 546

N + 1 쿼리 횟수

해결됨

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

안녕하세요 강의 너무 잘 듣고 있습니다. "간단한 주문 조회 V2: 엔티티를 DTO로 변환" 강의를 듣던 중 궁금한 점이 생겨 질문 드립니다. Order 엔티티를 SimpleOrderDto 로 변환하는 과정에서 아래 조건으로 인해 샘플 데이터 2개 기준 총 5(1 + 2 + 2)번의 쿼리가 날아간다고 이해했습니다. order -> member 지연 로딩 조회 N번 order -> delivery 지연 로딩 조회 N번 근데 저는 order -> delivery 쿼리 이후에 order 를 찾는 쿼리가 한번 더 날아가는 것처럼 보입니다. 총 7번의 쿼리가 발생하는 것 같은데 무엇 때문인지 설명해주실 수 있을까요? 코드와 콘솔 로그는 아래 첨부했습니다. 감사합니다. // Order 엔티티 @Id @GeneratedValue @Column(name = "order_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) private List<OrderItem> orderItems = new ArrayList<>(); @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "delivery_id") private Delivery delivery; private LocalDateTime orderDate; @Enumerated(EnumType.STRING) private OrderStatus status; // 주문상태 // Delivery 엔티티 @Id @GeneratedValue @Column(name = "delivery_id") private Long id; @JsonIgnore @OneToOne(mappedBy = "delivery", fetch = FetchType.LAZY) private Order order; @Embedded private Address address; @Enumerated(EnumType.STRING) private DeliveryStatus status; // READY, COMP // OrderSimpleApiController @GetMapping("/api/v2/simple-orders") public List<SimpleOrderDTO> ordersV2() { List<Order> orders = orderRepository.findAll(new OrderSearch()); return orders.stream() .map(SimpleOrderDTO::new) .toList(); } @Data static class SimpleOrderDTO { private Long orderId; private String name; private LocalDateTime orderDate; private OrderStatus orderStatus; private Address address; public SimpleOrderDTO(Order order) { this.orderId = order.getId(); this.name = order.getMember().getName(); // Lazy 초기화 this.orderDate = order.getOrderDate(); this.orderStatus = order.getStatus(); this.address = order.getDelivery().getAddress(); // Lazy 초기화 } } 2024-04-09T13:27:53.982+09:00 DEBUG 12424 --- [nio-8080-exec-2] org.hibernate.SQL : select o1_0.order_id, o1_0.delivery_id, o1_0.member_id, o1_0.order_date, o1_0.status from orders o1_0 join member m1_0 on m1_0.member_id=o1_0.member_id 2024-04-09T13:27:53.984+09:00 INFO 12424 --- [nio-8080-exec-2] p6spy : 1712636873984|0|statement|connection 7|url jdbc:h2:tcp://localhost/~/jpashop_v2|select o1_0.order_id,o1_0.delivery_id,o1_0.member_id,o1_0.order_date,o1_0.status from orders o1_0 join member m1_0 on m1_0.member_id=o1_0.member_id|select o1_0.order_id,o1_0.delivery_id,o1_0.member_id,o1_0.order_date,o1_0.status from orders o1_0 join member m1_0 on m1_0.member_id=o1_0.member_id 2024-04-09T13:27:54.005+09:00 DEBUG 12424 --- [nio-8080-exec-2] org.hibernate.SQL : select m1_0.member_id, m1_0.city, m1_0.street, m1_0.zipcode, m1_0.name from member m1_0 where m1_0.member_id=? 2024-04-09T13:27:54.007+09:00 INFO 12424 --- [nio-8080-exec-2] p6spy : 1712636874007|0|statement|connection 7|url jdbc:h2:tcp://localhost/~/jpashop_v2|select m1_0.member_id,m1_0.city,m1_0.street,m1_0.zipcode,m1_0.name from member m1_0 where m1_0.member_id=?|select m1_0.member_id,m1_0.city,m1_0.street,m1_0.zipcode,m1_0.name from member m1_0 where m1_0.member_id=1 2024-04-09T13:27:54.012+09:00 DEBUG 12424 --- [nio-8080-exec-2] org.hibernate.SQL : select d1_0.delivery_id, d1_0.city, d1_0.street, d1_0.zipcode, d1_0.status from delivery d1_0 where d1_0.delivery_id=? 2024-04-09T13:27:54.013+09:00 INFO 12424 --- [nio-8080-exec-2] p6spy : 1712636874013|0|statement|connection 7|url jdbc:h2:tcp://localhost/~/jpashop_v2|select d1_0.delivery_id,d1_0.city,d1_0.street,d1_0.zipcode,d1_0.status from delivery d1_0 where d1_0.delivery_id=?|select d1_0.delivery_id,d1_0.city,d1_0.street,d1_0.zipcode,d1_0.status from delivery d1_0 where d1_0.delivery_id=1 2024-04-09T13:27:54.016+09:00 DEBUG 12424 --- [nio-8080-exec-2] org.hibernate.SQL : select o1_0.order_id, o1_0.delivery_id, o1_0.member_id, o1_0.order_date, o1_0.status from orders o1_0 where o1_0.delivery_id=? 2024-04-09T13:27:54.016+09:00 INFO 12424 --- [nio-8080-exec-2] p6spy : 1712636874016|0|statement|connection 7|url jdbc:h2:tcp://localhost/~/jpashop_v2|select o1_0.order_id,o1_0.delivery_id,o1_0.member_id,o1_0.order_date,o1_0.status from orders o1_0 where o1_0.delivery_id=?|select o1_0.order_id,o1_0.delivery_id,o1_0.member_id,o1_0.order_date,o1_0.status from orders o1_0 where o1_0.delivery_id=1 2024-04-09T13:27:54.018+09:00 DEBUG 12424 --- [nio-8080-exec-2] org.hibernate.SQL : select m1_0.member_id, m1_0.city, m1_0.street, m1_0.zipcode, m1_0.name from member m1_0 where m1_0.member_id=? 2024-04-09T13:27:54.019+09:00 INFO 12424 --- [nio-8080-exec-2] p6spy : 1712636874019|0|statement|connection 7|url jdbc:h2:tcp://localhost/~/jpashop_v2|select m1_0.member_id,m1_0.city,m1_0.street,m1_0.zipcode,m1_0.name from member m1_0 where m1_0.member_id=?|select m1_0.member_id,m1_0.city,m1_0.street,m1_0.zipcode,m1_0.name from member m1_0 where m1_0.member_id=2 2024-04-09T13:27:54.020+09:00 DEBUG 12424 --- [nio-8080-exec-2] org.hibernate.SQL : select d1_0.delivery_id, d1_0.city, d1_0.street, d1_0.zipcode, d1_0.status from delivery d1_0 where d1_0.delivery_id=? 2024-04-09T13:27:54.020+09:00 INFO 12424 --- [nio-8080-exec-2] p6spy : 1712636874020|0|statement|connection 7|url jdbc:h2:tcp://localhost/~/jpashop_v2|select d1_0.delivery_id,d1_0.city,d1_0.street,d1_0.zipcode,d1_0.status from delivery d1_0 where d1_0.delivery_id=?|select d1_0.delivery_id,d1_0.city,d1_0.street,d1_0.zipcode,d1_0.status from delivery d1_0 where d1_0.delivery_id=2 2024-04-09T13:27:54.021+09:00 DEBUG 12424 --- [nio-8080-exec-2] org.hibernate.SQL : select o1_0.order_id, o1_0.delivery_id, o1_0.member_id, o1_0.order_date, o1_0.status from orders o1_0 where o1_0.delivery_id=? 2024-04-09T13:27:54.021+09:00 INFO 12424 --- [nio-8080-exec-2] p6spy : 1712636874021|0|statement|connection 7|url jdbc:h2:tcp://localhost/~/jpashop_v2|select o1_0.order_id,o1_0.delivery_id,o1_0.member_id,o1_0.order_date,o1_0.status from orders o1_0 where o1_0.delivery_id=?|select o1_0.order_id,o1_0.delivery_id,o1_0.member_id,o1_0.order_date,o1_0.status from orders o1_0 where o1_0.delivery_id=2

  • java
  • spring
  • spring-boot
  • jpa
이진혁 댓글 1 좋아요 2 조회수 223

MeberServiceIntegrationTest 회원가입 실행 오류 질문드립니다.

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요, 고생많으십니다. MeberServiceIntegrationTest 회원가입 실행 중 오류 발생으로 db에 저장되지 않아 질문드립니다. 아래와 같은 오류가 발생하며, WARNING: A Java agent has been loaded dynamically (/Users/jisung/.gradle/caches/modules-2/files-2.1/net.bytebuddy/byte-buddy-agent/1.14.12/be4984cb6fd1ef1d11f218a648889dfda44b8a15/byte-buddy-agent-1.14.12.jar) WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warning WARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more information WARNING: Dynamic loading of agents will be disallowed by default in a future release OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended 커뮤니티 질문 목록을 보며 gradle 자버 버젼도 확인하고 인텔리제이 버젼도 확인하여 자바 17로 변경 하였지만 그대로 오류가 발생하였습니다. 로컬 문제인가 생각이 들어 로컬 자바도 17로 변경 하였지만 똑같은 오류가 발생하여 질문 드립니다. 아래는 파일 공유 링크입니다. https://drive.google.com/drive/folders/1_Jhjekr157fqxOS2_QQ8wcULOdMo2qVQ?usp=sharing

  • java
  • spring
  • mvc
  • spring-boot
댓글 2 좋아요 0 조회수 618

spring Security 구현중 Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception 에러 발생

미해결

https://github.com/myungkeun02/spring_blog_3 공부하고있는 코드입니다. 제목 그대로 포스트맨으로 테스트중에 Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception 라는 에러가 발생합니다. 구글링해서 문제가 발생할만한 부분을 모두 찾아 보았지만 해결이 안되어 글 올려봅니다. 해결해주시는분께 아메리카노 쏩니다

  • spring
  • error
  • security
  • servlet
  • execption
  • java
명근 최 댓글 1 좋아요 0 조회수 554

protected 사용 이유

해결됨

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

안녕하세요! 해당 강의에서 기본 생성자를 추가해주실 때, public이 아니라 protected를 사용하셨는데, 그 이유가 무엇인가요? 혹시라도 다른 곳에서 기본생성자를 사용하지 못하도록 하게 하기 위함인가요? 제가 자바가 안익숙해서 그런지, 이러한 접근 제어자를 쓰는 것이나, static, final 키워드를 언제 쓰거나 안써야 하는지에 대한 감이 별로 없어서 구분을 잘 못하는데, 이러한 실력은 어떤 경험을 더 쌓아야 할지.. 아니면 어떤 키워드를 어떻게 공부해야 더이상 안 헷갈리고 확실하게 알 수 있을지 궁금합니다...! 항상 친절한 강의 감사드립니다.

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
iwbm312 댓글 2 좋아요 2 조회수 817

사실상 final 변수에 관하여 (값의 변경에 관한 질문입니다)

해결됨

김영한의 실전 자바 - 중급 1편

========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. 강의를 보던 중 궁금한 점이 생겼습니다. 사실상 final 변수는 (final 키워드를 넣은 것 처럼) 한 번 값이 설정되면 그 후에 값을 변경하지 못합니다. => 질문에 대한 핵심은 다음과 같습니다. 그렇다면 인스턴스를 생성하기 전에 지역 변수의 값을 변경하는 건 괜찮지 않을까? 근데 왜 안될까? => 그렇게 생각한 이유는 다음과 같습니다. 지역 변수를 캡쳐하는 시점은 (강의 속 LocalPrinter) 지역 클래스의 인스턴스 생성을 시도 한 후 입니다. (제 생각에,,) 코드는 위에서 아래로 읽기 때문에 Printer printer = new LocalPrinter(); 가 적혀져 있기 전에는 지역 변수의 값을 변경해도 되지 않을까? 하는 이유입니다.

  • java
  • 객체지향
30po_bil 댓글 1 좋아요 0 조회수 525

java scanner 오류

미해결

txt파일에는 아래와 같이 저장되어 있습니다. 점수가 가장 높은 학생의 이름을 출력해야하고 점수가 동일할 경우 모두 출력하는 프로그램입니다. 김일번 64 김이번 83 김삼번 26 김사번 36 김오번 78 김육번 54 김칠번 60 김팔번 85 김구번 45 김십번 85 프로그램을 실행했을 때 Exception in thread "main" java.util.InputMismatchException at java.base/java.util.Scanner.throwFor ( Scanner.java:94 7 ) at java.base /java.util.Scanner.nex t ( Scanner.java:160 2 ) at java.base/java.util.Scanner.nextInt ( Scanner.java:226 7 ) at java.base/java.util.Scanner.nextInt ( Scanner.java:222 1 ) 이렇게 오류가 발생합니다. 해결방법 아시는 분 가르쳐주세요!!ㅜㅜ package kh; import java.io.*; import java.util.Scanner; class Student { //int id; String name; int grade; Student(String name, int grade) { //this.id=id; this.name=name; this.grade=grade; } } class StudentTable{ Student[] st; StudentTable(int size) { st=new Student[size]; } void maxStudent() { int maxGrade=0; for(Student student : st) { if(student.grade > maxGrade) { maxGrade = student.grade; } } System.out.println("최고 점수를 가진 학생:"); for(Student student : st) { if(student.grade == maxGrade) { System.out.println(" " + student.name + " " + student.grade); } } } } public class homework05{ public static void main(String[] args) { StudentTable stable; try { FileInputStream fin=new FileInputStream("C:\\Users\\user\\Desktop\\student_score.txt"); Scanner scanner = new Scanner(fin); int size=scanner.nextInt(); stable=new StudentTable(size); for(int i=0; i<stable.st.length; i++) { //int id=scanner.nextInt(); String name=scanner.next(); int grade=scanner.nextInt(); stable.st[i]=new Student(name,grade); System.out.println(" "+name+" "+grade); } scanner.close(); stable.maxStudent(); } catch(FileNotFoundException e) { System.out.println("file not exist"); } } }

  • java
dkfma0799 댓글 1 좋아요 0 조회수 275

알고 있던 내용과 달라서 조금 혼동됩니다.

해결됨

김영한의 실전 자바 - 기본편

안녕하세요 영한님. 자바를 복습하고 있는 학생입니다. 이번 파트 정말 이해가 잘 되게 설명해주셔서 내용을 이해하는데는 어려움이 없었는데 기존에 알고 있던 지식때문인지 혼동되는 부분이 있어 질문드립니다. 기존에 알고 있는 지식은 자식 인스턴스 생성시 '부모의 필드 값과 가상 메서드 테이블 등의 메타 정보를 포함하는 하나의 인스턴스 생성' 이었습니다. 그런데 이번 강의 내용에선 '외부에서 볼때는 하나의 인스턴스를 생성하는 것 같지만 내부에서는 부모와 자식 모두 생성되고 공간도 구분' 이라고 하셨습니다. 그렇다면 이 문장을 ' 부모부터 자식 클래스까지의 모든 인스턴스를 생성 ' 이라고 봐야하나요? 아니면 '부모부터 자식까지의 모든 메타 정보를 포함하는 하나의 인스턴스 를 생성' 이라고 봐야하나요? 뒤에서 배울 super()를 통해 자식 인스턴스 생성시 부모 생성자를 필수로 호출하므로 '모든 인스턴스'를 생성하는 것도 말이 될 거 같지만 만약 모든 인스턴스를 메모리에 생성한다면 메모리가 비효율적으로 사용되는 것도 같아 이 부분이 좀 헷갈립니다.

  • java
  • 객체지향
TH Kwon 댓글 1 좋아요 0 조회수 452

ctrl + shift + enter 단축키 질문

미해결

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 비교 연산자 강의 8분 30초 경에 세미콜론이 없는 문장에서 커서가 괄호 안에 있는 경우 윈도우 환경 기준 ctrl + shift + enter 를 사용하면 세미콜론이 생기면서 커서가 문장 맨 뒤로 간다고 말씀해주셔서 동일하게 따라해봤는데 작동하지 않습니다. 단축키가 변한건가요? 한영키도 눌러봤습니다.

  • java
  • 인텔리제이
최용욱 댓글 2 좋아요 0 조회수 1231

H2 초반 연결문제

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 연견을 누르면 아래와같은 오류가 나옵니다

  • java
  • spring
  • mvc
  • spring-boot
백종원 댓글 2 좋아요 0 조회수 582

String str = "Hello, Java! Welcome to Java";과 String str1 = str.concat("!!!");의 객체값 비교

미해결

김영한의 실전 자바 - 중급 1편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. package lang.String.method; public class StringChangeMain1 { public static void main(String[] args) { String str = "Hello, Java! Welcome to Java"; //x001 Object object = new Object(); String str1 = str.concat("!!!"); //x002 System.out.println(str); System.out.println(str1); str = object.toString(); str1 = object.toString(); System.out.println(str1.equals(str)); System.out.println(str1==str); System.out.println(str); System.out.println(str1); } } 결과로 Hello, Java! Welcome to Java Hello, Java! Welcome to Java!!! true false java.lang.Object@b4c966a java.lang.Object@b4c966a 가 나오는데, 배운 내용대로라면 str1은 str과 다른 새로운 객체값니간, str이랑 다른 객체값이 나올거라 생각했는데, str과 같은 객체값이 출력이 되어서 질문드립니다. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.

  • java
  • 객체지향
김동현 댓글 1 좋아요 0 조회수 314

Enum 내부에 인스턴스 생성 불가

해결됨

김영한의 실전 자바 - 중급 1편

========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] Enum 타입이 생성자를 private로 하여 외부 생성을 막은 클래스와 거의 동일하다고 하셨는데 그 부분에 이해가 안되는 부분이 생겨 질문 드립나다. public class Grade { public static final Grade BASIC = new Grade(); public static final Grade GOLD = new Grade(); public static final Grade DIAMOND = new Grade(); private Grade() { } //자기 자신의 클래스에서 새로운 인스턴스 생성 (가능) public static Grade generate() { return new Grade(); } } 위의 코드처럼 class로 만든 경우 private으로 외부 인스턴스 생성을 막아도 자신 클래스 내부에서는 새로운 인스턴스 생성하는 코드에 빨간줄이 나타나지 않았습니다. public enum Grade { BASIC, GOLD, DIAMOND //자기 자신의 클래스에서 새로운 인스턴스 생성 (불가능) public static Grade generate() { return new Grade(); } 강의에서 위의 코드와 거의 동일한 코드라고 해주셨던 Enum타입으로 클래스를 만들경우는 아래의 generate 메서드에서 새로운 인스턴스를 만들 수 없다며 빨간줄이 생깁니다. 위의 코드와 아래 코드의 어떤 부분에서 이러한 차이가 생기는지 궁금합니다. 단순히 private으로 외부 인스턴스 생성만 막은 경우라면 자기 자신 안에서는 인스턴스 생성이 가능해야 할 것 같은데 어째서 Enum에서는 자기 자신 내부에서 생성이 불가능한 건가요? private으로 외부 생성을 막더라도 저런식의 generate 메서드를 만들면 외부에서 인스턴스 생성이 가능해 지지 않을까 하는 생각에 만들다가 이런 차이를 발견해 질문 드립니다.

  • java
  • 객체지향
오스즈 댓글 2 좋아요 0 조회수 439

서버 실행 실패

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

> Task :LibraryAppApplication.main() FAILED . ____ _ /\\ / ___'_ __ ( _)_ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.7.6) 2024-04-04 17:09:40.815 INFO 12468 --- [ main] c.g.libraryapp.LibraryAppApplication : Starting LibraryAppApplication using Java 17.0.9 on KONG with PID 12468 (C:\Project\project\library-app\build\classes\java\main started by jinju in C:\Project\project\library-app) 2024-04-04 17:09:40.819 INFO 12468 --- [ main] c.g.libraryapp.LibraryAppApplication : No active profile set, falling back to 1 default profile: "default" 2024-04-04 17:09:41.422 INFO 12468 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. 2024-04-04 17:09:41.474 WARN 12468 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'userRepository' defined in com.group.libraryapp.domain.user.UserRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Cannot register bean definition [Root bean: class [org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in com.group.libraryapp.domain.user.UserRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration] for bean 'userRepository': There is already [Root bean: class [null]; scope=; abstract=false; lazyInit=null; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=userConfiguration; factoryMethodName=userRepository; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [com/group/libraryapp/config/UserConfiguration.class]] bound. 2024-04-04 17:09:41.505 INFO 12468 --- [ main] ConditionEvaluationReportLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2024-04-04 17:09:41.521 ERROR 12468 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Description: The bean 'userRepository', defined in com.group.libraryapp.domain.user.UserRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration, could not be registered. A bean with that name has already been defined in class path resource [com/group/libraryapp/config/UserConfiguration.class] and overriding is disabled. Action: Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true Execution failed for task ':LibraryAppApplication.main()'. > Process 'command 'C:/Program Files/Java/jdk-17/bin/java.exe'' finished with non-zero exit value 1 찾아본 결과 이 문제는 Spring 애플리케이션의 빈(bean) 정의 중에 중복이 발생하여 발생한 것으로 보입니다. 에러 메시지에 따르면 userRepository 빈이 이미 UserConfiguration 클래스에서 정의되어 있으며, 또한 Spring Data JPA가 자체적으로 해당 빈을 생성하려고 시도하고 있는 것으로 보인다고 합니다. 혹시 UserConfiguration 부분에 변경이 적용 안된게 있어서 그런걸까요? 저 bean 부분을 지워도 .UserServiceV1 때문에 컴파일 에러가 발생하더라구요,.,..

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
댓글 3 좋아요 0 조회수 627

git에서 커밋을 했는데, 계속 진행해도 되는지의 여부

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

40강. git 기초사용법을 듣고 있습니다. 코드를 github에 올리는 과정에서 처음에는 git add . 작성 시 아래와 같이 에러가 나타났습니다 위와 같은 과정을 거쳤고, 커밋이 반영된듯 싶으면서도 fatal: unknown write failure on standard output이라는 문구가 떠 다음 과정을 진행하기 찝찝합니다. 이전에 git add .시 실행은 된 것 같지만 warning이 난것도 나중에 문제가 될것 같습니다..감사합니다.

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
송우석 댓글 2 좋아요 0 조회수 2069

Oracle12cDialect 오류 해결 방법

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

(사진)

  • java
  • jpa
강프로그래머 댓글 1 좋아요 0 조회수 370

자바 메모리 구조에 대해 질문드립니다.

미해결

김영한의 실전 자바 - 기본편

안녕하세요 영한님. 항상 양질의 강의로 지식을 공유해주시는점에 우선 감사하다는 인사부터 올리겠습니다. 자바 메모리 구조에 대해 강의를 들으면서 문득 궁금한 점, 스스로 지식 정리가 되지 않는 부분이 있어 질문드립니다. 우선 제가 알고 있는 사실입니다. JDK 스펙에서 메소드 영역의 구현 방식에는 제한하지 않기에 벤더마다 상이하다 Java8 이전 오라클 핫스팟에선 이를 Permgen(Permanent Genration) 이라 명하였고 힙 메모리 안에 위치시켰다. 우리가 일반적으로 아는 static 변수 및 메소드, 클래스 정보, 런타임 상수 풀, String Pool 등이 이 메소드 영역 (Permgen)에 저장되었다. 하지만, Java8 이후 Permgen 의 고정된 메모리 이슈로(잦은 OOME) metaspace 라는 새로운 대체 공간을 만들고 이를 os영역인 Native memory 쪽에 두었다. java8 이후 현재, 기존의 Permgen 에 저장되던 클래스 메타 정보들 (constant pool)은 대체된 metaspace안에 저장되고 static 변수 및 메소드, String Pool(리터럴 String 및 interned String 저장 pool) 들은 Heap 영역으로 저장되게 변경되었다. 우선 제가 옳게 이해하고 있는지, 지식에 오류가 없는지 궁금하며 몇 가지 문의사항이 있습니다. 위 내용중 2)에서 Permgen을 힙 메모리 안에 두었다고 하지만 heap / non-heap 으로 구분하여 Permgen 은 non-heap 에 속한다 라고 설명하는 레퍼런스가 많습니다. Permgen이 non-heap 이라고 하는 이유가 비록 Permgen 이 논리적으로는 힙 메모리 안에 위치하지만, 일반적으로 gc 대상에선 제외되기 때문에 그런건지 아니면 실제로 물리적으로 분리된 공간이어서 non-heap 이라는건지 궁금합니다. (+ 지속적으로 찾아보니 Permgen 은 Heap 영역안에 특별한 공간 정도로 이해하면 될 듯 합니다. GC(major/full GC) 또한 동작한다고 하네요..! 이것과 별개로 metaspace의 경우도 더이상 사용하지 않는 클래스에 대해 메모리 회수가 일어난다고 합니다. 근데 이 metaspace 는 navtive 영역에 있는데 이걸 "gc가 동작하여 최적화한다" 라고 말할 수 있는 건지 아니면 그냥 Metaspace 자체에서 메모리관리를 한다고 봐야할지 궁금합니다..!) 궁극적으로 궁금한 부분인데요 메소드 영역 이라는 것에 대해 어떻게 이해하면 좋을지 의문입니다. 두 가지 정도로 생각하고 있는데, 1. 메소드 영역 이라는 것은 JDK spec 에서 정의하고있는 하나의 추상화된 공간(인터페이스)이다. 이것이 과거엔 힙에 위치한 permgen으로 구체화 되었고 현재는 native 메모리에 위치한 metaspace로 구체화 되어 대체되었다. (메소드 영역이 상위 개념이다) 2. 옛날 permgen, 현재의 metaspace 안에 특정한 데이터(클래스 메타데이터 같은)를 저장하는 별도의 공간이 있고 이를’ 메소드영역’ 이라고 한다. (메소드 영역이 하위 개념이다) 메소드 영역과 permgen, metaspace 이들간의 카테고리 상 포함관계가 어떻게 되는지 개념이 궁금합니다.(1 번과 2번중에 어떤게 맞는지) 또한 현재 메소드 영역을 담당하는 metaspace 기준으로, static 변수, string pool 등은 Heap 영역에 저장되고(static 변수의 경우 heap 영역안의 static pool 안에) 클래스 정보, 런타임 상수 풀(constant pool) 등은 Metaspace 에 저장이 되는데 “메소드 영역에는 클래스정보, static 변수, 런타임 상수 풀이 저장된다” 라는 개념이 아직도 유효하고 옳은 개념인지 문의드립니다. 이게 말이 되려면 메소드영역이란 heap 영역의 일부 + metaspace 가 되어야 하기 때문입니다. 감사합니다.

  • java
  • 객체지향
이상진 댓글 1 좋아요 5 조회수 773

섹션 5 - 3(타입 안전 열거형 패턴) if 문대신 개선된 switch 문으로 변경

해결됨

김영한의 실전 자바 - 중급 1편

package enumeration.ex2; public class DiscountService { public int discount(ClassGrade grade, int price) { if (grade == ClassGrade.BASIC) { return price / 100 * 10; } if (grade == ClassGrade.GOLD) { return price / 100 * 20; } if (grade == ClassGrade.DIAMOND) { return price / 100 * 30; } return 0; } } package enumeration.ex2; public class DiscountServiceTest { public int discount(ClassGrade grade, int price) { switch (grade) { case ClassGrade.BASIC -> { return price / 100 * 10; } case ClassGrade.GOLD -> { return price / 100 * 20; } case ClassGrade.DIAMOND -> { return price / 100 * 30; } default -> { return 0; } } } } 안녕하세요. 위의 코드 같이 if 문으로 사용하면 정상적으로 실행이 가능한데 아래 처럼 if 문을 개선된 switch 문으로 바꾸면 왜 컴파일 오류가 뜨는지 정확히 알고 싶습니다. case 에는 리터럴 상수만 사용 가능하고 참조값은 case에 적을 수 없는 것 같은데 맞나요?

  • java
  • 객체지향
따뜻한 당나귀 댓글 2 좋아요 0 조회수 445

User와 loanhistory 관계

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

User가 UserLoanHistory를 가지게 됨으로써 대출하는 로직이 간단해지지만 UserLoanHistory관련 CRUD를 전부 User에서 비즈니스 로직을 처리해야하는 건가요? User가 처리하는 로직이 너무 많아지는 것 같아 이게 객체지향적인 게 맞나 고민이 되네요 현재 경우는 C U 밖에 없지만 만약 예를 들어서 작가와 책 엔티티가 있을 때 연관관계의 주인은 책에 있지만 작가가 보유한 책을 조회하는 로직을 더 간편하게 처리하기 위해 작가는 책을 리스트로 가지면서 생명주기를 관리하면, 책을 수정하거나 삭제할 때도 무조건 작가의 도메인에서 로직을 처리하게 되는 건가요? 단일책임원칙을 위배하는 것이 아닌가 고민이 되어 질문드립니다!

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
gang01 댓글 1 좋아요 1 조회수 300

인기 태그

인프런 TOP Writers

주간 인기글