항상 이 부분에서 이해가 안되서 답답한 마음을 안고 지내고 있습니다 🥲 구문 1. Reportable factoryCam = FactoryCam(); 구문 2. FactoryCam factoryCam = FactoryCam(); 구문 1과 구문 2의 차이점이 무엇인지 알 수 있을까요? 기능적인 부분은 이해했습니다. 구문 1의 경우, FactoryCam 이 Reportable 인터페이스를 상속받았으니, Reportable 로 참조를 해서 접근할 수 있다.. 라고는 이해를 했는데요. 저 두 개가 달라지는 것에 대한 개념을 좀 설명 부탁드려도 괜찮을까요? 제가 어렴풋이 이해하는 개념은 접근 경로 같은 개념인데, 이게 맞을까요?
안녕하세요, Thread 강의 따라서 코드작성후 cleanThread.start를 실행했을때 출력이 나도코딩님과 다르게 나와서 질문드립니다. Thread가 들어가긴 한거 같은데 동시에 cleanThread.run 한것처럼 직원분과 사장님이 따로 청소를 합니다.(하지만 run과 다르게 직원분이 아닌 사장님이 먼저 청소를 하고 직원분이 청소를 함) 밑에 출력결과 첨부합니다! -- 사장 청소 시작 -- (사장)1번방 청소 중 (사장)3번방 청소 중 (사장)5번방 청소 중 (사장)7번방 청소 중 (사장)9번방 청소 중 -- 사장 청소 끝 -- -- 직원 청소 시작 (Thread) -- (직원)2번방 청소 중 (직원)4번방 청소 중 (직원)6번방 청소 중 (직원)8번방 청소 중 (직원)10번방 청소 중 -- 직원 청소 끝 (Thread) --
안녕하세요 초보 수강생입니다..! 저는 비트맵 이미지를 추가하려고 하는데 System.OutOfMemoryException: '메모리가 부족합니다.' 이 메시지가 계속 뜨더라구요.. 실제로 PC에 메모리는 충분한데 왜 뜨는것인지 알 수 있을까요..? using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Drawing { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { Form fm = new Form(); fm.Text = "샘플"; PictureBox pb = new PictureBox(); pb.Image = Image.FromFile("C:\\45347.bmp"); pb.Top = 100; pb.Parent = fm; Application.Run(fm); } } }
기존에 제네릭스를 사용하기 위해 Wrapper클래스를 사용하여 Integer, Double과 같이 정의한 뒤에 사용했었는데 현 강의에서는 public static <T, V> void orderCoffee(T name, V coffee){ System.out.println(coffee + " 준비 완료 : "+name); } 이와같이 선언 한뒤 orderCoffee(27, "라떼") 와 같이 호출을 하는데 Wrapp를 사용해주어야하는 경우와 아닌 경우가 구분이 잘 가지 않습니다...
강의 잘 듣고 있습니다! 이것저것 해보다가 궁금한게 생겼어요. 19번째 줄이 실행되는 순간 customerList의 fee 값이 바뀌어야 하는거 아닌가요? 20번째 줄을 안쓸때는 아래처럼 fee값이 안바뀐채로 출력되는데 챈 50 0 레 45 0 모 40 0 벤 20 0 제 10 0 20번째 줄을 쓰니까 이렇게 나오는 이유가 궁금합니다! 챈 50 2000 레 45 2000 모 40 2000 벤 20 0 제 10 0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 1. 싱글톤을 사용시 자동으로 관리해주기 때문에 @PostConstruct,@PreDestroy 를 사용안해도 되는게 맞다면 빈 콜백생명주기 함수 때 따로 적용해서 DB클 클라이언트, 네트워크 사용시 쓴다했는데 싱글톤 스코프로 한다면 쓸 일이 없는걸까요 ?? @PostConstruct,@PreDestroy 방법이 싱글톤 스코프 를 사용 시 전부 자동으로 해결이 되는건지 ?? @PostConstruct,@PreDestroy 싱글톤 스코프를 사용시 따로 안써줘도 되는건지 ? 네트워크나 db 연결 같은 시에만 사용을 하는건지 ... 헷갈려서 질문 남깁니다. 2.new AnnotationConfigApplicationContext() 에서 괄호 안에 .class 적을 시 해당 클래스는 자동으로 @ComponentScan 적용 대상이 된다고 하셨는데 괄호 안에 .class 지정 시 @Component 사용을 안해도 되고 .class 지정 시 해당 클래스에 @Configuration,@ComponentScan 이 붙는다고 생각 을 해도 되는 걸까요 ?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. <CoreAppliction 실행 모습> <build.gradle 모습> CoreApplication을 실행하면 강사님과 다르게 출력이 되고 스프링도 제가 종료하지 않아도 자동적으로 종료가 됩니다. build.gradle에 혹시 제가 잘못 추가한 부분이 있을까요??
조회 대상 빈이 2개 이상일 때 해결 방법으로 @Autowired 로면 필드 이름, 파라미터 이름으로 빈 이름을 추가 매칭한다 고 하셨는데 파라미터로 매칭하는 경우 private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceimpl(MemberRepository memberRepository, DiscountPolicy fixDiscountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = fixDiscountPolicy; } 이거는 이해가 갑니다. 근데 필드명으로 매칭하는 경우가 헷갈리는게 강사님께서 말씀하신 필드명으로 매칭하는 방법은 private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired private DiscountPolicy rateDiscountPolicy; @Autowired public OrderServiceimpl(MemberRepository memberRepository, DiscountPolicy fixDiscountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = fixDiscountPolicy; } 이거는 rateDiscountPolicy가 그냥 사용되지 않아서 돌아 가는 거 아닌가요? rateDiscountPolicy를 사용해서 필드 명으로 매칭하려면 private final MemberRepository memberRepository; @Autowired private DiscountPolicy rateDiscountPolicy; public OrderServiceimpl(MemberRepository memberRepository, DiscountPolicy rateDiscountPolicy) { this.memberRepository = memberRepository; this.rateDiscountPolicy = rateDiscountPolicy; } 이렇게 바꾸고 createOreder 메소드에 discountPolicy를 rateDiscountPolicy로 다바꿔야 돌아가던데 @Override public Order createOreder(Long memberId, String itemName, int itemPrice) { Member member = memberRepository.findById(memberId); // 기존 코드 // int discountPrice = discountPolicy.discount(member, itemPrice); // 바꾼코드 int discountPrice = rateDiscountPolicy.discount(member, itemPrice); return new Order(memberId, itemName, itemPrice, discountPrice); } 코드가 잘 작동되긴한데 이게 강사님이 말씀하신 방법이 맞는지 의문이 들더군요...ㅠㅠ 답변 주시면 정말 감사하겠습니다.
다른 분들의 질문을 읽어보던중에, 같은 질문에 다른 답변이 달려있는게 있어서 여쭤봅니다. "프록시 객체는 각 HTTP 요청마다 생성되는가?" 라는 질문에 https://www.inflearn.com/questions/618437 는 '각 요청마다 생성된다' 라고 답해져있고 https://www.inflearn.com/questions/348888 는 '프록시 객체는 한번만 생성된다'(맨밑에 있습니다) 라고 답해져있는데, 뭐가 맞는건가요? 그리고, 강의 교안 <9.빈 스코프>의 마지막 페이지(32페이지)에 보면 '마치 싱글톤을 사용하는 것 같지만 다르게 동작하기 때문에 결국에 주의해서 사용해야한다.' 라는 말이 있는데요. 이 말에 대해서 좀 더 설명을 해주셨으면 좋겠습니다. 만약 프록시 객체가 한번만 생성된다면, 그게 싱글톤으로 등록된 것이나 마찬가지인데, 왜 "싱글톤을 사용하는 것 같지만 다르게 동작"하는지 잘 모르겠습니다.
public final String lens; 선언과 동시에 값을 초기화 하지 않고 선언만 한뒤 public ActionCam(){ lens ="광각렌즈" } 기본생성자 내에서 이와같이 초기화 하는 케이스 있다고 설명해주셨습니다. 근데 기본생성자가 아닌 매개변수를 가지고 있는 생성자내에서 public void ActionCam2(String name){ lengs = "테스트" } 와같이 선언한 경우는 lens 변수는 정의할수없다고 에러메시지가 뜨는데 기본생성자는 가능하고 매개변수가 있는 메소드는 불가능한 이유가 궁금합니다.
강의 교안 <9.빈 스코프>의 28페이지를 보면 다음과 같이 설명되어있습니다. "ObjectProvider.getObject()를 호출하는 시점까지 request scope 빈의 생성을 지연할 수 있다" 이 때, 빈의 생성을 지연한다는 말이 실제로 getObject() 함수를 호출해야만 request scope의 MyLogger 빈이 만들어 진다는 건가요? 아니면 http 요청이 들어오는 순간 이미 MyLogger 빈은 다른 로직에 의해 생성되어 존재함이 보장되고, getObject() 함수는 무조건 MyLogger 빈을 갖고 올 수 있기 때문에 이를 논리적으로 "빈의 생성을 지연한다"라고 표현하신 건가요? 전자가 맞는지 후자가 맞는지 궁금합니다. *추가. 비슷한 질문이 있어서 해당 질문을 참고하여 내용을 추가하였습니다. https://www.inflearn.com/questions/702458 위의 질문에서 "http요청이 들어왔을 때 request bean이 생성되는게 아니라, 생성할수있는 상태가 되는것이고, 이 상태일때 ObjectProvider.getObject()를 하게되면 request bean을 생성한후 반환하는것이다" 라는 답변이 있었습니다. 그래도 이해가 안되서, getObject() 함수가 호출되기 전에 getBean()으로 등록된 MyLogger 빈을 갖고와봤습니다. @Controller @RequiredArgsConstructor public class LogDemoController { private final ObjectProvider<MyLogger> myLoggerProvider; // 추가된 라인 private final ApplicationContext ac; @RequestMapping("log-demo") @ResponseBody public String logDemo(HttpServletRequest request) { // 추가된 라인 MyLogger testMyLogger = ac.getBean(MyLogger.class); // 추가된 라인 System.out.println(testMyLogger); String requestURL = request.getRequestURL().toString(); MyLogger myLogger = myLoggerProvider.getObject(); myLogger.setRequestURL(requestURL); myLogger.log("controller test"); LogDemoService.logic("testID"); return "OK"; } } ApplicationContext를 의존주입 받아서, getObject()가 호출되기 전에 getBean()으로 MyLogger 타입의 스프링 빈을 조회하고 출력하였는데, testMyLogger와 myLogger에 동일한 객체가 들어있었습니다. 위의 답변과는 상충되는 결과인데, 제가 추가한 코드에 문제가 있는 건가요?