묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결김영한의 실전 자바 - 중급 1편
자바 메모리 관련 질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]메서드 영역은클래스 정보static 영역런타임 상수 풀이렇게 세가지로 구성되어 있는걸로 알고 있습니다. static 중첩 클래스, static이 없는 내부 클래스는 메모리 구조상 어디에 저장 되나요?
-
해결됨김영한의 실전 자바 - 중급 2편
장바구니 minus 질문있습니다!
public void minus(Product product, Integer minusQuantity) { Integer quantity1 = cartMap.get(product); int newQuantity = quantity1 - minusQuantity; if (newQuantity <= 0) { cartMap.remove(product); } else { cartMap.put(product, newQuantity); } } 정말 기본적인 질문인거같은데 이해가 안돼서 질문드립니다 저 else문을 안쓰고 그냥 put하면 수량은 0이 되는데 키가 지워지지 않더라구요 근데 else문을 사용하니까 키가 사라지는데 무슨 차이일까요 ㅠㅠ remove는 이미 if문에서 실행이 돼야되는거 아닌가요
-
미해결김영한의 실전 자바 - 중급 2편
타입 이레이져 예시 관련 질문
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]class EraserBox<T> { public boolean instanceCheck(Object param) { return param instanceof T; // 오류 } public void create() { return new T(); // 오류 } }public class MyArrayListV4<E> { private static final int DEFAULT_CAPACITY = 5; private Object[] elementData; private int size = 0; @SuppressWarnings("unchecked") public E get(int index) { return (E) elementData[index]; // 오류 X }두 예시 모두 런타임 시점에 타입을 활용하는 걸로 보이는데 처음 예시에 있는 두 메서드는 불가능하고 두번째 예시에 있는 get 메서드는 어째서 가능한지 궁금합니다.
-
미해결김영한의 실전 자바 - 중급 2편
add(int index, Object newValue)에서 루프 조건질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]```javapublic void add(Object e, int index) { if (size == elementData.length) { grow(); } for (int i = elementData.length - 1; i > index; i--) { elementData[i] = elementData[i - 1]; } elementData[index] = e; size++; }```for문 조건에서 for (int i = elementData.length - 1; i > index; i--)i의 초기값을 배열의 길이로 주는 것보다는 현재 배열에 담고 있는 요소의 수인 (size-1)변수로 주는 것이 루프문의 범위를 줄이고 정말 미세한차이겠지만 조금 더 효율적이라고 생각하는데 혹시 (size-1)변수로 반복문 초기값을 설정했을 때 문제될 점이 있을까요??
-
해결됨스프링 핵심 원리 - 기본편
섹션 10. 빈 스코프 질문
public class PrototypeTest { @Test void PrototypeBeanTest() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(PrototypeBean.class); System.out.println("find PrototypeBean1"); PrototypeBean prototypeBean1 = ac.getBean(PrototypeBean.class); System.out.println("find PrototypeBean2"); PrototypeBean prototypeBean2 = ac.getBean(PrototypeBean.class); System.out.println("prototypeBean1 = " + prototypeBean1); System.out.println("prototypeBean2 = " + prototypeBean2); assertThat(prototypeBean1).isNotSameAs(prototypeBean2); } static class PrototypeBean { @PostConstruct public void init() { System.out.println("PrototypeBean.init"); } @PreDestroy public void destroy() { System.out.println("PrototypeBean.destroy"); } } }결과prototypeBean1 = hello.core.scope.PrototypeTest$PrototypeBean@29caf222prototypeBean2 = hello.core.scope.PrototypeTest$PrototypeBean@29caf222 강의에서 프로토타입 스코프를 코드로 작성하고 실행하는 도중 깜빡하고 스코프 애노테이션을 넣는 걸 깜빡했습니다.그런데 prototypeBean1 과 prototypeBean2 의 참조값이 같게 나왔습니다.@Configuration을 적지 않았는데 왜 싱글톤이 적용이 된 건지 잘 이해가 가지 않습니다...
-
미해결김영한의 실전 자바 - 중급 2편
Deque에서 Queue인지 Stack인지는 데이터를 추가 할 때 결정되는건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]예제를 따라하면서 호기심에deque.push(1); deque.push(2); deque.push(3); System.out.println("deque.pop() = " + deque.poll()); System.out.println("deque.pop() = " + deque.poll()); System.out.println("deque.pop() = " + deque.poll());pop을 -> poll로 바꿔봤는데 결과값이 똑같이 나오고그 반대로 offer / pop 으로 해도 마찬가지더라구요!Deque<Integer> deque = new ArrayDeque<>();혹시 이 Deque가 queue / stack 둘 다 지원하기 때문에데이터를 추가 할 때 자료구조가 결정되는게 맞는건가요?
-
해결됨스프링 핵심 원리 - 기본편
섹션 8. 빈 생명주기 콜백
@Bean에 초기화 소멸 메서드 등록할 때 질문입니다!public class NetworkClient { private String url; public NetworkClient() { System.out.println("생성자 호출, url = " + url); } public void setUrl(String url) { this.url = url; } //서비스 시작시 호출 public void connect() { System.out.println("connect: " + url); } public void call(String message) { System.out.println("call: " + url + " message = " + message); } //서비스 종료시 호출 public void disConnect() { System.out.println("close + " + url); } public void init() { System.out.println("NetworkClient.init"); connect(); call("초기화 연결 메시지"); } public void close() { System.out.println("NetworkClient.close"); disConnect(); }@Configuration static class LifeCycleConfig { @Bean(initMethod = "init", destroyMethod = "close") public NetworkClient networkClient() { NetworkClient networkClient = new NetworkClient(); networkClient.setUrl("http://hello-spring.dev"); return networkClient; } } 결과생성자 호출, url = null NetworkClient.init connect: http://hello-spring.dev call: http://hello-spring.dev message = 초기화 연결 메시지 13:33:10.029 [main] DEBUG org.springframework.context.annotation.AnnotationConfigApplicationContext - Closing NetworkClient.close close + http://hello-spring.dev스프링 빈에 하기위해 networkClient객체가 생성되고 의존관계 주입까지 끝난 다음에 networkClient.setUrl("http://hello-spring.dev"); 로 url을 초기화하기 전에init() 메서드가 실행되는 걸로 이해를 했는데, 그럼 init() 메서드가 connect 호출 할 때 url은 여전히 null일테니 url의 초기화가 먼저 일어나야 합니다.그런데 초기화 콜백은 스프링 빈이 객체를 생성하고 의존관계 주입이 완료된 후,초기화가 되기 전에 일어나는 거 아닌가요..이럼 앞뒤가 안 맞는데 제가 놓치고있는 부분을 알려주시면 감사하겠습니다.
-
해결됨김영한의 실전 자바 - 기본편
함수와 메서드
안녕하세요.수업 정말 잘 듣고 있습니다.입문 편이랑 기본 편 복습 중에 질문 하나 드립니다.인터넷에서 검색해 보니static이 붙은 정적 메서드, 클래스 메서드를 함수라고 부르기도 하고static이 붙지 않은 인스턴스 메서드를 메서드라고라고 부르기도 한다는데요.위와 같이 구분해서 부르는 건 맞는 건가요?
-
미해결김영한의 실전 자바 - 기본편
메서드 영역의 메서드 질문
안녕하세요.메서드 관련 질문입니다.메서드는 공통된 기능이기 때문에 인스턴스 변수처럼 내부에 가지고 있지는 않고 메서드 영역에 있는 걸 필요할 때(호출할 때) 가져와서 쓴다.이것과 관련하여 질문 3가지 문의 드립니다.1. 각각의 객체에는 필드값만 가지고 있고 메서드는 아예 가지고 있지 않은거죠 ?2. 컴파일이 될 때 메서드 영역 > 클래스 영역 이 부분에 클래스의 관련 코드들이 다 들어가 있는 걸로 이해했는데 그러면 다음의 두 경우는 어떻게 이해하면 될까요 ? (두 경우 다 추상 클래스, 인터페이스에는 메서드의 바디가 작성되어 있지 않고 나중에 작성되는 경우) -> 메서드 영역의 클래스 영역에 처음에는 바디가 없으니 관련 정보가 전혀 없을 거 같은데 이와 같이 나중에 오버라이딩을 해주었을 때 메서드 영역의 클래스 영역에서 어떻게 되는지 궁금합니다. 새로운 클래스 영역에 메서드로 정의되는 부분이 아니라 기존에 클래스 영역에서 정의가 되어야 하는데 문제는 클래스 영역의 기존 메서드를 수정하자니 다음의 두 케이스는 해당 객체를 생성할 때에만 적용되는 일회성 코드라 ...2.1 AbstractAnimal은 추상클래스로 sound()가 추상 메서드입니다.AbstractAnimal animal = new AbstractAnimal() { @Override public void sound() { System.out.println("test"); } };2.2 InterfaceAnimal interface 입니다.InterfaceAnimal interfaceAnimal = new InterfaceAnimal() { @Override public void sound() { System.out.println("test"); } @Override public void move() { System.out.println("test"); } };
-
미해결김영한의 실전 자바 - 기본편
타입과 참조값
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 강사님 다형성 참조를 보다가 질문합니다Parent poly = new Child();부모 타입의 변수는 부모의 데이터를 사용 할 수 있으므로 자식 타입을 대입 할 수 있고 Child poly = new Parent();자식 타입의 변수는 자식 데이터를 사용 할 수 있지만 부모 타입이 범위가 더 커 자식이 담을 수 없는게 맞을까요?
-
미해결스프링 핵심 원리 - 기본편
connect()에 url이 null이 안나오는이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]안녕하세요 이 강의와 이전강의를 돌려가면서보는중인데도 햇갈리는게있어서 제가 생각하는게 맞는지 궁금해서 질문드립니다.1. 바로이전강의내용에서는 connect() 와 call()를 afterPropertiesSet()에 넣지않은상태에서 코드를 실행하면 url이 null이 뜨는상태였습니다. 그 이유가 그러면 connect() 와 call()함수가 빈 라이프사이클인 "스프링 빈 생성" 중 NetworkClient 생성자안에 있어서 url을 set하기 전 단계에 실행되서 null이 뜨는거고, null이 안뜨고 url이 제대로 나오는 상황은 빈이 완벽하게 생성이 된 이후에 connect() call()이 실행되서 인가요? 제 질문이 잘 전달이된건지 잘 모르겠네요. 빈생성이 되기 전에 connect한거랑 빈생성이완벽하게된후(url도 set된상황) 그 차이인가요?2. 그리고 바로전강의에서 상태출력을 빈생성과정에 출력하신거라 null이 나오는거지 결국 setUrl은 결국 실행되서 url의 최후 상태는 null이 아니지않나요? 그냥 라이프사이클에 중점을두시는 강의인거맞나요?
-
해결됨김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
오타 확인 부탁드립니다.
while문 -> for문 MoveRateEx -> MovieRateEx 항상 좋은 강의 감사드립니다.건강 유의하시고 행복한 하루 보내셨으면 좋겠습니다.
-
해결됨스프링 핵심 원리 - 기본편
섹션 7. 조회한 Bean 모두 필요 Map, List
public class AllBeanTest { @Test void findAllBean() { ApplicationContext ac = new AnnotationConfigApplicationContext(DiscountPolicy.class); } static class DiscountPolicy { private final Map<String, DiscountPolicy> policyMap; private final List<DiscountPolicy> policies; @Autowired public DiscountPolicy(Map<String, DiscountPolicy> policyMap, List<DiscountPolicy> policies) { this.policyMap = policyMap; this.policies = policies; System.out.println("policyMap = " + policyMap); System.out.println("policies = " + policies); } }테스트를 실행하면policyMap = {}policies = []출력이 됩니다.실행되면서new AnnotationConfigApplicationContext(DiscountPolicy.class);의 스프링 컨테이너가 DiscountPolicy를 빈으로 등록하는데,DiscountPolicy는 @Autowired로 생성자 주입을 받습니다. 그런데 스프링 컨테이너의 스프링 빈에는Map<String, DiscountPolicy> policyMapList<DiscountPolicy> policiespolicyMap와 policies는 생성된 적이 없어서 등록된 빈이 없을테고, final이 붙은 필드에는 초기화가 되지않아서 오류가 나야하지 않나요?어떻게policyMap = {}policies = []처럼 객체가 들어가 있을 수가 있나요??
-
미해결김영한의 실전 자바 - 중급 2편
참조형 return 관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) y2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) y3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) y[질문 내용] MyLinkedListV2 클래스의 remove 함수에서Object removedItem = removeNode.item; ... removeNode.item = null; return removedItem;위와 같은 방식으로 item을 반환하기 전에 null로 초기화를 해주고 있습니다. removedItem에 참조형인 removeNode.item을 할당하면 참조값이 복사되어 값이 null인 참조값을 반환할 것이라고 생각했는데, 실제 코드를 실행시켜보니 삭제된 노드의 item 값이 정상적으로 반환되는 것을 확인했습니다. Object removedItem = removeNode.item을 실행하면 참조값이 아니라 데이터가 들어가게 되는 건가요?
-
미해결김영한의 실전 자바 - 기본편
오버라이딩 질문
안녕하세요.아래 작성해주신 메서드 오버라이딩 관련한 설명 확인했습니다. 한 가지 궁금한 건 답변에서처럼 실제 런타임시에는 변수의 타입이 아닌 인스턴스의 타입을 우선적으로 본다고 한다면, method 오버라이딩은 자식 타입의 method(오버라이딩된)을 보는 게 맞는데 필드값은요 ? 위에 작성해주신 내용이 필드에는 해당이 안 되고 메서드에만 해당이 되는 내용인가요 ?
-
해결됨김영한의 실전 자바 - 기본편
섹션 12. 다형성과 설계 예제 관련 질문
안녕하세요.<다형성과 설계-문제와 풀이> 강의를 듣는 중에 의문이 생겨 문의드립니다.수업 내용에 따라 Sender 클래스는 인터페이스로 작성된 상태입니다.사진과 같이 "Sender[] senders = "로 배열을 생성하여도, 배열 안의 값들은 Sender형이 아닌 각각 EmailSender, SmsSender, FaceBookSender형으로 생성이 되는 건가요?만약 Sender형으로 인스턴스가 생성이 된다면, 인터페이스는 인스턴스를 생성할 수 없기 때문에 NullPointerException이 발생해야 할 것 같아서요.답변 부탁드립니다. 감사합니다.
-
미해결김영한의 실전 자바 - 기본편
인터페이스-다중 구현 질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]인터페이스-다중구현 강의 자료 마지막 부분에b.methodCommon() 호출하면 먼저 x001 Child 인스턴스를 찾는다. 라는 부분이 있습니다. x001이 아니라 혹시 x002가 아닌지요? 위에 있는 그림하고 맞지 않는 것 같아서요.
-
해결됨스프링 핵심 원리 - 기본편
섹션 6. 컴포넌트 스캔
1,예제를 유지하기 위해서 AutoAppConfig 클래스에 @ComponentScan을 입력하시고,excludeFilters를 이용해서 @Configuration이 붙은 클래스들은 컴포넌트 스캔대상에서 제외하셨습니다!그런데 AutoAppConfig에도 @Configuration이 붙어있는데 ApplicationConfig에 구성 정보로 AutoAppConfig를 넘기면 AutoAppConfig에도 @Configuration이 붙어있는데 @ComponentScan이 동작을 어떻게 하는지 조금 헷갈립니다ㅠㅠ 2,컴포넌트 스캔을 사용하려면 먼저 @ComponentScan 을 설정 정보에 붙여주면 된다.excludeFilters 를 이용해서 설정정보는 컴포넌트 스캔 대상에서 제외했다.여기서 설정정보라는게 뭘 의미하는 건가요??
-
미해결김영한의 실전 자바 - 중급 2편
제네릭 메서드 사용 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]제네릭을 사용할 때 궁금한 점이 생겨서 질문드립니다.Integer i = 10;Object object = GenericMethod.objMethod(i);// 타입 인자(Type Argument) 명시적 전달System.out.println("명시적 타입 인자 전달");Integer result = GenericMethod.<Integer>genericMethod(i); 현재는 Integer i = 10;으로 래퍼클래스를 사용하고 있는데,만약 int i = 10;과 같이 기본형을 전달하면 '오토 박싱'이 되어서 Integer객체로 변환되어서 메서드에 전달되는 걸로 이해하면 될까요?
-
해결됨김영한의 실전 자바 - 중급 2편
자바가 제공하는 Set 질문
안녕하세요 항상 최고의 강의를 제공해주셔서 감사드립니다.강의를 듣던 도중 질문이 생겨 글을 남깁니다. 섹션 8번 컬렉션 프레임워크 강의의 자바가 제공하는 Set은 출력 하였을 경우영한님과 함께 만들었던 MyHashSet과 달리 비어있는 인덱스는 출력이 되지 않던데 이 또한 최적화로인해 출력이 안되는 것인지 궁금합니다. 만약 그렇다고 하면 initialCapacity의 값을 입력하거나, 데이터의 양을 배열의 크기의 75% 이상으로 늘렸을 경우 rehashing 되는지 육안으로 확인할 방법이 없는지 또한 궁금합니다.(rehashing 후 커진 배열에 다시 맞추어 데이터의 순서가 변경되는 것은 확인하였는데 단순히 배열의 크기가 커진 것을 확인할 방법이 궁금합니다.)