묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 핵심 원리 - 기본편
PrototypeBean 생성시점 질문입니다.
@Test void singletonClientUsePrototype() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(ClientBean.class, PrototypeBean.class); } static class ClientBean { private final PrototypeBean prototypeBean; @Autowired public ClientBean(PrototypeBean prototypeBean) { this.prototypeBean = prototypeBean; } }이 코드에서 new AnnotationConfigApplicationContext(ClientBean.class, PrototypeBean.class);이때 ClientBean은 싱글톤이어서 스프링 컨테이너에 생성되고 PrototypeBean은 프로토타입이라 생성되지 않습니다. (조회시점에 생성되므로 - getBean)static class ClientBean { private final PrototypeBean prototypeBean; @Autowired public ClientBean(PrototypeBean prototypeBean) { this.prototypeBean = prototypeBean; } }하지만 여기서 (의존관계 자동주입 시점)에 스프링컨테이너에 프로토타입빈을 요청하면 스프링컨테이너는 프로토타입빈을 생성해서 반환합니다.반환된 프로토타입빈을 ( 클라이언트 빈의 생성자를 통해) this.prototypeBean=prototypeBean; 에 의해서 내부필드에 주입되어서 보관합니다.라고 이해를 했는데 맞는지 궁금합니다.답변해주시면 정말 감사하겠습니다.
-
미해결스프링 핵심 원리 - 기본편
스프링 빈을 수동 등록하여 문제 해결
강의 4분 35초 즈음에 스프링 빈을 수동 등록하여 문제를 해결한다 함은,application.properties 파일에서 override true 설정 뒤spring.main.allow-bean-definition-overriding=true AutoAppConfig.class 파일에서@Configuration @ComponentScan( basePackages = "hello.basic.member", basePackageClasses = AutoAppConfig.class, excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig { @Bean("discountPolicy") DiscountPolicy fixDiscountPolicy() { return new FixDiscountPolicy(); } }상기 코드와 같은 방법으로 진행한다는 말씀일까요..?
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
강사님 질문 있습니다!
항상 이 부분에서 이해가 안되서 답답한 마음을 안고 지내고 있습니다 🥲구문 1.Reportable factoryCam = FactoryCam();구문 2.FactoryCam factoryCam = FactoryCam(); 구문 1과 구문 2의 차이점이 무엇인지 알 수 있을까요? 기능적인 부분은 이해했습니다. 구문 1의 경우, FactoryCam 이 Reportable 인터페이스를 상속받았으니, Reportable 로 참조를 해서 접근할 수 있다.. 라고는 이해를 했는데요.저 두 개가 달라지는 것에 대한 개념을 좀 설명 부탁드려도 괜찮을까요?제가 어렴풋이 이해하는 개념은 접근 경로 같은 개념인데, 이게 맞을까요?
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
Thread 강의 질문
안녕하세요,Thread 강의 따라서 코드작성후 cleanThread.start를 실행했을때 출력이 나도코딩님과 다르게 나와서 질문드립니다.Thread가 들어가긴 한거 같은데 동시에 cleanThread.run 한것처럼 직원분과 사장님이 따로 청소를 합니다.(하지만 run과 다르게 직원분이 아닌 사장님이 먼저 청소를 하고 직원분이 청소를 함)밑에 출력결과 첨부합니다! -- 사장 청소 시작 --(사장)1번방 청소 중(사장)3번방 청소 중(사장)5번방 청소 중(사장)7번방 청소 중(사장)9번방 청소 중-- 사장 청소 끝 ---- 직원 청소 시작 (Thread) --(직원)2번방 청소 중(직원)4번방 청소 중(직원)6번방 청소 중(직원)8번방 청소 중(직원)10번방 청소 중-- 직원 청소 끝 (Thread) --
-
미해결Java TPC (생각하고, 표현하고, 코딩하고)
강사님 추상메소드에서 전달하는 매개변수도 재정의 할때 반드시 구현하는건가요?
JDBC 예시를 듣고있는데 getConnection 내부에 있는 매개변수들도 반드시 자식 클래스의 재정의된 메서드에서 저 매개변수의 타입와 개수를 동일하게 해줘야 하는건가요?
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
접근 제어자(전반전) 강의 내용 질문
ctrl +c / ctrl+ r 으로 문자 치환하는 부분 입력이 안됩니다. ctrl + r 눌러도 아무것도 실행이 안되는데 뭐가 문제일까요..
-
미해결아무것도 모르고 시작하는 C#
form에 비트맵 이미지 추가
안녕하세요초보 수강생입니다..!저는 비트맵 이미지를 추가하려고 하는데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); } } }
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
제네릭스 질문이있습니다.
기존에 제네릭스를 사용하기 위해Wrapper클래스를 사용하여 Integer, Double과 같이 정의한 뒤에 사용했었는데 현 강의에서는 public static <T, V> void orderCoffee(T name, V coffee){ System.out.println(coffee + " 준비 완료 : "+name); }이와같이 선언 한뒤orderCoffee(27, "라떼")와 같이 호출을 하는데 Wrapp를 사용해주어야하는 경우와 아닌 경우가 구분이 잘 가지 않습니다...
-
미해결Java TPC (생각하고, 표현하고, 코딩하고)
강사님 abstract 부분 궁금한점 있습니다!!
abstract 메서드를 포함한 부모클래스는단독적으로 사용이 불가능 하다고 하셨는데예시로 보여주신 것처럼move라는 일반 메서드가 있어도Animal ani = new Animal();ani.move(); 라고도 사용이 불가능한건가요??
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
퀴즈 #10 질문이요~~
강의 잘 듣고 있습니다! 이것저것 해보다가 궁금한게 생겼어요. 19번째 줄이 실행되는 순간 customerList의 fee 값이 바뀌어야 하는거 아닌가요? 20번째 줄을 안쓸때는 아래처럼 fee값이 안바뀐채로 출력되는데 챈 50 0 레 45 0 모 40 0 벤 20 0 제 10 020번째 줄을 쓰니까 이렇게 나오는 이유가 궁금합니다!챈 50 2000 레 45 2000 모 40 2000 벤 20 0 제 10 0
-
미해결스프링 핵심 원리 - 기본편
싱글톤 스코프와 Test 시 .class 역할에 대해
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.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 이 붙는다고 생각을 해도 되는 걸까요 ?
-
미해결홍정모의 게임 만들기 연습 문제 패키지
15:00 부근 질문 있습니다.
#pragma once #include "Game2D.h" namespace jm { class MyTank { public: vec2 center = vec2(0.0f, 0.0f); //vec2 direction = vec2(1.0f, 0.0f, 0.0f); void draw() { beginTransformation(); { translate(center); drawFilledBox(Colors::green, 0.25f, 0.1f); // body translate(-0.02f, 0.1f); drawFilledBox(Colors::blue, 0.15f, 0.09f); // turret translate(0.15f, 0.0f); drawFilledBox(Colors::red, 0.15f, 0.03f); // barrel } endTransformation(); } }; class MyBullet { public: vec2 center = vec2(0.0f, 0.0f); vec2 velocity = vec2(0.0f, 0.0f); void draw() { beginTransformation(); translate(center); drawFilledRegularConvexPolygon(Colors::yellow, 0.02f, 8); drawWiredRegularConvexPolygon(Colors::gray, 0.02f, 8); endTransformation(); } void update(const float& dt) { center += velocity * dt; } }; class TankExample : public Game2D { public: MyTank tank; //MyBullet* bullet = nullptr; //MyBullet* bullet2 = nullptr; // bullet은 총알이 발사됐을 때만 존재하기 때문에 포인터로 되어있고 nullptr로 초기화가 되어있다. //TODO: allow multiple bullets int index = 0; std::vector<MyBullet*> ptr_bullet_array = { nullptr }; //TODO: delete bullets when they go out of the screen public: TankExample() : Game2D("This is my digital canvas!", 1024, 768, false, 2) {} ~TankExample() { //if (bullet != nullptr) delete bullet; //if (bullet2 != nullptr) delete bullet2; for (int i = 0; i <= index; ++i) { if (ptr_bullet_array[i] != nullptr) delete ptr_bullet_array[i]; } } void update() override { // move tank if (isKeyPressed(GLFW_KEY_LEFT)) tank.center.x -= 0.5f * getTimeStep(); if (isKeyPressed(GLFW_KEY_RIGHT)) tank.center.x += 0.5f * getTimeStep(); if (isKeyPressed(GLFW_KEY_UP)) tank.center.y += 0.5f * getTimeStep(); if (isKeyPressed(GLFW_KEY_DOWN)) tank.center.y -= 0.5f * getTimeStep(); // shoot a cannon ball if (isKeyPressedAndReleased(GLFW_KEY_SPACE)) { //if (bullet == nullptr) //{ // bullet = new MyBullet; // bullet->center = tank.center; // bullet->center.x += 0.2f; // bullet->center.y += 0.1f; // bullet->velocity = vec2(2.0f, 0.0f); //} //else if (bullet2 == nullptr) //{ // bullet2 = new MyBullet; // bullet2->center = tank.center; // bullet2->center.x += 0.2f; // bullet2->center.y += 0.1f; // bullet2->velocity = vec2(2.0f, 0.0f); //} ptr_bullet_array.push_back(nullptr); ptr_bullet_array[index] = new MyBullet; ptr_bullet_array[index]->center = tank.center; ptr_bullet_array[index]->center.x += 0.2f; ptr_bullet_array[index]->center.y += 0.1f; ptr_bullet_array[index]->velocity = vec2(2.0f, 0.0f); index++; } //if (bullet != nullptr) bullet->update(getTimeStep()); //if (bullet2 != nullptr) bullet2->update(getTimeStep()); // rendering tank.draw(); //if (bullet != nullptr) //{ // bullet->draw(); //} //if (bullet2 != nullptr) //{ // bullet2->draw(); //} //if (bullet != nullptr && bullet->center.x > 1.2f) //{ // delete bullet; // bullet = nullptr; //} //if (bullet2 != nullptr && bullet2->center.x > 1.2f) //{ // delete bullet2; // bullet2 = nullptr; //} //for (int i = 0; i <= index; ++i) //{ // if (ptr_bullet_array[i] != nullptr && ptr_bullet_array[i]->center.x > 1.2f) // { // delete ptr_bullet_array[i]; // ptr_bullet_array[i] = nullptr; // } //} for (int i = 0; i <= index; ++i) { if (ptr_bullet_array[i] != nullptr) { ptr_bullet_array[i]->update(getTimeStep()); ptr_bullet_array[i]->draw(); if (ptr_bullet_array[i]->center.x > 1.2f) { delete ptr_bullet_array[i]; ptr_bullet_array[i] = nullptr; } } } } }; }교수님께서 설명하신 대로 연습문제를 풀어봤고 문제없이 잘 실행되는 거 같긴 한데 메모리 누수가 해결됐는지 잘 모르겠습니다. 연습문제를 풀기 전에 디버깅 모드로 봐도 CPU 사용량이 그대로인데 어디서 어떻게 확인할 수 있을까요?
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
chap_07 Getter, setter code 사용
getter, setter를 직접 코드를 안치고 기능을 사용하여 code ->generate -> getter, setter 이용하시는데 저는 이거밖에 뜨지 않네요..constructor to spring() override Methods test copyright
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
return의 의미에 대하여
안녕하세요 공부하다가 이해안되는 부분이 있어서 이렇게 질문합니다.44번 문장에서는 return을 사용하는데47번 문장에서는 왜 return을 사용하지 않나요?그리고 this. 이 부분은 어떻게 사용하고 왜 사용하나요? 그냥 this 빼고 사용하면 안되나요?
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
계속 오류 발생...
클래스의 this 강의를 듣고 있는데 여기서 계속 오류가 나는데 이유를 모르겠습니다 ㅠㅠㅠ
-
미해결스프링 핵심 원리 - 기본편
coreApplication 실행시 자동 종료
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.<CoreAppliction 실행 모습><build.gradle 모습>CoreApplication을 실행하면 강사님과 다르게 출력이 되고 스프링도 제가 종료하지 않아도 자동적으로 종료가 됩니다. build.gradle에 혹시 제가 잘못 추가한 부분이 있을까요??
-
미해결스프링 핵심 원리 - 기본편
@Autowired 필드 명만 빈 이름으로 변경
조회 대상 빈이 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); } 코드가 잘 작동되긴한데 이게 강사님이 말씀하신 방법이 맞는지 의문이 들더군요...ㅠㅠ답변 주시면 정말 감사하겠습니다.
-
해결됨스프링 핵심 원리 - 기본편
@Controller에서 @Component
@Controller 어노테이션엔 @Component가 있어 컴포넌트 스캔대상이 되고 스프링 빈에 등록되는 것으로 아는데컨트롤러 클래스가 스프링 빈 등록된다 해도 쓸데가 있나요? 언제 쓰이는건가요?
-
해결됨스프링 핵심 원리 - 기본편
프록시 객체는 싱글톤인가요?
다른 분들의 질문을 읽어보던중에, 같은 질문에 다른 답변이 달려있는게 있어서 여쭤봅니다."프록시 객체는 각 HTTP 요청마다 생성되는가?" 라는 질문에https://www.inflearn.com/questions/618437 는'각 요청마다 생성된다' 라고 답해져있고https://www.inflearn.com/questions/348888 는'프록시 객체는 한번만 생성된다'(맨밑에 있습니다) 라고 답해져있는데, 뭐가 맞는건가요?그리고, 강의 교안 <9.빈 스코프>의 마지막 페이지(32페이지)에 보면 '마치 싱글톤을 사용하는 것 같지만 다르게 동작하기 때문에 결국에 주의해서 사용해야한다.' 라는 말이 있는데요. 이 말에 대해서 좀 더 설명을 해주셨으면 좋겠습니다. 만약 프록시 객체가 한번만 생성된다면, 그게 싱글톤으로 등록된 것이나 마찬가지인데, 왜 "싱글톤을 사용하는 것 같지만 다르게 동작"하는지 잘 모르겠습니다.
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
final 질문드리겠습니다.
public final String lens;선언과 동시에 값을 초기화 하지 않고 선언만 한뒤public ActionCam(){lens ="광각렌즈"}기본생성자 내에서 이와같이 초기화 하는 케이스 있다고 설명해주셨습니다. 근데 기본생성자가 아닌 매개변수를 가지고 있는 생성자내에서public void ActionCam2(String name){lengs = "테스트"}와같이 선언한 경우는 lens 변수는 정의할수없다고 에러메시지가 뜨는데 기본생성자는 가능하고 매개변수가 있는 메소드는 불가능한 이유가 궁금합니다.