묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
AppConfig 에서 각 서비스(MemberServiceImpl, OrderServiceImpl)의 메모리 공간 관련 질문
AppConfig 리팩토링하기 전, new MemoryMemberRepo 를 각각 constructor 파라미터로 넘겨줬습니다. 따라서 MemberServiceImpl 과 OrderServiceImpl 의 메모리 공간이 각각 다를 것으로 생각되는데, 맞나요? 그렇다면 만약 두 서비스가 같은 메모리 공간을 사용하고 싶으면 어떻게 해야되나요?
-
미해결스프링 핵심 원리 - 기본편
스프링 컨테이너와 빈 스코프
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]스프링 컨테이너가 사용되면, 스프링 구성정보(Configuration) 을 활용해서 아래처럼 스프링 빈 저장소에 빈 이름과 빈 객체가 저장된다고 배웠는데요. 싱글톤 컨테이너의 경우에는 AppConfig 파일에서 @Bean으로 수동등록된 것이나, 혹은 컴포넌트 스캔을 통하여 스프링 컨테이너에 객체를 생성하여 등록하는 것으로 알고 있습니다.그런데 프로토타입 스코프와 웹 스코프의 경우에는 스프링 빈 저장소에 빈 객체의 주소값을 저장하는지 궁금합니다.예를 들어, 프로토타입 스코프를 스프링 컨테이너에 조회하면 스프링 컨테이너는 항상 새로운 인스턴스를 생성해서 반환하는데, 그럼 스프링 컨테이너가 생성되는 시점에서 ' 빈 이름 ' 만 등록되고, 빈 객체는 생성되지 않은 채 주소값이 등록되지 않는 것일까요??같은 맥락으로, 웹 스코프에서 request scope은 HTTP 요청이 들어오고 나갈 때까지만 유지되는 스코프입니다.@Component @Scope(value = "request") public class MyLogger {.. }MyLogger 클래스는 위처럼 @Component 로 되어 있기 때문에 컴포넌트 스캔의 대상인데, 그러면 스프링 컨테이너에 등록 될 때 빈 이름만 등록되고 객체는 생성되지 않은 채 등록되는 것일까요?그리고 이후에 @Controller @RequiredArgsConstructorpublic class LogDemoController { private final MyLogger myLogger;... }LogDemoController에서 의존관계 주입으로 MyLogger가 필요할 때, 그 때 비로소 객체가 생성되어서 스프링 컨테이너에 등록되어야 하는데, request scope이기 때문에 오류가 났던 것인가요?? 답변 주시면 감사하겠습니다.
-
해결됨김영한의 실전 자바 - 기본편
상속 받는 자식클래스의 메모리의 크기는?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]원래 클래스의 객체를 생성할때는 필드(멤버변수)에 따라서 메모리 크기가 정해지잖아요?결국 메서드는 메서드 영역 안에 있을테고, 힙 영역에 객체가 생성되면 메모리의 크기는 해당 객체 안의 필드에 따라 크기가 달라질테니까요 그렇다면 상속 관계에서 말씀하셨듯, 부모 클래스의 정보까지 함꼐 메모리 영역에 같이 할당이 되어진다면, 상속을 받는 클래스는 부모 클래스의 필드값 + 자식 클래스의 필드값 의 메모리 크기가 생성되는 건가요 ??
-
미해결스프링 핵심 원리 - 기본편
외부 시스템 연동으로 확장할 때 궁금증
안녕하세요 강의 잘 보고 있습니다. 회원 저장소에 외부 시스템을 연동 하는 것도 인터페이스를 두고 추후에 갈아 끼우면 된다 설명 해주셔서 궁금한 내용이 있습니다.말이 안되는 예시이긴 한 것 같은데 예제가 회원이니 회원으로 예시를 들어보겠습니다.(두 객체를 상황에 따라 동적으로 변경하여 사용하는 예시로 봐주시면 될거같습니다) 예를 들어 DB 회원 저장소로 운영을 하다가, 외부 시스템 연동도 함께 추가해달라는 요구사항입니다.경우에 따라 DB 회원 저장소 또는 외부 시스템에 연동하여 저장합니다. 이때 외부 시스템은 필드명은 물론이고 패스워드 정책 등 검증해야 하는 값이 다르다면 DTO 같은걸 별도로 사용하고 외부 시스템 연동하는 로직에서 검사를 해야 하는 걸까요?아니면 클라이언트에 해당하는 컨트롤러를 분리하고 회원 서비스를 그대로 사용하면 되는걸까요?주저리 주저리 작성한 것 같은데.. 질문의 요지는 외부 시스템 연동으로 확장이 될 때는 다른 필드 다른 검증 등이 필요한데 어떻게 확장하면 좋을지에 대한 질문입니다.긴글 읽어주셔서 감사합니다!
-
미해결김영한의 실전 자바 - 기본편
static ProductOrder createOrder
질문이 있습니다. static ProductOrder createOrder(String productName, int price, int quantity) 여기 부분이 잘 이해가 안가는데, 굳이 이렇게 ProductOrder 클래스명을 적고 createOrder를 적어서 static ProductOrder createOrder 라는 ProductOrderMain2 클래스 안에 코드를 쓰신 이유가 궁금합니다. ProductOrder 클래스안에 메소드를 만들어서 처리 가능한걸까요? package ref.ex; public class ProductOrderMain2 { public static void main(String[] args) { ProductOrder[] orders = new ProductOrder[3]; orders[0] = createOrder("두부", 2000, 2); orders[1] = createOrder("김치", 5000, 1); orders[2] = createOrder("콜라", 1500, 2); printOrders(orders); int totalAmount = getTotalAmount(orders); System.out.println("총 결제 금액: " + totalAmount); } static ProductOrder createOrder(String productName, int price, int quantity) { ProductOrder order = new ProductOrder(); order.productName = productName; order.price = price; order.quantity = quantity; return order; } static void printOrders(ProductOrder[] orders) { for (ProductOrder order : orders) { System.out.println("상품명: " + order.productName + ", 가격: " + order.price + ", 수량: " + order.quantity); } } static int getTotalAmount(ProductOrder[] orders) { int totalAmount = 0; for (ProductOrder order : orders) { totalAmount += order.price * order.quantity; } return totalAmount; } }
-
해결됨C개발자를 위한 최소한의 C++
안녕하세요. Deep Copy 부분관련해서 질문 사항이 있습니다.
안녕하세요. 해당 두코드의 차이에 대해서 여쭙고 싶어 CMystring 클래스에는 operator 함수를 구현하지 않은 상황에서 아래 두 코드의 실행 결과가 달라 질문드립니다. 1번 코드CMystring String3 = String2;2번 코드CMystring String3; String3 = String2; 1번 코드에서는 복사가 호출되어 String3에 새로운 메모리가 할당이되고.2번 코드에서는 단순 대입, 즉 shallow copy 가 일어나는 것을 확인하여 String2와 같은 메모리를 참조하는 것을 확인했습니다. 두코드의 동작 방식을 확인하여 둘의 차이를 간접적으로 확인했으나 정확한 이유를 알고싶어 이렇게 질문게시판에 글을 남깁니다.
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
형 변환(후반전)
오류가 왜 뜰까요 ..?? 알려주세용 ,, 감사합니다
-
미해결스프링 핵심 원리 - 기본편
스프링 빈 모두 조회하기 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.컨테이너에 담긴 모든 빈 조회하기 영상에서 한대로 코드를 따라했는데 코드를 썼을 때 강사님과 달리 자동으로 import되는 것들이 없었고 이에 따라 alt enter을 쓰거나 일일히 타이핑을 통해 import 되는 부분까지 동일히 작성했으나 밑과 같이 AppConfig.class, getBeanDefinitionNames(), getBean()을 인식하지 못하는 것처럼 에러가 뜹니다왜 그런지 모르겠어요
-
미해결김영한의 실전 자바 - 기본편
private static void 메소드 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.해당 메소드를 선언하실 때,private static 이렇게 선언하셨는데. 이 부분이 잘 이해가 안됩니다. private는 해당 클래스 내에서만 접근할 수 있게 하여 해당 클래스에서만 사용할 수 있고,static은 클래스 메소드로써 한번 선언을 하면 다른 클래스나 다른 패키지에 속한 클래스들도 해당 메소드를 사용할 수 있게 되는것 아닌가요?? private와 static이 어떻게 같이 사용될 수 있는 것인지 잘 이해가 안됩니다. 설명 부탁드립니다.
-
미해결스프링 핵심 원리 - 기본편
new AnnotationConfigApplicationContext()
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]여기에 질문 내용을 남겨주세요. new AnnotationConfigApplicationContext()에 들어가는 class 정보는 모두 빈으로 등록되는 것 맞나요? 그래서 DiscountService에 @Component와 @Autowired를 사용하지 않아도 테스트가 통과하는 건가요?
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
평점에 따른 영화 추천하기 정답 오류인가요?!
평점에 따른 영화 추천하기 질문 남깁니다..!요청한 평점 이상의 영화를 추천해주는 건데, 아래 출력 값은 틀린 것이 아닌가요,,?? rating: 7.1• 출력:• '어바웃타임'을 추천합니다.• '토이 스토리'를 추천합니다. 그리고 모범 답안에도 부등호가 반대로 되어있는 것 같습니다...!!
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
수업 소스 다운로드를 받았는데
사진과 같이 다른 src는 뜨지를 않아요어떤 게 문제일까요?아예 인텔리제이를 삭제했다가 재설치 하는 것부터 시작해야 할까요?
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
문제 - 2차원 배열1 질문 (ArrayEx7)
안녕하세요.int total = 0; 을 마지막 for 문 안에 작성을 하는것과처음 시작할때 Int total = 0; 을 선언하고 결과값을 뽑았을때 왜 다르게 결과가 나오는지 궁굼합니다!
-
해결됨김영한의 실전 자바 - 기본편
자바 입문,기초 다 수강하면
김영한 선생님 스프링입문으로 들어가도 될까요?
-
미해결김영한의 실전 자바 - 기본편
main이 아닌 다른 메서드에서 Scanner를 사용해도 크게 상관없나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]package ref.ex; import java.util.Scanner; public class ProductOrderMain1 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("입력할 주문의 개수를 입력하세요: "); int n = input.nextInt(); ProductOrder[] orders = new ProductOrder[n]; for (int i = 0; i < n; i++) { System.out.println((i + 1) + "번째 주문 정보를 입력하세요."); orders[i] = createOrder(); } printOrders(orders); int totalPrice = getTotalAmount(orders); System.out.println("총 결제 금액: " + totalPrice); } static ProductOrder createOrder() { Scanner input = new Scanner(System.in); ProductOrder order = new ProductOrder(); System.out.print("상품명: "); order.productName = input.nextLine(); System.out.print("가격: "); order.price = input.nextInt(); System.out.print("수량: "); order.quantity =input.nextInt(); return order; } static void printOrders(ProductOrder[] orders) { for (ProductOrder order : orders) { System.out.println("상품명: " + order.productName + ", 가격: " + order.price + ", 수량: " + order.quantity); } } static int getTotalAmount(ProductOrder[] orders) { int totalPrice = 0; for (int i = 0; i < orders.length; i++) { totalPrice += (orders[i].price * orders[i].quantity); } return totalPrice; } }강의에서는 main 메서드에서 입력을 받는데 저는 creatOrder에서 입력을 받도록 하여 만들었습니다. 결과는 똑같았는데 main 메서드에서 Scanner를 통해서 입력을 받는게 좋은지 아니면 그냥 다른 메서드에서 입력을 받는게 상관없는 방식인지 궁금합니다.
-
해결됨김영한의 실전 자바 - 기본편
static class
안녕하세요 강사님!static class는 후속강의에서 다뤄주시나요?
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
퀴즈 12번 질문있습니다.
퀴즈 12번에서 아래와 같이 코드를 작성했는데,실행 결과가 계속 해도 순차적으로 나옵니다..public static void main(String[] args) { Runnable product1 = () -> { for (int i = 1; i <= 5 ; i++) { System.out.println("A 상품 준비 " + i + "/5"); } System.out.println("-- A 상품 준비 완료 --"); }; Runnable product2 = () -> { for (int i = 1; i <= 5 ; i++) { System.out.println("B 상품 준비 " + i + "/5"); } System.out.println("-- B 상품 준비 완료 --"); }; Thread ProductThread1 = new Thread(product1); Thread ProductThread2 = new Thread(product2); ProductThread1.start(); ProductThread2.start(); while(ProductThread1.isAlive() || ProductThread2.isAlive()){ } /*try { ProductThread1.join(); ProductThread2.join(); } catch (InterruptedException e) { throw new RuntimeException(e); }*/ Runnable packing = () -> { System.out.println(" == 상품 준비 시작 == "); for (int i = 1; i <= 5; i++) { System.out.println("세트 상품 포장" + i + "/5"); } System.out.println(" == 상품 준비 끝 == "); }; Thread ProductPacking = new Thread(packing); ProductPacking.start(); }A실행이 끝나고 B로 넘어가는데,, 왜 그런걸까요.. 뭐가 문제일까요.. 강의와 똑같이 작성했는데.. A 상품 준비 1/5A 상품 준비 2/5A 상품 준비 3/5A 상품 준비 4/5A 상품 준비 5/5-- A 상품 준비 완료 --B 상품 준비 1/5B 상품 준비 2/5B 상품 준비 3/5B 상품 준비 4/5B 상품 준비 5/5-- B 상품 준비 완료 --== 상품 준비 시작 ==세트 상품 포장1/5세트 상품 포장2/5세트 상품 포장3/5세트 상품 포장4/5세트 상품 포장5/5== 상품 준비 끝 == 이런 식으로 나오거나 A와 B의 순서만 바뀔 뿐 숫자가 ABABAAB 이런식으로 섞이지가 않습니다..AAAAABBBBB 또는 BBBBBAAAAA이런식으로 나와요.. 아니면 AAAAAB(A준비완료)BBBB 이런식으로도 안나옵니다.. 무조건 한 상품 5개 모두 실행완료 후 다음 상품 실행해요..
-
해결됨김영한의 실전 자바 - 기본편
문제풀이 응용버전
안녕하세요. 문제풀이를 보다보니 접근제어자 강의가 접근제어자에 관한 강의인 것인지 아님 만든 클래스를 바탕으로 접근제어자를 통해서 불러 들이는 것에 관한 내용인지 헷갈리지만 계속 강의를 들으면서 이해하려고 노력 중입니다. 회원의 닉네임과 주소를 받아 저장하는 형식의 로직과 주문할 음식 그리고 해당 음식의 가격과 수량을 받아서 출력문을 만들었습니다.닉네임과 주소를 입력하지 않고 enter를 했을 때 다시 입력하라는 구문과 함께 재입력을 받게 하고 싶은데 아래의 결과처럼 나오게 됩니다. 어떤 부분에서 오류가 있는지 잘 모르겠습니다. return; 도 사용해봤지만 동일하게 나오더군요.
-
미해결스프링 핵심 원리 - 기본편
필드 주입 질문있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]필드 주입은 외부에서 변경이 불가능해서 테스트하기 힘들다는 치명적인 단점이 있다고 하셨는데, 외부에서 변경이 불가능하다는게 정확히 무슨 의미인가요? 생성자 주입도 변경이 불가능하지 않나요?
-
미해결스프링 핵심 원리 - 기본편
섹션6. 필터에서 beanA를 찾을 수 없음
@MyIncludeComponent public class BeanA { }@MyExcludeComponent public class BeanB { }package hello.core.scan.filter; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.FilterType; import static org.assertj.core.api.Assertions.*; import static org.springframework.context.annotation.ComponentScan.*; public class ComponentFilterAppConfigTest { @Test void filterScan() { ApplicationContext ac = new AnnotationConfigApplicationContext(ComponentFilterAppConfig.class); BeanA beanA = ac.getBean("beanA", BeanA.class); assertThat(beanA).isNotNull(); } @Configuration @ComponentScan( includeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyIncludeComponent.class), excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyExcludeComponent.class) ) static class ComponentFilterAppConfig { } }강의와 똑같이 따라친 해당 코드에서 org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'beanA' available 에러가 계속 발생합니다. 그래서 아래 코드처럼 BeanA 클래스와 BeanB클래스에 @Component 애노테이션을 추가하였더니 잘 작동합니다. @MyIncludeComponent @Component public class BeanA { } @MyExcludeComponent @Component public class BeanB { } 그런데 이 경우에는 또 하단의 Assertions.thorws 검증 코드가 제대로 작동하지 않습니다. ㅠ .... assertThrows( NoSuchBeanDefinitionException.class, () -> ac.getBean("beanB", BeanB.class)); 그래서 하단 코드처럼 BeanA에만 @Component를 붙이고 BeanB에는 @Component를 붙이지 않으면 테스트 코드가 올바르게 작동합니다... 원인을 알 수 있을까요? @MyIncludeComponent @Component public class BeanA { }@MyExcludeComponent public class BeanB { } BeanA, BeanB, MyExcludeComponent, MyIncludeComponent, ComponentFilterAppConfigTest 모두 테스트의 filter 패키지에 있습니다.