묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
너무 기본적인 질문인 것 같은데...
인스턴스라는 게 정확히 뭐죠..?기본적인 java지식이 있으나 너무 기본적이라 그런지..답변주시면 감사드리겠습니다 ㅠㅠ
-
미해결스프링 핵심 원리 - 기본편
이름에 궁금한 게 있어요
Appconfig.class라고 해줄 때,.class의 의미는 무엇인가요?class를 호출하겠다는 의미일까요? :)
-
미해결스프링 핵심 원리 - 기본편
ApplicationContext(), AnnotationConfigApplicationContext() 차이
둘의 차이는 ApplicationContext가 상위 인터페이스라 기능이 적어서 AnnotationConfigApplicationContext()를 쓴다고 알고있는데 어차피이거나ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);이거나AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);결국 둘 다 new로 AnnotationConfigApplicationContext()를 구현해 줬으니 똑같은 기능을 사용할 수 있는 것 아닌가요?왜 ApplicationContext를 사용하면 getBeanDefinition()메소드를 이용할 수 없는 것이죠?
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
array,plus(...) 에 대한 질문입니다 ㅎ
안녕하세요 좋은강의 감사합니다.제가 잘못한건지, array.plus(300)후 foreach 를 활용해 프린트를하여도 300이라는 값은 안나오더라구요..plus 확장함수를 살펴보니 새로운 객체를 copy 하여 return 해주던데,새로운 객체로 return 받아서 활용해야하지 않나요?예를 들어 val newArray = array.plus(300) 이런식으로요제가 잘못 생각한 것인지..ㅜㅜ별거아닌거 같긴한데 확인가능하실까요 ㅎ
-
미해결스프링 핵심 원리 - 기본편
섹션3 - 새로운 할인정책 개발에서 테스트 코드 작성 중.
섹션 3 - 새로운 할인정책 개발 강의에서 test 코드에서RateDiscountPolicy discountPolicy = new RateDiscountPolicy();관련하여 질문 있습니다. Q1.다른 test 코드에서는 자료형에 인터페이스 명을 적어서 선언했는데이번엔 구현체 명을 적어서 선언한 이유가 있나요 ? Q2.그렇지 않다면, 인터페이스 명으로 자료형을 선언할 때와 구현체 명을 선언할 때차이점과 어떠한 상황에서 선언이 되어야 하는지 궁금합니다 !
-
미해결스프링 핵심 원리 - 기본편
주문 서비스를 변경하지 않아도 된다라고 하는데요
주문과 할인 도메인 설계 강의 8:00 부터입니다.회원을 메모리가 아닌 실제 DB에서 조회하고, 정률 할인 정책을 지원해도 주문 서비스를 변경하지 않아도 된다고 하시는데 이전 강의 중 회원 도메인 설계에서 문제점으로 OCP, DIP 전부 다 위반한다고 하셨습니다. 이렇게 위반을 하니까 스프링을 사용해야 하는 것 같고요. 이 강의도 마찬가지로, OrderServiceImpl에서 private final MemberRepository memberRepository = new MemoryMemberRepository(); 를 사용함으로써 '회원을 메모리가 아닌 실제 DB에서 조회'하면 OrderServiceImpl 파일의 내용도 변경되어야 한다고 생각합니다. '회원을 메모리가 아닌 실제 DB에서 조회하고, 정률 할인 정책을 지원해도 주문 서비스를 변경하지 않아도 된다' 틀린 말 아닌가요?
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
enum, sealed과 when
안녕하세요! 강의 잘 보고 있습니다!enum과 sealed를 when과 함께 쓰는 부분을 보고 궁금증이 생겨 질문드립니다!제가 느끼기에 when 문은 자바의 switch문과 유사하다고 생각이 들어요. switch문이나 if-else 같은 경우 많이 사용하면 유지보수 측면에서도 힘들고 안 좋다는 의견을 많이 들었어요. 그래서 enum 각 내부 필드가 로직을 가지게 하여 if-else를 없애거나, 팩토리를 만들어 switch문을 최소화하거나 하는식으로 구현한다고 알고 있습니다. 이런 측면에서 if-else나 switch는 많이 쓰지 않는게 좋은 것 같은데 when은 조금 다르게 봐야하는건지 궁금합니다. 실제로도 when을 많이 사용하나요?
-
미해결스프링 핵심 원리 - 기본편
테스트코드 작성시 메소드
MemberServiceTest 코드를 작성할 때 영한님 코드를 보면 join 메소드를 default로 선언하시고 실행하고 정상적으로 테스트에 성공하셨습니다. 하지만 제 환경에서는 에러가 발생하네요 해당 에러코드를 확인 후 join 메소드를 public으로 선언하니 정상적으로 테스트에 성공했습니다.제가 아직 JUnit에 대한 이해가 충분하지 않지만 혹시 어떤 원인 때문에 package-private 메소드인 join에 접근하지 못하는지 궁금합니다. 혹은 어떤 키워드로 검색해보면 좀 도움이 될까요?감사합니다.
-
미해결스프링 핵심 원리 - 기본편
강의 5분에 맵에 키값이 어떻게 할당되는건지 이해가 되지 않습니다.
강의 5:00~ 보시면 맵에 키값에 fixDiscountPolicy가 들어가는데 어떻게 할당되는건지 이해가 되지 않습니다. ㅠㅠ
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
리턴 값 생략에 대하여
안녕하세요 자바에서 코틀린으로 넘어가고 싶어 강의를 들으며 차근차근 공부중입니다.인텔리제이에서 option + command + v 단축키를 사용하면 바로 리턴 타입을 알 수 있어서 자바 개발을 할 때 자주 사용 했습니다. 하지만 코틀린은 기본적으로 타입의 명시가 생략되어 있어서 그런지 같은 단축키로 리턴타입이 나오지 않더라구요기존 자바의 경우"ABC".startsWith("A"); 에 option + command + v 를 사용하면boolean a = "ABC".startsWith("A"); 이렇게 startsWith()의 리턴 값이 boolean이라는 것을 알 수 있는데코틀린의 경우val startsWith = "ABC".startsWith("A") 이렇게 나옵니다.제 생각에는val startsWith: Boolean = "ABC".startsWith("A")이런식으로 나와야 할 것 같은데 말이죠물론 메서드에 마우스를 올리면 리턴 타입을 알 수 있지만자바 개발하면서 익숙해진 단축키라 코틀린에서도 유용하게 활용할 수 있는지 궁금합니다.그리고 실무에서 개발 할 때에도 리턴타입이 없다면 많이 불편할 것 같은데 아직 자바에서 벗어나지 못해하는 걱정인걸까요...?
-
미해결스프링 핵심 원리 - 기본편
MemberApp 실행
회원 도메인 실행과 테스트 부분에서 MemberApp 클래스에 public static void main(String args[]) 를 만들고 여기서 실행하는 것은 이해했습니다.그런데 기존의 CoreApplication 에도 메인 메서드가 있어서 프로젝트에 메인 메서드가 2개이고 이렇게 프로젝트가 구성이 되어도 실행하는데 문제가 없는건가요??
-
미해결스프링 핵심 원리 - 기본편
프로토타입 빈 질문
싱글톤의 경우, 요청이 올 때 마다 객체를 생성하는 것이 아니라, 이미 만들어진 객체를 공유해서 사용할 수 있다라고 이해했습니다. 그러면 프로토타입의 경우, 스프링 컨테이너에 빈의 이름과 빈이 등록이 되고 나서 빈 객체는 생성이 되지 않고 그냥 빈 자체만 등록이 되는 것인가요? 그리고 요청이 들어오면 그때서야 빈 객체를 새로 만들어주는 것이 맞나요?
-
미해결스프링 핵심 원리 - 기본편
memoryRepository 3개가 다릅니다
-
미해결스프링 핵심 원리 - 기본편
6:10초에 객체를 생성할 떄 앞에 private final 해주는 이유가 무엇인가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]6:10초에 MemberRepository memberRepository = new MemoryMemberRepository(); 객체와 할인 객체를 생성할 떄 앞에 private final 해주는 이유가 무엇인가요? private final 안 쳐도 잘 되는데 저걸 쳐 주는 이유가 있나요? 앞 강의에서 MemberServiceImpl에서는 해 주고 뒷 강의에서 MemberApp과 OrderApp에서는 private final을 안 해주던데 하는 것과 안하는 것이 무슨 차이인지, 왜 필요한지 궁금합니다.
-
미해결스프링 핵심 원리 - 기본편
isinstanceof 관련
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의내용 2분33초에서 findBeanByName() 메서드의 assertThat ~ isInstanceof 문장이 이해가 잘 안됩니다. 저는 AppConfig.class 에서 memberService가 MemberServiceImpl을 포함하므로 memberService와 MemberServiceImpl.class의 위치가 서로 반대라고 생각했는데 예상과 다르네요.
-
미해결스프링 핵심 원리 - 기본편
@Configuration을 사용한 싱글톤
안녕하세요! 김영한님과 서포터즈님들 항상 좋은 강의와 질문답변 감사합니다! :) 강의를 듣고 관련된 질문들을 찾아보면서 궁금한게 있는데요, @Configuration을 사용하면 스프링 컨테이너에서 해당 인스턴스가 존재하는지를 확인하고 있으면 인스턴스 반환, 없으면 생성하는 기능으로 싱글톤이 보장된다는것을 알겠습니다. @Congfiguration 없이는 싱글톤 보장이 안된다고하셨는데 https://www.inflearn.com/questions/288987 의 질문답변을 보면 @Congfiguration의 유무에 관계 없이 싱글톤으로 유지된다는 답변을 봐서 뭐가 맞는건지 궁금해서 질문드립니다. 그리고 @Configuration 없이 생성된 memberRepository 세개의 인스턴스들에 대해서 @Bean이 붙은 memberRepository객체는 스프링이 관리해주는 스프링 빈이고 나머지 MemberServiceImpl, OrderServiceImpl 의 memberRepository는 스프링 빈이 아닌거죠? 감사합니다~
-
미해결스프링 핵심 원리 - 기본편
프록시 관련 질문
10:55초 에서 MyLogger가 요청마다 각각 따로 생성 된다고 하셨는데 프록시 객체가 HTTP요청 마다 각각 따로 생성된다는 말씀이신가요? 그리고 실제 MyLogger는 실제 메서드가 사용 될 때 호출된다고 하셨는데 이게 MyLogger의 실제 기능(메서드)를 사용할 때 프록시객체와의 상속관계를 끊어버리는건가요? ( 가짜를 쓸 때도 진짜 MyLogger를 가리키고 있으나 그 땐 상속관계에 있는 프록시 객체로 오버라이딩 )
-
미해결스프링 핵심 원리 - 기본편
빈 생명주기가 쓰이는 곳
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 영한 님이 그동안 설명해주신 것으로는 가급적이면 생성자 주입을 선택하라고 하셨는데, 빈 생명주기 콜백은 생성자 주입을 제외한 setter 주입 등에서 활용되는데 알아야 하나? (물론 중요하겠지만) 싶은 생각이 들어 질문드려 봅니다..! 예제에서의 예시처럼 데이터베이스 커넥션 풀 같은 과정은 생성자 주입으로는 할 수 없어서인 것일까요?
-
미해결스프링 핵심 원리 - 기본편
AppConfig.class에서 빈을 등록하는 메서드가 static 메서드일 때.
AppConfig.class 파일에서 @Bean이 붙는 메서드들을 static메서드로 설정했을 때도 싱글톤을 보장해주지 않는 것 같은데 왜 그런것일까요? 스프링 프레임워크 내부적으로 일반 메서드를 호출하는 것만 구현이 되서 그런것일까요?
-
미해결스프링 핵심 원리 - 기본편
이너 static class
package hello.core.beanfind;import hello.core.AppConfig;import hello.core.repository.MemberRepository;import hello.core.repository.MemoryMemberRepository;import hello.core.service.MemberService;import org.junit.jupiter.api.Assertions;import org.junit.jupiter.api.DisplayName;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.NoUniqueBeanDefinitionException;import org.springframework.beans.factory.UnsatisfiedDependencyException;import org.springframework.context.annotation.AnnotationConfigApplicationContext;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import static org.junit.jupiter.api.Assertions.*;public class ApplicationContextSameBeanFindTest { AnnotationConfigApplicationContext ac=new AnnotationConfigApplicationContext(SameBeanConfig.class); @Test @DisplayName("타입으로 조회시 같은 타입이 둘 이상 있으면, 중복 오류가 발생한다") void findBeanByTypeDuplicate() { //DiscountPolicy bean = ac.getBean(MemberRepository.class); assertThrows(NoUniqueBeanDefinitionException.class, () -> ac.getBean(MemberRepository.class)); } @Configuration static class SameBeanConfig{ @Bean public MemberRepository memberRepository(){ return new MemoryMemberRepository(); } @Bean public MemberRepository memberRepository2(){ return new MemoryMemberRepository(); } }이 코드에서 static이너클래스면 실행이 되고 그냥 이너클래스이면 안되는 이유가 뭔지궁금합니다.}