묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨김영한의 실전 자바 - 기본편
다형성과 캐스팅 질문입니다
처음엔 자식타입이 부모타입보다 더 큰 범위라서 부모 인스턴스는 자식 인스턴스를 참조할 수 있다고 이해했습니다. 또한 강의자료에도 자식 클래스를 참조할 때 자식 인스턴스 안에 부모 인스턴스의 부분과 자식인스턴스의 부분이 나뉘어져있는거라고 나와 있어 그대로 이해했었는데요. 강의에선부모가 자식을 담을 수 있다 (O)자식은 부모를 담을 수 없다(O)이렇게 되어있어 헷갈려서 질문드립니다...(+ 그리고 다운캐스팅은 복사한 값을 캐스팅하는 것이므로 일시적으로만 실행되는게 맞나요?)=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
scanner 문제와 풀이 첫 번째 문제 질문
import java.util.Scanner; public class ScannerEx1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (true) { System.out.print("당신의 이름을 입력하세요: "); String str= sc.nextLine(); System.out.print("당신의 나이를 입력하세요: "); int Z1= sc.nextInt(); System.out.println("당신의 이름은 "+str+"이고, 나이는"+Z1+"입니다"); } } }이런 식으로 코드를 짜고 실행하면 처음 할 때는 잘 작동하는데 두 번째부터 재입력 할 때 이름은 입력 안 되고 나이만 입력이 되니까당신의 이름을 입력하세요: 존당신의 나이를 입력하세요: 12당신의 이름은 존이고, 나이는12입니다당신의 이름을 입력하세요: 당신의 나이를 입력하세요: 234당신의 이름은 이고, 나이는234입니다당신의 이름을 입력하세요: 당신의 나이를 입력하세요: 23당신의 이름은 이고, 나이는23입니다당신의 이름을 입력하세요: 당신의 나이를 입력하세요: 존존Exception in thread "main" java.util.InputMismatchException at java.base/java.util.Scanner.throwFor(Scanner.java:947) at java.base/java.util.Scanner.next(Scanner.java:1602) at java.base/java.util.Scanner.nextInt(Scanner.java:2267) at java.base/java.util.Scanner.nextInt(Scanner.java:2221) at day16.ScannerEx1.main(ScannerEx1.java:15)Process finished with exit code 1이런 식으로 뜨네요 이름입력이 건너 뛰게 되는 이상한 현상이 있는데 어떻게 된 걸까요?
-
미해결김영한의 실전 자바 - 기본편
안녕하세요 강사님 혹시 추후강의내용에 대해서 질문드립니다
[질문 내용]강사님 혹시 추후에 Java8신규문법인 람다식이나 스트림 필터 맵 과 같은문법들을 강의할계획이 있으신지알고싶습니다
-
해결됨스프링 핵심 원리 - 기본편
@test 자동완성이 안될 때
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]인텔리제이에서 테스트 코드를 작성하기 위해 @Test를 쓸 때, 자동완성이 나오지 않습니다.이렇게만 나오고 @Test에 해당하는 것은 나오지 않습니다. build.gradle에 dependencies도dependencies { implementation 'org.springframework.boot:spring-boot-starter' testImplementation 'org.springframework.boot:spring-boot-starter-test' }위처럼 설정되어 있습니다. 따로 테스트 코드 위에 import org.junit.jupiter.api.Test; 를 작성하면 오류없이 사용 가능하긴한데 자동으로 할 수 있는 방법은 없을까요?Build and run 과 test 모두 Gradle로 설정되어있고 JAVA 17 을 사용하고 있습니다.
-
해결됨김영한의 실전 자바 - 기본편
메서드 영역과 힙 영역에서의 객체 저장
객체 (인스턴스)가 생성되는 영역이 힙 영역이라고 하셨고메서드 영역에서는 클래스 안에서의 필드 값이 존재한다고 하셨는데 그렇다면 객체 안에서의 멤버 변수들을 저장하는 값은 메서드 영역에서 생성된다는 건가요? 아니면 객체가 생성되는 힙 영역 안에서 객체 멤버 변수 값들도 다 같이 저장이 되는건가요? 헷갈려요..ㅠㅠ
-
해결됨C개발자를 위한 최소한의 C++
일반 참조형과 const 참조형에 따라 컴파일 오류가 발생하거나 발생하지 않는 이유가 궁금합니다.
안녕하세요. 강의 잘 보고 있습니다.강의 내용 중 하나 이해 안되는 것이 있어 질문 남깁니다.// 위 코드 생략 TestData testFunc(TestData& rhs) { // 생략 } int main() { TestData result = testFunc( 10 ); // 생략 } testFunc의 매개변수로 10이 넘어갔기 때문에 묵시적으로 변환 생성자 TestData(int)가 호출된 것으로 보입니다.따라서 testFunc은 생성된 TestData를 참조로 받고 있는 것 같은데, 왜 위처럼 코드를 작성하면 오류가 발생하는지 이해가 되지 않습니다.// 위 코드 생략 TestData testFunc(const TestData& rhs) { // 생략 } int main() { TestData result = testFunc( 10 ); // 생략 } 위처럼 const 키워드를 붙였을 땐 오류가 안 발생하는데 이유가 무엇인가요?
-
미해결코틀린 고급편
SynchronizedLazyImpl 함수관련 질문
태현님, 안녕하세요, 강의 잘듣고 있습니다! 9강 11분 35초 부분에서 질문이 있는데요. by Lazy안에 타고 들어가면 SynchronizedLazyImpl 함수가 스레드 세이프해서 위험할 수 있다고 말씀하셨는데 .. 어떤 의미인지 궁금해서 질문 글 올립니다. 시간되실 때 답변 부탁드려요 감사합니다!
-
해결됨스프링 핵심 원리 - 기본편
강의 프로토타입 질문입니다
public class SingletonTest { @Test void singletonBeanFind() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SingletonBean.class); SingletonBean singletonBean1 = ac.getBean(SingletonBean.class); SingletonBean singletonBean2 = ac.getBean(SingletonBean.class); System.out.println("singletonBean1 = " + singletonBean1); System.out.println("singletonBean2 = " + singletonBean2); Assertions.assertThat(singletonBean1).isSameAs(singletonBean2); ac.close(); } @Scope("singleton") static class SingletonBean { @PostConstruct public void init() { System.out.println("SingletonBean.init"); } @PreDestroy public void destroy() { System.out.println("SingletonBean.destroy"); } } } 영한님이 AnnotationConfigApplicationContext(SingletonBean.class); 여기에 SingletonBean.class를 넣으면 componentscan이 된다고하셨는데 AnnotationConfigApplicationContext는 @Component 혹은 @Bean으로 등록이 되어있는걸 스프링컨테이너로 만들어서 라이프사이클을 관리한다는건데 여기서는 자동으로 빈이나 수동으로 빈을 등록하는게 없는데 어떻게 컴포넌트 스캔으로 관리가되는거죠? 두번째, 컴포넌트스캔이 @SpringBootApplication에 내장되어있어서 자동으로 진행되는건알고있는데 @Test에도 영향을미치나요? 저는 test는 별도로 component를 해줘야하는지 생각했는데 아닌거같아서요
-
미해결스프링 핵심 원리 - 기본편
request scope 관련 질문
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 내용]request scope 관련해서 실행 과정에서 궁금한게 생겨서 질문드립니다. 제가 이해한 과정이 맞을까요?1. 먼저 CoreApplication을 실행시키면 스프링 컨테이너가 생성이 되고, MyLogger라는 빈을 스프링 컨테이너에 등록시킨다MyLogger라는 빈은 scope이 request 이기때문에http 요청이 오기전까지, 빈 인스턴스를 생성하지 않아서 @PostConstruct가 붙은 초기화 메서드 init()이 실행되지 않는다따라서 uuid를 생성해서 저장하지 못 하기 때문에 "Scope 'request' is not active ... " 와 같은 오류가 발생한다위 과정이 맞다면, 고객의 요청이 오기전까지 Mylogger 빈 인스턴스가 생성되지 않은 상태일텐데 provider가 어떻게 빈을 찾아서 가져오고 @PostContsruct가 실행되는지 궁금합니다. 또한 myLogger.setRequestURL() 메서드가 어느 시점에 실행되는지 궁금합니다.. (빈 생성 전인지 후 인지)그리고 "빈 등록" 과 "빈 생성"은 다른 개념인건가요? 조금 혼동되네요
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
단축키 질문
안녕하세요.라인 여러 줄 복사할 때 범위 지정 후 ctrl d 하는 거는 이해했는데 라인 맨 앞으로 이동 후 범위 지정할 때는 어떻게 쓰나요?이전 영상에서 설명해 주셨는데 따로 필기 안 하고 지나가서 찾아보려니까 못 찾겠네요ㅜㅜ윈도우 기준 home 키 써서 라인 맨 앞으로 간 다음에 ctrl w 하신 건가요? 영상 보니 라인 전체 복사가 한 번에 이루어지는 것 같아 궁금해서 질문 남겨 봅니다. 미리 답변 감사합니다!
-
해결됨스프링 핵심 원리 - 기본편
CoreApplication 실행 오류
CoreApplication 실행시 다음과 같은 오류가 발생합니다.
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
함수 설계 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)[질문 내용]안녕하세요 다음과같이 함수 내부에서 입금,출금액을 입력받도록 설계하는것 보다 영한님처럼 외부에서 입력받고 인자로 넘기는 방식이 더 좋은 방식인가요?
-
미해결김영한의 실전 자바 - 기본편
인스턴스 생성
여기서 학생 이름, 나이, 성적 각각을 객체(인스턴스)라고 하는 건가요, 아니면 이 세개를 합친 student1을 하나의 객체(인스턴스)라고 하는 건가요? 혹은 전부 다 객체(인스턴스)라고 할 수 있는 건가요?
-
해결됨스프링 핵심 원리 - 기본편
강의. 조회된빈이 모두필요할떄 List,map 제목입니다
public class AllBeanTest { @Test void finaAllBean() { ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class); DiscountService discountService = ac.getBean(DiscountService.class); Member member = new Member(1L, "userA", Grade.VIP); int discountPrice = discountService.discount(member, 1000, "fixDiscountPolicy"); assertThat(discountService).isInstanceOf(DiscountService.class); assertThat(discountPrice).isEqualTo(1000); int rateDiscountPrice = discountService.discount(member, 20000, "rateDiscountPolicy"); assertThat(rateDiscountPrice).isEqualTo(2000); } static class DiscountService { private final Map<String, DiscountPolicy> policyMap; private final List<DiscountPolicy> policies; @Autowired // 생략가능 생성자가 하나이기 때문에!!! public DiscountService(Map<String, DiscountPolicy> policyMap, List<DiscountPolicy> policies) { this.policyMap = policyMap; this.policies = policies; System.out.println("policyMap = " + policyMap); System.out.println("policies = " + policies); } public int discount(Member member, int price, String discountCode) { DiscountPolicy discountPolicy = policyMap.get(discountCode); return discountPolicy.discount(member, price); } } } 첫번째 질문, AnnotationConfigApplicationContext을 해주게되면 스프링컨테이너로 등록을하고 ac를 통해 빈으로 등록된 AutoAppconfig.class와 DiscountService.class에 접근이 가능하다고 알고있습니다.밑에보면 ac로 DiscountService.class에만 접근하고있어서 AutoAppconfig.class를 빼주었더니 밑에있는 discountprice에 discout에서 오류가 발생합니다. 이유가 무엇일까요? 두번째 질문, 밑에 DiscountService에 강의에서 생성자를 선언해주었습니다. 지금보면 어디에서 호출이되었는지와 어떻게 값을 넣어주었는지 궁금합니다. 제생각에는 AnntationConfigApplicationContext를 할때API문서를 보니 refresh()의 finishBeanFactoryInitialization(beanFactory); 에서 AutoAppConfig.class, DiscountService.class 에 대한 값을 이미 생성되었다고 판단되었는데 이게맞을까요? 이게맞다면 1번질문이 결국 2번질문과 연관되어있을거같습니다 세번째 질문, map에 대해 공부를해봤는데 map<String, DiscountPolicy> 에서 만약 AutoAppconfig 가 들어가있다면 this.policyMap에는 AutoAppconfig가 들어가있는 상태이고 AutoAppconfig를 들여다보니 ComponentScan이 있어서 Component로 등록되어있는 RateDiscountPolicy, FixDiscountPolicy에 매개변수로 들어온 discountCode로 접근이 가능하다가 맞을꺼같은데 제가 이해한게맞을까요?
-
미해결스프링 핵심 원리 - 기본편
빌드하면 나오는 화면 질문
평소 보던 결과랑 다르게 나오는데 저에게 무슨일이 생긴걸까요? 강의랑 같은 결과화면을 얻고싶습니다!이 부분이 강의와 다르게 나타나는 이유가 무엇일까요?
-
해결됨김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
[질의] 7-3.Scanner_반복예제(5'54) 질문
안녕하세요 선생님 7-3.Scanner_반복예제(5분 54초경) 질문이 있습니다.선생님께서 작성하신 코드에 따르면 int구문을 if와 구별하여 작성해주신 것으로 확인했습니다. 저는 이와 다르게 하기와 같이 구현하였는데 이렇게 진행해도 무방할까요?Scanner scanner = new Scanner(System.in); System.out.println("첫번쨰와 두번째 숫자 모두 0을 입력하면 프로그램을 종료합니다."); while (true) { System.out.print("첫번쨰 숫자를 입력하세요 : "); int num1 = scanner.nextInt(); System.out.print("두번쨰 숫자를 입력하세요 : "); int num2 = scanner.nextInt(); if (num1 == 0 && num2 == 0) { System.out.println("프로그램을 종료합니다."); break; } else { int sum = num1 + num2; System.out.println("두 숫자의 합은 ? = " + sum); }
-
미해결스프링 핵심 원리 - 기본편
Provider 사용
package javax.inject; public interface Provider { T get(); } @Autowired private Provider<PrototypeBean> provider; public int logic() { PrototypeBean prototypeBean = provider.get();} Provider 인터페이스 사용시 위처럼 인터페이스를 구현한 구현체 없이도 사용이 가능한가요?
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
brew search jdk 에러
안녕하세요 선생님 유튜브 파이썬 강의 듣고 만족해 유튜브 자바 강의도 듣고 있습니다. 그러나 맥북 jdk설치 과정부터 막혀 도저히 진도가 나가질 않습니다.지식인에 물어보고 gpt에 물어보고 아무리 인터넷을 찾아서 따라해봐도 계속 에러가 납니다... 심지어 여기 커뮤니티에서 다른 사람이 질문했던거 따라해도 다시 에러가 나요 ㅜㅜㅜㅜ 다시 다 지우고 처음부터 해봤는데도 안되네요brew search jdk 이 과정만 입력하면 계속 같은 에러가 뜨네요..진짜 컴맹 코딩생초보라ㅜㅜ 어떻게 해야될지 모르겠어서 선생님께 직접 자문을 구하고자 결국 수강료 내고 여쭤봅니다... 자세하고 친절한 설명 부탁드립니다.. 번거롭게 해드려 죄송해요ㅜ
-
해결됨김영한의 실전 자바 - 기본편
밑의 참조 배열에 관한 질문 답변에 조금.. 이해가 안가서 다시 질문해요 ㅠㅠ.
이런식으로 Product라는 클래스를 만들고 컬렉션을 이용해서 products 변수를 만들어서 그 안의 객체를 생성해서 넣었습니다.그리고 또 다른 productTest라는 변수를 만들어서 이번에 products의 값들을 new ArrayList를 통해서 값을 전달했다고 한다면productTest의 배열의 첫번째 인덱스 값이 products의 첫번째 인덱스 값을 가리키는 것과 같은거 아닌가요? 그렇게 된다면 productTest에서 값을 수정한다면 원본 데이터 값에도 영향을 받아야 하므로 products.get(0).getName() 값도 결국 "테스트제품"으로 바꿔져야 하는데 원본 데이터는 영향을 받지 않더라구요... ㅠㅠ왜 이런건지 잘 모르겠습니다..참조 배열 안에 있는 값도 결국 객체의 메모리 주소값을 가리키게 된다면, 새로운 배열을 만들어서 값을 복사해서 대입하게 되더라도 해당 객체를 가리키는 메모리 주소값을 접근하는 것이 하나 더 생기는거 아닌가요?
-
해결됨김영한의 실전 자바 - 기본편
참조형 배열에 관한 질문!!
이 강의에서 배운 내용을 토대로 참조형 배열에 관해 궁금한 점이 있습니다. 참조형 배열도 결국 배열 안에 메모리 주소값을 저장하여 인덱스를 통해 메모리 주소값에 접근하는 방식인가요?예를 들어서 List<Item> items = new ArrayList<>(); 이런 식으로 Item 타입을 가지는 items라는 배열을 생성했다라고 하면, 이 안에 인덱스 번호를 통해 배열 안의 위치에 접근하면 Item 객체에 관한 메모리 주소값이 있을테고, 이 메모리 주소값에 접근하는 방식인가요? 만약 List<Item> item = new ArrayList<>(); 배열 변수를 선언하고 배열 안에 값을 넣었다고 생각을 한다면, 강의에서 말했듯, " 자바는 항상 변수의 값을 복사해서 대입한다 " 라는 말이 있는데 여기서 궁금한게, 또 다른 새로운 배열을 만들어서 해당 item을 복사해서 넣는다고 한다면 즉, List<Item> anotherItem = new ArrayList<>(item);이런식으로 item 안에 값들을 anotherItem으로 새로운 배열을 만들어서 집어넣는다면, anotherItem 안에 값들을 수정해도 item에는 영향을 미치지 않나요? 만약 영향을 미치지 않는다면 왜 그런지 궁금합니다.결국 객체의 메모리 주소에 접근할텐데.. (너무 헷갈립니다 ㅠㅠ)