1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요? 강의를 열심히 듣다가 궁금한 점이 생겨서 질문 드립니다! @ManyToMany 와 복합키에 관련된 부분에 대해서 궁금한 점이 있는데, 일반적으로 실무에서 @ManyToMany 관계를 사용하지 않는 이유로 단순히 연관 연결 뿐 아니라 그 외에 특정한 데이터들이 들어올 수 있기 때문에 새로운 Entity로 승격시켜 생성한다는 부분은 이해하였습니다. 또한, 이를 정의하면서 복합키를 사용하지 않고 새로운 대체키를 생성하는 부분 역시 이해하였습니다. 하지만, 만약 팔로잉 테이블을 구현한다고 가정한다면 제가 생각하기엔 팔로잉 하는 사람의 ID 값과 팔로우 하는 사람의 ID 값만 저장하면 된다고 생각하는데 이런 경우에는 1. ManyToMany 관계를 사용하는지? 2. 새로운 대체키를 사용하는지? 이 부분이 궁금합니다. 또한, 실무에서 팔로잉 기능을 개발한다고 가정하면 위에서 설명한 단순히 2개의 외래키만 사용하는 것이 아닌 생성일 같은 데이터를 추가하여 좀 더 자세하게 관리하는지 역시 궁금합니다.
public void minus(Product product, Integer minusQuantity) { Integer quantity1 = cartMap.get(product); int newQuantity = quantity1 - minusQuantity; if (newQuantity <= 0) { cartMap.remove(product); } else { cartMap.put(product, newQuantity); } } 정말 기본적인 질문인거같은데 이해가 안돼서 질문드립니다 저 else문을 안쓰고 그냥 put하면 수량은 0이 되는데 키가 지워지지 않더라구요 근데 else문을 사용하니까 키가 사라지는데 무슨 차이일까요 ㅠㅠ remove는 이미 if문에서 실행이 돼야되는거 아닌가요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 강의와 같이 소스코드를 작성하고 테스트를 진행 하였는데 테스트는 성공하지만 강의와 콘솔로그가 다릅니다 무엇이 문제일까요ㅠㅠ?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 무분별한 setter 사용은 엔티티가 왜 변경되는지 추적하기가 힘들어지므로 가급적 setter은 생성하지 말고 엔티티에 대한 값 변경을 하려면 편의 메서드를 통해 변경하도록 김영한 선생님께서 권고하셨습니다. 하지만 연관관계 편의 메서드의 로직을 구성할 때 setter가 사용됐는데 setter을 사용하지 않고 연관관계를 설정하는 방법이 궁금합니다 !
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 강의 열심히 듣고 있습니다. Redisson 관련 실습을 진행하고 있는데, 시간을 변경해도 계속 test results가 fail이 뜨고 있습니다. 관련 원인을 모르겠습니다. github에서 코드를 복붙해봐도 똑같아서 문의드립니다. 어떤게 오류인지도 잘 모르겠어서 질문드립니다 감사합니다. org.opentest4j.AssertionFailedError: expected: <0> but was: <100> at org.junit.jupiter.api.AssertionFailureBuilder.buil d (AssertionFailureBuilder.java:15 1) at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow (AssertionFailureBuilder.java:13 2) at org.junit.jupiter.api.AssertEquals.failNotEqual (AssertEquals.java:19 7) at org.junit.jupiter.api.AssertEquals.assertEquals (AssertEquals.java:18 2) at org.junit.jupiter.api.AssertEquals.assertEquals (AssertEquals.java:17 7) at org.junit.jupiter.api.Assertions.assertEquals (Assertions.java:63 9) at com.example.stock.facade.RedissonLockStockFacadeTest.동시에_100개의요청 (RedissonLockStockFacadeTest.java:5 8) at java.base/java.lang.reflect.Method.invoke (Method.java:56 8) at java.base/java.util.ArrayList.forEach (ArrayList.java:151 1) at java.base/java.util.ArrayList.forEach (ArrayList.java:151 1)
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 토이프로젝트 진행중 궁금한점이 생겼습니다. 핵심 엔티티에 정적 팩토리 메서드로 생성방법을 만들었는데, 여러가지 연관관계와 필드값들이 많이 포함되어 있습니다. 리포지토리를 테스트하려고 하니, 엔티티 생성에 너무 많은 코드들이 사용되어서, 테스트만을 위한 필수 필드값만 포함된 생성자나 메서드를 만드는 것이 올바른 방법인지 궁금증이 생겼습니다.
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] class EraserBox<T> { public boolean instanceCheck(Object param) { return param instanceof T; // 오류 } public void create() { return new T(); // 오류 } } public class MyArrayListV4<E> { private static final int DEFAULT_CAPACITY = 5; private Object[] elementData; private int size = 0; @SuppressWarnings("unchecked") public E get(int index) { return (E) elementData[index]; // 오류 X } 두 예시 모두 런타임 시점에 타입을 활용하는 걸로 보이는데 처음 예시에 있는 두 메서드는 불가능하고 두번째 예시에 있는 get 메서드는 어째서 가능한지 궁금합니다.
섹션 4 : 실전 예제 1 - 요구사항 분석과 기본 매핑 위 강의 19:30 부분에서 실무에서는 @Table 에 index 를 모두 명시하는 것이 바람직하다고 말씀하셨는데, @Table 에 명시한 index 가 실제 DB 에 적용되려면, ddl-auto=update 이어야 하지 않나요? 그런데, 운영 서버에는 ddl-auto=update 를 사용하지 말라고 하셨는데, 그렇다면 운영중인 서버에 index 를 넣을 때는 어떤 방법으로 하는지 궁금합니다. MySQL 클라이언트로 접속해서 직접 매뉴얼로 index 설정하는지요? 만약 그럴 경우, Entity 클래스의 설정과 실제 DB 의 설정이 따로 놀게 되는데, 괜찮은 건지 궁금합니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] ```java public void add(Object e, int index) { if (size == elementData.length) { grow(); } for (int i = elementData.length - 1; i > index; i--) { elementData[i] = elementData[i - 1]; } elementData[index] = e; size++; } ``` for문 조건에서 for (int i = elementData.length - 1; i > index; i--) i의 초기값을 배열의 길이로 주는 것보다는 현재 배열에 담고 있는 요소의 수인 (size-1)변수로 주는 것이 루프문의 범위를 줄이고 정말 미세한차이겠지만 조금 더 효율적이라고 생각하는데 혹시 (size-1)변수로 반복문 초기값을 설정했을 때 문제될 점이 있을까요??
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 이 코드에서 생성메서드를 @Builder 를 사용한 생성자로 교체하고 싶습니다. 유연한 생성을 통해 테스트 하기 편한 객체 생성을 위해서 더 좋다고 생각했기 때문입니다. 그런데 @Builder 생성자를 사용할때, 연관관계 편의 메서드를 어떻게 활용해야 할지 고민입니다. 다른 사람들의 코드를 보니, @Builder 생성자에서 @OneToMany 의 양방향 필드는 초기화 하지 않는 경우를 봤는데, 그러면 연관관계를 어떻게 설정하고, 또 왜 연관관계 편의 메서드를 초기화시에 사용하지 않는지 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 예제를 따라하면서 호기심에 deque.push(1); deque.push(2); deque.push(3); System.out.println("deque.pop() = " + deque.poll()); System.out.println("deque.pop() = " + deque.poll()); System.out.println("deque.pop() = " + deque.poll()); pop을 -> poll로 바꿔봤는데 결과값이 똑같이 나오고 그 반대로 offer / pop 으로 해도 마찬가지더라구요! Deque<Integer> deque = new ArrayDeque<>(); 혹시 이 Deque가 queue / stack 둘 다 지원하기 때문에 데이터를 추가 할 때 자료구조가 결정되는게 맞는건가요?
안녕하세요. 수업 정말 잘 듣고 있습니다. 입문 편이랑 기본 편 복습 중에 질문 하나 드립니다. 인터넷에서 검색해 보니 static이 붙은 정적 메서드, 클래스 메서드를 함수라고 부르기도 하고 static이 붙지 않은 인스턴스 메서드를 메서드라고라고 부르기도 한다는데요. 위와 같이 구분해서 부르는 건 맞는 건가요?
2024-06-05 08:17:10.986 WARN 86324 --- [ main] o.h.t.s.i.ExceptionHandlerLoggedImpl : GenerationTarget encountered exception accepting command : Error executing DDL " create table zone ( id int8 not null, city varchar(255) not null, local_name_of_city varchar(255) not null, province varchar(255), primary key (id) )" via JDBC Statement org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL " create table zone ( id int8 not null, city varchar(255) not null, local_name_of_city varchar(255) not null, province varchar(255), primary key (id) )" via JDBC Statement at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlString(SchemaCreatorImpl.java:458) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlStrings(SchemaCreatorImpl.java:442) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:325) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.tool.schema.internal.SchemaCreatorImpl.performCreation(SchemaCreatorImpl.java:169) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:138) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:124) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:168) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:85) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:335) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:471) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1498) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) ~[spring-orm-5.3.23.jar:5.3.23] at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.3.23.jar:5.3.23] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-5.3.23.jar:5.3.23] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-5.3.23.jar:5.3.23] at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[spring-orm-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.23.jar:5.3.23] at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1154) ~[spring-context-5.3.23.jar:5.3.23] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:908) ~[spring-context-5.3.23.jar:5.3.23] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.23.jar:5.3.23] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) ~[spring-boot-2.7.4.jar:2.7.4] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734) ~[spring-boot-2.7.4.jar:2.7.4] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) ~[spring-boot-2.7.4.jar:2.7.4] at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[spring-boot-2.7.4.jar:2.7.4] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-2.7.4.jar:2.7.4] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) ~[spring-boot-2.7.4.jar:2.7.4] at com.studyolle.App.main(App.java:10) ~[main/:na] Caused by: org.postgresql.util.PSQLException: ERROR: permission denied for schema public Position: 19 at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2675) ~[postgresql-42.3.7.jar:42.3.7] at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2365) ~[postgresql-42.3.7.jar:42.3.7] at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:355) ~[postgresql-42.3.7.jar:42.3.7] at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:490) ~[postgresql-42.3.7.jar:42.3.7] at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:408) ~[postgresql-42.3.7.jar:42.3.7] at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:329) ~[postgresql-42.3.7.jar:42.3.7] at org.postgresql.jdbc.PgStatement.executeCachedSql(PgStatement.java:315) ~[postgresql-42.3.7.jar:42.3.7] at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:291) ~[postgresql-42.3.7.jar:42.3.7] at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:286) ~[postgresql-42.3.7.jar:42.3.7] at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:94) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java) ~[HikariCP-4.0.3.jar:na] at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] ... 34 common frames omitted Hibernate:
안녕하세요. 메서드 관련 질문입니다. 메서드는 공통된 기능이기 때문에 인스턴스 변수처럼 내부에 가지고 있지는 않고 메서드 영역에 있는 걸 필요할 때(호출할 때) 가져와서 쓴다. 이것과 관련하여 질문 3가지 문의 드립니다. 1. 각각의 객체에는 필드값만 가지고 있고 메서드는 아예 가지고 있지 않은거죠 ? 2. 컴파일이 될 때 메서드 영역 > 클래스 영역 이 부분에 클래스의 관련 코드들이 다 들어가 있는 걸로 이해했는데 그러면 다음의 두 경우는 어떻게 이해하면 될까요 ? (두 경우 다 추상 클래스, 인터페이스에는 메서드의 바디가 작성되어 있지 않고 나중에 작성되는 경우) -> 메서드 영역의 클래스 영역에 처음에는 바디가 없으니 관련 정보가 전혀 없을 거 같은데 이와 같이 나중에 오버라이딩을 해주었을 때 메서드 영역의 클래스 영역에서 어떻게 되는지 궁금합니다. 새로운 클래스 영역에 메서드로 정의되는 부분이 아니라 기존에 클래스 영역에서 정의가 되어야 하는데 문제는 클래스 영역의 기존 메서드를 수정하자니 다음의 두 케이스는 해당 객체를 생성할 때에만 적용되는 일회성 코드라 ... 2.1 AbstractAnimal은 추상클래스로 sound()가 추상 메서드입니다. AbstractAnimal animal = new AbstractAnimal() { @Override public void sound() { System.out.println("test"); } }; 2.2 InterfaceAnimal interface 입니다. InterfaceAnimal interfaceAnimal = new InterfaceAnimal() { @Override public void sound() { System.out.println("test"); } @Override public void move() { System.out.println("test"); } };
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 강사님 다형성 참조를 보다가 질문합니다 Parent poly = new Child(); 부모 타입의 변수는 부모의 데이터를 사용 할 수 있으므로 자식 타입을 대입 할 수 있고 Child poly = new Parent(); 자식 타입의 변수는 자식 데이터를 사용 할 수 있지만 부모 타입이 범위가 더 커 자식이 담을 수 없는게 맞을까요?
안녕하세요. STS설치 후 파일을 만들려고 하는데 콘텐츠를 가져오는데 문제가 생겼다는 오류창이 계속 뜹니다. 처음에 jdk 17버전으로 진행했는데 gradel이 7.3버전부터 지원을 한다고 해서 21버전으로 재설치했는데도 오류가 발생합니다. Gradle이 호환 가능한 걸 찾으라는 말 같은데 어떻게 접근해야할지 모르겠습니다. 혹시 아시는 분 계실까요..? 첫번째 사진에서 OK하고 넘어가면 2번째 사진에 나온 것 처럼 폴더 생성이 강의에 나온 것과 다르게 나와서 그대로 진행해도 괜찮을지 모르겠습니다...