묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
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이너클래스면 실행이 되고 그냥 이너클래스이면 안되는 이유가 뭔지궁금합니다.}
-
미해결스프링 핵심 원리 - 기본편
혹시 스프링 완전정복 로드맵의 마지막 강의인 스프링부트는 기존 스프링부트 로드맵의 강의와 무슨차이인가요?
관련글이 안보여서 질문남깁니다!
-
미해결스프링 핵심 원리 - 기본편
빈 등록 안 된 상태에서 @Autowired사용
강의 4:13초에 실행된 결과 값이 이해가 가지 않습니다. 저는 오류가 발생해야 된다고 생각합니다. 그 이유는 @Autowired가 생략된 것으로 @Autowired로 인해 의존 관계가 주입이 되어야 하는데 new AnnotationConfigApplicationContext(); 인자 속에 DiscountService.class만 존재합니다. 그러면 DiscountService생성자의 매개변수 타입이 빈 등록이 안 되어 있어 주입해 줄 타입의 빈이 존재하지 않아 오류가 발생해야 한다고 생각하는데 오류가 왜 안 나는 것인가요? 감사합니다.
-
미해결PHP 7+ 프로그래밍: 객체지향
모델 User 등에서 속성들을 protected 나 private 으로 설정하지 않는 이유가 있습니까?
강사님 강의 잘 듣고 있습니다~ ^^* 역시 후반부에 오니 핵심들이 꼭꼭 쌓여있습니다.앞에서 잘 설명해 주셨던 것들이 잘 조합되어서,저의 이해도도 많이 높아 졌습니다. 그런데 궁금한게 User 클래스와 같은 Model을 만드실때,속성을 protected 나 private으로 미리 선언하지 않고모델의 메서드 내에서 매직메서드 __set() 을 통한 할당을 함으로써,public 접근이 가능하게 됩니다. 강의에서 말씀하셨듯이 VO나 DTO에 대한 언급을 하지 않는 이유는 이해가 갑니다만,뷰 등에서 모델의 객체(vo)가 수정되지 않을 것을보장(immutable)해 주는 것은 중요하지 않습니까? 혹시 별다른 이유가 있는지 궁금해서 질문드립니다. MVC 아키텍처에서 VO가 중요한 이유는VO가 변하지 않음을 보장하는 것이라고 생각하거든요~^^ 강사님의 다음 라라벨 강의도 기대되네요~ ^^*
-
미해결스프링 핵심 원리 - 기본편
MemberServiceImpl와 MemoryMemberRepository의 메소드 질문있습니다!
MemberServiceImpl의 join과 findMember메소드는결과적으로 memberRepository의 save와 findById를 수행하는것을 알수있는데요여기서 MemberServiceImpl 내부에서 store변수를 만들어서 join과 findMember를 직접 구현해 사용해도 되는데 굳이 MemoryMemberRepository를 만들어서 한번더 클래스를 만들어주는 이유가있나요?제가 이유를 생각해볼때에는 코드의 대한 가독성과 전체 구조의 분리를 위해 서비스와 리포지토리를 분리하는것으로 짐작하고있는데 이것외의 큰이유가 있는지 궁금합니다!
-
미해결스프링 핵심 원리 - 기본편
"스프링 DB 1,2편"과, "스프링 부트와 JPA 실무 완전 정복 로드맵"은 어떤 차이가 있고 어떤 걸 먼저 접하는 게 좋을까요?
제목이내용입니다. 레거시 프로젝트 경력이 있는 편이라 쿼리는 좀 아는데 JPA는 전혀 접해보지 못해 JPA를 최대한 빨리 학습하고 싶습니다. MVC 1,2편을 빨리 끝내고 JPA 로드맵을 바로 수강하는 것이 유리할까요?
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
코틀린으로 엔티티 작성
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의의 내용과 질문이 관계 없을수도 있지만 정답이 있는 부분이 아닌 것 같아 너무 궁금해서 남겨봅니다.. ㅠ 강의중에 코틀린을 사용할 때 되도록 불변으로 만드는 것이 좋다고 하셔서 User 엔티티를 이런식으로 작성했습니다. 이렇게 되면 유저의 필드를 변경하고 싶을 때 새로운 User 객체를 만들어야 합니다. 그래서 User 엔티티 안에 이런 메서드를 작성했습니다. 두 번째 방법으로 private set을 사용해서 setter만 막고 updateName 함수를 만들어줬습니다. 세 번째로 프로퍼티를 아예 private으로 설정하고 getter와 updateName 함수를 만들어줬습니다. 네 번째는 그냥 var로 만들어 기본 생성되는 getter와 setter를 사용한다 입니다. 정답이 있는 문제는 아니지만 저는 2, 3번이 좋은 방법이라는 생각이 듭니다. 그런데 자바의 저런 보일러 플레이트 코드들을 줄일 수 있는 것이 코틀린의 장점중 하나인데, 저렇게 사용하면 무슨 소용이 있나 싶기도 합니다. 그러다보니 코틀린은 getter, setter를 사용하는 것을 권장하게 설계되어있나? 라는 생각이 듭니다. 1번이나 4번 처럼 사용하는 것이 좀 더 코틀린스러운 개발 방법일까요?
-
해결됨스프링 핵심 원리 - 기본편
ApplicationContext 컨테이너에 대해 질문 있습니다.
지금 ApplicationContext컨테이너를 만든 이유가 AppConfig클래스에 있는 함수들을 컨테이너에 집어 넣기 위해 만든거라고 보면 될까요? ApplicationContext컨테이너의 위치를 어디에 설정하면 좋을까요?
-
미해결스프링 핵심 원리 - 기본편
assertThat이 안됩니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 구글링 하면서 assert 관련 import를 전부 지워도 보고, 새로운 구문을 추가해보기도 했지만 Assertions를 입력하면 junit관련된 친구만 나오고 assertj와 관련된 친구는 전혀 나오지 않습니다.
-
해결됨스프링 핵심 원리 - 기본편
안녕하세요 구체화와 추상화 구조에 대해 질문 있습니다.
추상화는 인터페이스 구체화는 인터페이스를 구현한 클래스, 구현 객체 라고 이해했습니다. 그러면 항상 인터페이스를 만든 후 인터페이스에 여러 기능을 설계하고 그리고 나서 구체화한 클래스들은 그 인터페이스 기능을 사용하기만 하면 되는 이러한 구조를 만들면 되는건가요?
-
해결됨스프링 핵심 원리 - 기본편
다양한 설정 형식 지원 - 자바 코드, XML 부분에서 질문 있습니다.
강의에 나온 대로 xml 파일을 만들고 코드도 그대로 붙여넣었는데 사진처럼 memberRepository에 빨간색 오류가 뜹니다. 무엇이 문제인건가요?
-
해결됨스프링 핵심 원리 - 기본편
빈 관련 에러
안녕하세요, org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'hello.core.order.OrderServiceImpl' available 에러가 발생하였습니다. ac.get을 어떻게 수정해야할까요 ㅜ
-
해결됨스프링 핵심 원리 - 기본편
Assertion 질문
Assertion 이전에 assertj로 사용을 한 이후에 바로 주피터 것을 사용하려고 했는데 저는 주피터꺼 임폴트해서 엔터 눌렀음에도 불구하고 교수님처럼 org.junit.jupiter.api.Assertions로 변경이 안됩니다.. 왜 그런지 알 수 있을까요!? 아래와 같이 뜹니다..
-
해결됨스프링 핵심 원리 - 기본편
에러,AssertThat
AssertThat 부분 에러가 왜 나는 것일까요.. ㅠ 혹시몰라 import 때문인 줄 알고 import static org,assertj.core.api.Assertions.*; 를 추가하였으나 자동 주석처리 됩니다,,