묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
참조 강의 중 질문
changeName(c2); System.out.println(c1.name); System.out.println(c2.name); public static void changeName(Camera camera) { camera.name = "잘못된 카메라";안녕하세요 참조 강의 중 앞부분은 다 이해가 갔는데 위 코드가 등장하는 순간부터 이해가 잘 가지 않아서 질문을 드립니다.1. 우선 아랫 부분 코드가 이해가 잘 가지 않습니다. changeName 이라는 메소드의 매개변수에 (Camera camera)가 들어간 것에 대한 의미를 잘 모르겠습니다.changeName(c2)를 통해서, c2가 참조하는 첫번째 Camera()의 이름을 바꿨는데,Camera camera는 무슨 의미로 작성하신 건지 잘 이해가 가지 않습니다..2.camera.name도 잘 이해가 가지 않습니다. 코드에서 camera라는 객체나 메소드가 보이지 않는데 왜 camera.name의 의미는 camera의 이름을 바꾸는 것인데, 제가 볼 땐 camera라는 메소드 또는 객체가 보이지 않는데 왜 강사님께서 이렇게 작성을 하신건지 잘 모르겠습니다..ㅠchangeName(c2); System.out.println(c1.name); System.out.println(c2.name);이렇게 봤을 때는 이해가 잘 가는데요.. ㅠㅠ
-
미해결스프링 핵심 원리 - 기본편
lombok 또는 직접 생성한 생성자가 2개 이상일 경우 Autowired
Lombok의 @RequiredArgsConstructor 등을 사용해서 생성자를 하나만 만들었을 경우에는 생성자가 하나이므로 @Autowired를 생략해도 @Autowired가 적용된다고 이해하였습니다.그런데 Lombok이나 직접 생성자를 추가로 생성해서 생성자가 2개 이상일 경우 Lombok으로 만든 생성자에는 @Autowired 어노테이션을 어떻게 달아주어야하나요?감사합니다.
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
콘솔에서 한글 꺠짐문제는 어떻게 해아하나요?
인텔리제이 콘솔창 한글 깨지는 문제 어떻게 해결하셨나요? 구글에 나온대로 설정 들어가서 UTF-8로 다 바꾸는것도 해보고 vm들어가서 추가하는것도 해봤는데 해도 안되네요 구지 한글로 안해도 되긴하는데 먼가 그냥 뒤에서 콘솔창에 한글로 계속 쓰실것 같아서 해결어떻게 하셨나 궁금합니다!-Dfile.encoding=UTF-8 -Dconsole.encoding=UTF-8
-
미해결스프링 핵심 원리 - 기본편
생성자 주입 방식으로 스프링 빈을 전체 가져올 때 이상한 빈이 끼어있어요
List<DiscountPolicy>로 DiscountPolicy를 구현하는 빈들을 생성자 주입 방식으로 받아서 프린트 로그를 찍어봤는데, org.apache.ibatis.binding.MapperProxy 라는애가 끼어있어요 예제와 다른 점은 어플리케이션 컨텍스트에서 빈을 가져온게 아니라 이미 스프링부트로 만든 프로젝트 전체에서 테스트해봤다는 것 뿐인데요, 왜 DiscountPolicy를 구현하지 않은 MapperProxy가 끼어있는지 제거할 방법은 없는지 궁금해요..
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
intelliJ 실행속도
안녕하세요. 현재 강사님 강의 내용을 intellij에 직접 쳐보고 결과를 출력하고 있습니다.그러나 한 번 실행할 때마다, 콘솔 화면에 출력되는 속도가 현저히 느립니다.여러가지 원인이 있을 것 같지만 노트북 용량에 영향 받는 걸까요?
-
미해결스프링 핵심 원리 - 기본편
LogDemoService 에서 ObjectProvider를 쓰는 이유
LogDemoController 부분@Controller @RequiredArgsConstructor public class LogDemoController { private final LogDemoService logDemoService; private final ObjectProvider<MyLogger> myLoggerProvider; @RequestMapping("log-demo") @ResponseBody public String logDemo(HttpServletRequest request) { String requestURL = request.getRequestURL().toString(); MyLogger myLogger = myLoggerProvider.getObject(); myLogger.setRequestURL(requestURL); myLogger.log("controller test"); logDemoService.logic("testId"); return "OK"; } }여기서 이미 요청이후에MyLogger myLogger = myLoggerProvider.getObject();MyLogger타입 빈을 생성해서 myLogger 에 넣어준거 아닌가요??근데 왜 LogDemoService 부분에서@Service public class LogDemoService { //private final ObjectProvider<MyLogger> myLoggerProvider; private final MyLogger myLogger; @Autowired public LogDemoService(MyLogger myLogger) { this.myLogger = myLogger; } public void logic(String id) { //MyLogger myLogger = myLoggerProvider.getObject(); myLogger.log("service id = " + id); } }또 ObjectProvider를 해서 MyLogger 빈을 생성해서 찾아야하는 지 모르겠습니다.ObjectProvider를 사용하지않고 @Autowired를 사용하면 @Autowired가 생성자를 통해 MyLogger 타입으로 검색해서 LogDemoController 부분에서 생성된 myLogger 를 자동으로 의존관계주입하고 그것을필드로 주입 하는 거 아닌가요?? 왜 위에코드처럼 하면 오류가 나는지 모르겠습니다.ScopeNotActiveException: Error creating bean with name 'myLogger' @Autowired 는 싱글톤 빈만 찾을 수 있어서 그런건가요? MyLogger 이 request 스코프이니까??답변 주시면 정말 감사하겠습니다.
-
해결됨스프링 핵심 원리 - 기본편
스프링, 스프링부트
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]https://www.inflearn.com/questions/781242/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8 정확하게 궁금증이 풀리지 않아 다시 질문드립니다. 다시 한번 질문드리자면,제가 배우고 있는게 정확히 스프링인지 스프링 프레임워크인지 감이 안와요.말씀에 따르면, 본 강의 내에서 설정한 환경은 스프링 부트환경인거고, 이 안에서 제가 현재 학습하고 있는 모든 내용은 스프링 내용이 맞는거죠?또한 인텔리제이에서 단순히 ctrl shift f10을 이용해서 코드를 실행하는 것은 단순히 스프링을 사용하고 있는 것이고, 인텔리제이에서 CoreApplication 을 실행하는 것은 스프링 부트를 사용하는 것인가요?그렇다면 여기서 스프링 부트를 실행한 것은 스프링 부트로 스프링 프레임워크를 실행한 것으로 이해해도 무방할까요?
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
Integer.parseInt,와 Integer.valueof 의 차이가 궁금합니다.
int i = Integer.parseInt("93"); System.out.println(i); int i = Integer.valueOf("93"); System.out.println(i); 두 개다 93으로 출력이 되는데 둘 다 맞는 문법인가요? 문자를 정수로 바꿔준다는 기능은 똑같은거 같은데.. 차이가 뭔지 잘 모르겠습니다..
-
미해결스프링 핵심 원리 - 기본편
스프링? 스프링부트?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]간단하게 질문드립니다.스프링과 스프링부트의 차이를 모르고 지금까지 학습해왔는데요, 이 강의에서 영한님께서는 스프링부트를 통해 실행을 하고 그에 따른 빈 중복등록의 차이점을 언급해주셨습니다. 여기서 제가 궁금한 것은 스프링과 스프링부트의 차이점입니다. 지금까지 우리가 배운 컨테이너라든가 빈등록하는 것은 스프링 프레임워크를 사용한 것이고, 이 강의에서 처음으로 보여주신 스프링부트실행은 스프링 프레임워크와는 다른 것인가요? 만약 그렇다면 스프링 프레임워크만 사용할 때는 스프링부트의 CoreApplication을 실행하는 것처럼 어떤 실행방식이 있는 게 아니라, 지금까지 우리가 배운 컨테이너 생성(AnnotationConfigApplicationContext)과 이 곳에 빈을 등록하는 여러가지 방법들을 배운대로 사용하는 방식인거죠?
-
해결됨스프링 핵심 원리 - 기본편
내부 클래스 static 질문입니다.(두번째)
public class ComponentFilterAppConfigTest { @Test void filterScan(){ ApplicationContext ac = new AnnotationConfigApplicationContext(ComponentFilterAppConfig.class); BeanA beanA = ac.getBean("beanA", BeanA.class); assertThat(beanA).isNotNull(); assertThrows( NoSuchBeanDefinitionException.class, () -> ac.getBean("beanB", BeanB.class)); } @Configuration @ComponentScan( includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = MyIncludeComponent.class), excludeFilters= @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = MyExIncludeComponent.class) ) static class ComponentFilterAppConfig{ } }static class ComponentFilterAppConfig{ } 가 static 이 없으면 오류가 나는게 (내부 클래스가 static이 없으면 오류가 나는게)ApplicationContext ac = new AnnotationConfigApplicationContext(ComponentFilterAppConfig.class);위에 코드에서 외부 클래스를 생성해야 내부 클래스를 생성할 수 는데 외부클래스를 스프링 컨테이너에 생성하지 않아서 그런 건가 하고 외부클래스와 내부클래스 모두 스프링 컨테이너에 넣어봤습니다.ApplicationContext ac = new AnnotationConfigApplicationContext(ComponentFilterAppConfigTest.class,ComponentFilterAppConfig.class);위에 코드처럼 해보니 잘돌아갔습니다.<질문 1>하지만 제 생각에는 컨테이너에 동시에 외부클래스, 내부 클래스 를 스프링 빈으로 자동 등록하는 건데 왜 되는 건지 모르겠습니다.==================================그래서 외부클래스를 등록하면 자동으로 하위 클래스인 내부 클래스가 등록 되어서 되는 건가해서외부 클래스만 넣어봤더니ApplicationContext ac = new AnnotationConfigApplicationContext(ComponentFilterAppConfig.class);아래와 같이 내부클래스가 작동되지 않았습니다.org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'beanA' available<질문 2>스프링은 상위 클래스를 넣으면 그에 해당하는 하위클래스 모두 따라 넣어진다고 배웠는데 내부 클래스는 외부클래스의 하위 클래스가 아닌 건가요?? 아래 글 참고하여 질문 드렸습니다https://www.inflearn.com/questions/257297
-
해결됨스프링 핵심 원리 - 기본편
@Autowired 질문입니다.
@Autowired는 자동 의존관계 주입하고 빈을 등록하는 건 아니다 라고 이해하면 될까요??(ComponentScan에 의해 컨테이너에 등록된 빈을 타입으로 조회하여 의존관계를 자동으로 주입한다)아래코드를@Component public class MemberServiceImpl implements MemberService{ private final MemberRepository memberRepository; @Autowired public MemberServiceImpl(MemberRepository memberRepository) { this.memberRepository = memberRepository; } 저는 @ComponentScan 이 @Component 가 붙은 MemberServiceImpl 클래스와 MemorymemberRepository를 스프링 빈으로 등록하고 그 다음으로 생성자에 @Autowired가 MemberServiceImpl 과 의존관계를 가지는 memberRepository을 타입으로 검색해서 나온 MemorymemberRepository를 자동으로 의존 관계로 주입한다.라고 이해를 했는데 이게 맞는지 궁금합니다.답변해주시면 정말 감사하겠습니다.
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
접근제어자에 대하여..
public class BlackBoxRefurbish { String modelName; String resolution; private int price; String color; public String getModelName() { return modelName; } public void setModelName(String modelName) { this.modelName = modelName; } } 1.접근 제어자는 변수, 메서드, 성생자에 대한 접근 권한을 지정할 수 있고, getter와 setter는 메소드이기 때문에public String getModelName() {} 처럼"public을 통해 메소드인 게터와 스케터를 접근을 제어할 수 있다" 고 알고있으면 되는 걸까요?2. 접근제어자(후반전) 강의 중 6분에서 alt + enter를 누르면 import class를 하셨는데 이거는 어떤 기능인가요? 맨 위에 import chap_07.A; 라고 뜨는데 뒤에서 배우는 부분인가요?3.동일 강의 5분 38초 쯤에서 class A를 입력한 직후 기존 BlackBoxRefurbish 파일이 끝에 .java가 붙었습니다. 파일에 변화가 생긴건가요? 아니면 원래 클래스와 .java는 같은 건가요?그리고 이후 자바 파일 내에서는 클래스를 여러 개 만들 수 있다고 하셨는데, 일반적인 클래스 파일 내에서는 여러 개의 클래스를 만들 수 없나요? 설명이 빈약하지만..(새로운 강의를 시작할 때 마다) 패키지에 만드는 새로운 클래스 내부에 또다른 새로운 class를 적용할 수 없는 건지 궁금합니다..감사합니다 ^^
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
생성자에 대하여..
안녕하세요 생성자를 공부 하던 중 궁금한게 생겨서 질문 드립니다!! ^^ 생성자를 정의하는 방법이 헷갈려서 질문 드립니다!1.클래스와 같은 이름을 가진 메소드를 만드는 것이 생성자를 만드는 방법이라고 할 수 있는건가요? (2.그리고 class Calculator는 Calculator라는 클래스를 만드는 것이고, public Calculator는 메소드 오버로딩처럼 이미 만들어진 Calculator 클래스를 수정하는건가요?)package chap_07; class Calculator { int left, right; public Calculator(int left, int right) { this.left = left; this.right = right; } public void sum() { System.out.println(this.left + this.right); } }3.위 코드에서 class Calculator 로 클래스를 만들고 이후 public Calculator 로 클래스와 같은 이름인 메소드를 만듬으로써, calculator 클래스를 열면 바로 int left,right를 입력하도록 하는 생성자를 만든 것인가요?public class CalculatorDemo1 { public static void main(String[] args) { Calculator c1 = new Calculator(); // 에러 발생 c1.sum();4.그리고 Calculator() 괄호 안에 아무것도 입력하지 않으면 오류가 생기는 것을 미루어 보아새로운 인스턴스를 만들 때 생성자가 작동하는 것이 맞나요?감사합니다.
-
미해결백엔드 프레임워크 만들기 (개정판)
m1 맥북 환경 구성 오류
m1에서 /waf/callList 호출할 때 위와 같은 에러가 발생합니다.sqlite-jdbc 버전이 문제인 것 같은데 어디서 수정해야 하는지를 모르겠습니다. 수정해보려고 했는데 기존에 스프링 부트로만 프로젝트를 하다보니 방식이 너무 달라 어떻게 해결해야 할지 감이 안잡히네요...어떻게 수정하면 될까요?
-
미해결스프링 핵심 원리 - 기본편
추상화비용이 발생한다는 것이 궁금합니다 영환님!
영환님 인터페이스를 활용할 때 추상화 비용이라는 것이 발생한다고 하셨는데 구글링 검색해도 정확한 지식을 얻기 힘들어서 질문 드립니다.수업 내용의 기능을 확장할 가능성이 없다면, 필요할 때 리팩터링해서 인터페이스를 도입하는 방법 등 수업 내용은 이해했으나 추상화라는 비용이 정확히 무엇인지 궁금합니다!
-
미해결Java TPC (생각하고, 표현하고, 코딩하고)
static 멤버 사용
static 멤버를 수업 설명과 같이 객체 생성없이 클래스 이름으로 접근한다는것은 강사님 설명 덕분에 잘알았습니다!!그렇다면 static 멤버를 사용하는 이유는 객체 생성없이 클래스이름으로 바로 접근가능하다는 것인데, 객체 생성없이 메소드를 접근하게되면 어떤점이 좋은가요???객체 생성이 필요없으니 코드를 줄일 수 있는것이 장점일까요?이유를 알아야 잘 활용할 수 있을거 같아 질문남깁니다!
-
미해결스프링 핵심 원리 - 기본편
@Coponent가 붙는 클래스는 무조건 public이어야 할까요?
@Repository class ReviewRepositoryImpl implements ReviewRepository {...}이런 식으로 class 접근제한자를 default로 하면 안되던데 왜 그런걸까요??저는 스프링 빈으로 구현체가 등록되고, 컨테이너에 있는 빈들이 자동으로 생성자 주입될테니, 구현 클래스를 숨기고 싶어 default로 변경했습니다! 항상 좋은 강의 감사합니다 :)
-
해결됨스프링 핵심 원리 - 기본편
JAVA 문법 질문 - 매개변수 객체 생성 / @RequestMapping 질문
@RequestMapping("log-demo") @ResponseBody public String logDemo(HttpServletRequest request) { String requestURL = request.getRequestURL().toString(); MyLogger myLogger = provider.getObject(); myLogger.setRequestURL(requestURL);위 코드는 강의에 나온 코드 입니다 . @RequestMapping : 특정 URL로 요청(Request)을 보내면 Controller에서 어떠한 방식으로 처리할지 정의 여기서는 "log-demo" 로 요청 하면 logDemo 메서드를 호출한다 위 코드와 아래 코드가 같다고 볼 수 있을까요 ? @RequestMapping("log-demo") @ResponseBody public String logDemo() { HttpServletRequest request = new HttpServletRequest; String requestURL = request.getRequestURL().toString(); MyLogger myLogger = provider.getObject(); myLogger.setRequestURL(requestURL); 매개변수로 넣었을 때랑 뭐가 다른지 잘 모르겠습니다
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
HashMap 내 \t 출력에 문제가 있습니다.
안녕하세요, 해시맵 부분 수강하던 중 강사님과 다르게 출력되는 부분이 있어 문의드립니다.아래 코드를 출력한 결과 제 화면에서는 \t 만큼 띄워지지 않고, key와 포인트 부분이 한 칸(스페이스바 하나)만 띄워서 출력됩니다. 강사님이 올려주신 파일로 실행을 해도 문제가 해결되지 않습니다. 일반 sout 문에서는 문제없이 \t를 사용할 수 있는데, 아래 코드에서만 제대로 출력되지 않는 것 같습니다. 읽어주셔서 감사합니다. // Key & Value 함께 확인 for (String key : map.keySet()) { System.out.println("고객 이름 : " + key + "\t포인트 : " + map.get(key)); } System.out.println("------------------------");
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
강사님, 질문사항 있습니다!
LinkedList 와 ArrayList 는 기능이나 선언, 입력, 삭제하는 문법이 대부분 같은데요. 분명 각각의 용도나 목적이 있으니 이 둘이 구분된 것으로 생각하고 있습니다. 혹시 각각 어떤 목적으로 어떤 용도로 사용하는지 구분을 알 수 있을까요? (실무에서는 이럴 때 뭐를 사용하고, 어떤 경우엔 뭐를 사용한다, 이런 내용도 좋을 것 같습니다!)