묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
getBean 반환값
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]스프링 컨테이너에있는 스프링 빈 저장소에는 AppConfig에 있던 메소드 이름을 빈 이름으로 사용하고 빈 객체에는 return에 적혀있는 객체를 저장하는 걸로 이해했습니다. 강의 당시 AppConfig에 DiscountPolicy에는 RateDiscountPolicy의 객체가 return되게 되어있는데 상속에 관한 spring bean조회를 할 때ac.getBean("fixDiscountPolicy, DiscountPolicy.class)를 하면 FixDiscountPolicy 타입의 객체가 반환이 됩니다. 스프링 빈에 올라가는 것들은 AppConfig에 있는 정보로 올라가는 것 외에도 다른 방식으로도 올라가는 것처럼 보이는데 이 부분에 대해 설명해주시면 감사하겠습니다.
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
Chap7 퀴즈
안녕하세요! 7강 마무리 퀴즈를 스스로 풀어보며 의문점이 생겨 질문 남깁니다.저는 이런식으로 name 변수를 선언하고 cook() 메소드에 this.name을 활용했는데, 강의에선 기본 생성자와 name을 매개변수로 하는 생성자를 정의하고 풀어 주셨더라구요! 결과는 같게 나오지만 혹시 생성자를 사용하는게 더 좋은 코딩 방법인지, 제가 한 방식이 결과는 맞지만 논리적 오류가 있는지 궁금합니다.그리고 강의 잘 듣고 있습니다. 감사합니다!
-
미해결스프링 핵심 원리 - 기본편
@Configuration 에 대한 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.[질문 내용]@Configuration을 사용하면 우측에 있는 빈들끼리의 의존관계를 스프링 컨테이너가 설정해주어 빈 이름이 같은 경우 같은 빈 객체를 호출하지만 @Configuration을 사용하지 않으면 스프링 컨테이너가 의존관계를 직접적으로 설정해주진 않아 memberServiceImpl 로 호출하는 memoryMemberRe~와 memberRepo~로 호출하는 memoryMemberRe~가 다른걸까요??
-
미해결자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 2(마스터편)
Generic 강의중 궁금한점
GenericPrinter<P> powderPrinter = new GenericPrinter<>();powderPrinter.setMaterial(new Powder());System.out.println(powderPrinter);이렇게 출력하면 "재료는 Powder 입니다" 가 출력되는데(Powder class 안에 public String toString(){return "재료는Powder 입니다"} )문장에 의해서...출력된다고 하는데 왜 그런지 모르겠습니다.System.out.println(powderPrinter); 어떻게 Powder class 안에 public String toString() 호출하는지...모르겠습니다
-
미해결스프링 핵심 원리 - 기본편
인터페이스와 구현체 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.강의를 듣다가 갑자기 의문점이 들어서 질문올립니다.public interface DiscountPolicy { int discount(Member member, int price); } 이 코드는 인터페이스이고public class FixDiscountPolicy implements DiscountPolicy{ private int discountFixAmount = 1000; //1000원 할인 @Override public int discount(Member member, int price) { if(member.getGrade() == Grade.VIP) { return discountFixAmount; } else { return 0; } } } 이 코드는 구현체입니다.그런데 궁금한 점은private final DiscountPolicy discountPolicy = new FixDiscountPolicy();에서 discountFixAmount 변수를 사용할 수 있는 이유가 무엇인가요? 타입이 DiscountPolicy이기 때문에 인터페이스에는 없고 구현체에만 있는 메서드나 변수는 사용 할 수 없는거 아닌가요?
-
미해결스프링 핵심 원리 - 기본편
OrderServiceImpl 클래스 질문있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]클래스의 createOrder 메소드에서Member member = memberRepository.findById(memberId); 이 부분에서 왜 findById() 메소드가 사용가능한 건가요 클래스 내부에 private final MemberRepository memberRepository = new MemoryMemberRepository(); 가 있는거는 알겠는데 그러면 memberRepository의 맵에는 아무것도 없지않나요?질문이 좀 헷갈리긴하는데 createOrder 메소드가 지금 할인여부를 확인해서 Order 객체를 만들어서 리턴해주는데 지금 memberRepository.findById(memberId); 가 왜 그 여부를 확인 가능한 건지 이해가 안됩니다 지금 회원리스트가 클래스에 연결된 것도 아니고 그냥 클래스 내부에 private final MemberRepository memberRepository = new MemoryMemberRepository(); 만들어서 해당 변수 사용한건데 그러면 아무것도 없으니까 찾을 수 없는거 아닌가요?그러니까 OrderApp클래스 에서도MemberService memberService = new MemberServiceImpl();OrderService orderService = new OrderServiceImpl();Long memberId =1L;Member member = new Member(memberId,"memberA", Grade.VIP);memberService.join(member);Order order = orderService.createOrder(memberId,"itemA",10000);System.out.println("order= "+order);memberService변수에 멤버를 추가를 해줬는데 이 추가된 멤버의 자료자체가 memberService에 있으니까 이 멤버가 vip인지 아닌지알려면 createOrder메소드에 memberService를 넘겨줘서 뭔가 검사를 해야되는거 아닌가요 왜 제가 봤을땐 연결이 된 부분이 없는거 같은데 여부를 검사할 수 있는지 궁금합니다.
-
미해결[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
진도 관련 문의드립니다.
다트 강의를 다 듣고20%도 이해가 되지 않는 상태에서플러터 초급([코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!) 강의로 넘어가도 되는지 궁금합니다.1. 다트를 예제를 보지 않고 혼자서 코딩할 수 있는 수준까지 도달 후 초급 강의로 넘어가는 게 좋을지..2. 혼자서 코딩은 못해도 개념(원리) 정도만 이해하고 넘어가도 되는 건지 궁금합니다.답변 부탁드립니다.
-
해결됨스프링 핵심 원리 - 기본편
필드에 빨간색 오류가 뜨는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.[질문 내용]위의 코드에서 생성자를 설정해 주지 않으면 빨간색 오류가 뜨는데, memberRepository가 초기화되지 않아서라고 합니다. 여기서 궁금한 점이 필드만 있으면 생성자를 따로 코드로 쳐주지 않아도 자동으로 기본 생성자 설정을 해주지 않나요? 아래 사진에서는 example클래스에서 필드만 넣어줘도 빨간색 줄이 뜨지 않는데 ... 둘의 차이를 모르겠습니다.
-
미해결스프링 핵심 원리 - 기본편
xxxxxxxxImpl 네이밍 룰
[질문 내용]인터페이스를 구현한 구체 클래스가 하나인경우 xxxxxImpl이라는 네이밍을 관례적으로 사용한다고 하셨는데제가 생각했을때는 구현클래스가 하나일경우(기능확장이 필요없다고 판단될경우) 굳이 인터페이스를 만들 필요가 없을것같은데,1.인터페이스를 구현한 구체클래스가 하나인경우가 많은편인지? 혹은 어떤경우인지?2. 이 네이밍룰을 따른후 혹시 구현클래스가 하나더 생긴다면 네이밍을 수정하는지..?
-
해결됨스프링 핵심 원리 - 기본편
CannotLoadBeanClassException
스프링 빈 설정 메타 정보-BeanDefinition 강의 실습 중에 마지막에 xml 파일로 beanDefinition을 만들게 하니까 이런 오류가 뜨더군요그리고 이전에 만들었던xmlAppContext에서도 같은 오류가 발생했는데요 pdf파일의 예시 코드를 복붙해서 돌렸는데도 같은 오류가 나서질문 드립니다 org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [hello.core.member.MemberServiceImpl] for bean with name 'memberService' defined in class path resource [appConfig.xml]; nested exception is java.lang.ClassNotFoundException: hello.core.member.MemberServiceImplappConfig.xml<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="memberService" class="hello.core.member.MemberServiceImpl"> <constructor-arg name="memberRepository" ref="memberRepository"/> </bean> <bean id="memberRepository" class="hello.core.member.MemoryMemberRepository"/> <bean id="orderService" class="hello.core.order.OrderServiceImpl"> <constructor-arg name="memberRepository" ref="memberRepository"/> <constructor-arg name="discountPolicy" ref="discountPolicy"/> </bean> <bean id="discountPolicy" class="hello.core.discount.RateDiscountPolicy"/> </beans> MemberServiceImpl.java package member; public class MemberServiceImpl implements MemberService{ private final MemberRepository memberRepository; public MemberServiceImpl(MemberRepository memberRepository) { this.memberRepository = memberRepository; } @Override public void join(Member member) { memberRepository.save(member); } @Override public Member findMember(Long memberId) { return memberRepository.findById(memberId); } }
-
미해결스프링 핵심 원리 - 기본편
api vs 라이브러리 vs 프레임워크 제가 이해한게 맞을까요?
api: 사람과 컴퓨터 사이에 키보드라는 접점으로 소통하듯이 프로그램과 프로그램 사이는 api라는 접점,규약이 있어서 통신할 수 있고 api를 통해서 데이터나 라이브러리를 호출할 수 있다 라이브러리: 개발하면서 반복되는 코드들을 모아놓은 것 남이 만들어진 코드를 기반으로 개발을 할 수 있어서 생산성이 증가한다 라이브러리는 개발자가 능동적으로 호출할 수 있다프레임워크: 개발하면서 반복되는 코드들을 어떤 규칙에 맞게 쓸 수 있도록 환경을 구성해 놓은 것 라이브러리와 차이점은 개발자가 작성한 코드가 프레임워크에 의해 수동적으로 불려진다는 점이 차이점이다
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
생성자편에서 this.serialNumber 를 넣는이유
생성자편에 블랙박스 클래스에 this.serialNumber에 디스를 붙이는이유가 무엇인가요?그리고 인스턴스변수 int serialNumber; 생성하지않고 클래스변수static int counter = 0; 으로 바로생성해도 되지 않나요?
-
미해결스프링 핵심 원리 - 기본편
RequestURL 이 로그에서 일부 생략됩니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]강의 내용중에 http://localhost:8080/log-demo 이런식으로 로그가 남는데저같은 경우는 http://localhost:8080 부분이 생략된 채로 나옵니다.이런식으로요. 다른분이 작성한 글에도 저와 같은 내용인 것을 보긴했는데그분은 인텔리제이를 재실행하니 고쳐졌다고 하시는데저는 재실행 + 재부팅도 해봤는데 안되네요. 작동에는 문제가없는데 이부분만 그러네요.제 MyLogger 부분에 출력부분을 긁어왔습니다.@Component @Scope(value = "request") public class MyLogger { private String uuid; private String requestURL; public void setRequestURL(String requestURL) { this.requestURL = requestURL; } public void log(String message) { System.out.println("[" + uuid + "][" + requestURL + "] " + message); } @PostConstruct public void init() { uuid = UUID.randomUUID().toString(); System.out.println("[" + uuid + "] request scope bean create : " + this); } @PreDestroy public void close() { System.out.println("[" + uuid + "] request scope bean close : " + this); } }
-
해결됨스프링 핵심 원리 - 기본편
hashmap동시성 문제
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.[질문 내용]MemoryMemberRepository에 HashMap을 사용할 경우 동시성 문제가 발생할 수도 있다고 하셨는데, 여러 객체나 클래스에서 MemoryMemberRepository에 접근할 경우도 있으니까 그 문제를 언급해주셨던 걸까요? 어느 측면에서의 동시성 문제인지 궁금해서 질문남깁니다
-
미해결스프링 핵심 원리 - 기본편
DiscountPolicy 질문 있습니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]Member, Order와 다르게 왜 Discount만 Service 라는 명칭이 없는데요. 이 때 MemberService, OrderService 와 같은 Service 역할이지만 단순히 할인정책 이라는 설계 이름때문에 Service가 아닌 Policy로 붙인 건가요? 아니면 Discount 부분은 MemberService, OrderService와는 개념적으로 다른 건가요?
-
미해결Java/Spring 주니어 개발자를 위한 오답노트
Controller / application Service / Domain 의 역할 구분
안녕하세요 강의 잘 듣고 있습니다.헥사고날 아키텍쳐 부분 강의를 듣고, 궁금한 부분이 새겨서 질문 남깁니다!Application Service(이하 서비스) 에서 도메인부분을 분리 하여 객체의 상태 변화에 대한 부분을 처리하도록 하고, 서비스에선 Repository와 소통해서 필요한 객체나 컨트롤러에서 정보(예를 들어 수정 정보 등등) 등등을 얻어서 도메인 부분에 위임한다고 이해했습니다. 그렇게 도메인 영역을 분리하면 테스트에 용이하다는 것은 이해했습니다. 그런데 실제로 토이프로젝트에 적용해보려고 코드를 수정하는 중에 예를 들어 게시글을 수정하는 과정이라면 컨트롤러에서 처음 요청을 받을 때 postId, updateRequest를 받아서 서비스에 업데이트를 요청하고, 다시 서비스에선 아이디를 통해 Post를 찾고, PostDomainService(가칭)에 Post와서 updateRequest를 넘겨 수정한다면 거의 같은 내용의 파라미터를 굳이 2 계층을 건너 불필요한 위임이 반복 된다고 생각했습니다. 궁금한 것은 2가지 입니다.이런 경우엔 PostDomainService 클래스를 만들기보단 Post 객체 자체에서 업데이트를 처리하는 것이 맞을까요? - (1번 코드)도메인과 도메인 서비스의 차이는 객체의 상태(도메인)와 객체의 행동(도메인 서비스) 일까요? 엔티티와 도메인의 구분이 잘 이해가 되지 않습니다. //== 업데이트 로직 ==// public void updateInfo(PostUpdateReqDto updatePost) { this.title = updatePost.getTitle(); this.content = updatePost.getContent(); } // 기존 서비스에서의 로직 @Transactional public PostUpdateResDto updatePost(final Long postId, final PostUpdateReqDto postUpdateReqDto) { Post findPost = postRepository.findWithMemberByPostId(postId); Post updatedPost = postDomainService.updatePost(findPost, postUpdateReqDto); // 위 과정에 생기면 사라지는 메서드 // findPost.updateInfo(postUpdateReqDto); checkForbiddenWord(findPost); return new PostUpdateResDto(findPost); }
-
미해결스프링 핵심 원리 - 기본편
안녕하세요
안녕하세요 calculatePrice가 Order 도메인안에 있는 이유를다른분들이 질문하신 글의 답변을 보았는데[이 때 calculatePrice 가 여러곳에서 사용된다면 그 메서드마다 calculatePrice를 구하는 코드를 작성해야 할텐데요, 이후에 calculatePrice를 구하는 공식이 바뀌거나 한다면 수정하기 번거롭겠지요.] OrderService에 calculatePrice을 생성하고 new Order (memberId, itemName, itemPrice, discountPrice, caculatePrice)를 해서 주문을 생성해도 되지않나요?
-
해결됨스프링 핵심 원리 - 기본편
프로토타입 @PreDestroy 관련 질문드립니다!
1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 수업 막바지를 달리고있는데 PrototypeTest하는데서 질문이 생겼습니다Prototype으로 테스트를할때 close를 해도 아무결과가 나오지않는거면 @Predestroy는 없어도 상관이없는걸까요? 그리고 관리는 클라이언트가 어떻게 하는건지도 궁금합니다!
-
미해결스프링 핵심 원리 - 기본편
final 키워드 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. MemberServiceImpl와 OrderServiceImpl에서 private final로 만들게 되는 것 같은데 final을 붙여야하는 이유가 궁금합니다. final을 붙일때와 붙이지 않았을때의 차이...?
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
인텔리제이 실행 관련 문의드립니다-!
안녕하세요 :)인텔리제이 실행 시 작업 중인 클래스( _03_Operator3)가 아닌 특정 클래스( _02_Operator2)가 실행이 되어 문의 드립니다.이것저것 건드리다 보니 실행 버튼 옆에 표시된 부분이 ( _02_Operator2) 로 설정되어있었고, 다시 이것저것 누르다 보니 해결이 되었습니다...!어쩌다 보니 문제 해결은 되었지만 원인과 해당 부분이 어떤 기능인 지 알 수 있으면 좋을 듯 해 문의 남깁니다.감사합니다 :)