묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨김영한의 실전 자바 - 중급 2편
배열의 특징2 - 데이터 추가 "이해에 되하여서"
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 질문이 생겨서 질문을 남깁니다.배열의 특징2 - 데이터 추가에서 첫 번째, index 번째, 마지막 번째, 에 추가 하는 것의 방법은 들으니까 이해가 됩니다.여기서 질문이 생깁니다. 듣기는 들었고, 따라 치기도 하고, 이해는 되고 그러는데. 뭔가 석연치 않는 부분이 있습니다.( 뭔가 애매하다고 해야 할끼요?)그것 때문에 어떻게 해야 할지 모르 겟네요. 이럴 때는 어떻게 해야 하나요?석연치 않은 부분이 풀릴 때 까지 계속 반복해서 듣고, 코드를 지웠다 치고 그러는게 좋을까요?아니면 다른 방법이 있을까요?답변 부탁 드립니다.
-
미해결스프링 핵심 원리 - 기본편
Bean 어노테이션을 통해 생성된 인스턴스에 관하여
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요, @Bean을 통해 컨테이너에 빈을 등록할 때 생성되는 인스턴스에 대한 궁금점이 있습니다.강의 코드에서는 다음과 같이 AppConfig.java에서 MemberRepository를 new MemoryMemberRepository()를 통해 매번 생성하여 반환하고, 이를 memberService() 그리고 orderService()에서 생성하여 호출하고 있습니다.@Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService() { return new OrderServiceImpl(memberRepository(), discountPolicy()); }여기서 제가 궁금한 점은 memberRepository()를 통해 매번 새롭게 생성되는 MemoryMemberRepository를 호출하는 것으로 예상하고 실제 메모리 참조를 확인해보니 모두 동일한 값을 가지는 것을 확인했습니다. 아래는 코드 중 일부입니다.MemberService, OrderService에 다음을 추가MemberRepository getMemberRepository();아래는 위 메소드를 각 Impl에서 구현한 코드입니다.@Override public MemberRepository getMemberRepository() { return this.memberRepository; }public static void main(String[] args)의 일부 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); MemberService memberService = applicationContext.getBean("memberService", MemberService.class); OrderService orderService = applicationContext.getBean("orderService", OrderService.class); MemberRepository repo = applicationContext.getBean("memberRepository", MemoryMemberRepository.class); System.out.println("member Service Repository = " + memberService.getMemberRepository()); System.out.println("order Service Repository = " + orderService.getMemberRepository()); System.out.println("member repository bean = " + repo);실행 결과member Service Repository = hello.core.member.MemoryMemberRepository@5552768b order Service Repository = hello.core.member.MemoryMemberRepository@5552768b member repository bean = hello.core.member.MemoryMemberRepository@5552768b이에 대해 다음과 같은 두 가지 질문이 있습니다.memberRepository는 new를 통해 매번 새롭게 생성하지만 같은 주소를 가지는 이유가 스프링 컨테이너 내부에 빈으로 등록되었기 때문인지 궁금합니다.만약 인스턴스마다 다른 값을 가지고 있어야 하는 경우가 있다면, 필요에 따라 @Bean을 통해 생성 해야 하는건지 궁금합니다. 감사합니다.제가 강의 도중 궁금증이 생겨 확인, 질문했었는데 내용 후반부에 싱글톤과 관련된 설명이 있군요... 머쓱..
-
해결됨김영한의 실전 자바 - 중급 2편
배열의 특징2 - 데이터 추가 에서 질문이요.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 궁금증이 생겨서 질문을 남깁니다.배열로 데이터를 첫 번째 위치에 추가, n 번째 위치에 추가, 마지막 위치에 추가 하는것 을 잘 보았습니다.근데 강의를 들으면서 객체 배열(ex: Integer)이면 어떻게 해야하지 라느 생각을 하게 되었습니다.30개 제한이 있는 객체 배열이 있고값이 20개(0~19) 까지만 담아져 있고, 나머지 값(19~29번째 )은 'null' 이라고 한다면, 마지막의 값(21번째에 넣겟다는 뜻입니다.)은 어떻게 넣지? 라는 생각을 하게 되었습니다.이런 경우 어떻게 해야 하나요?혹 나중 강의에 이런 내용 같은 게 나오나요?(그러면 강의를 통해서 배우면 되니까 안 알켜주셔도 됩니다.)답변 부탁 드립니다.
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
CellSnapshotStatus 새 타입 추가로 인한 CellSignProvider 대응이 필요하다는 걸 컴파일 타임에 알 수 있을까요?
안녕하세요! 강의 잘 듣고 있습니다!그리고 '다형성 활용하기' 챕터에서 enum의 interface 구현에 대해 새롭게 알게 되어 좋았습니다!그런데, 궁금한 점이 생겨 이렇게 문의하게 되었습니다.바로 CellSnapshotStatus enum과 CellSignProvidable 인터페이스를 구현한 CellSignProvider enum 사이의 관계입니다. CellSnapshotStatus에 새로운 타입(e.g. STAR)을 추가하게 되었을 때, 개발자가 CellSignProvider에 대해서도 알고 있어야 CellSignProvider에도 새로운 타입(STAR)에 대한 대응을 할 수 있을 것 같은데요CellSnapshotStatus에 새로운 타입이 추가되면 CellSignProvider에도 이에 대한 대응이 필요하다는 것을 컴파일 타임에 알 수 있는 방법이 있을까요?
-
해결됨유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
유저 인벤토리 Pt.2
InventoryItemDataList에 유저가 보유한 아이템 목록이 저장하고 해당 리스트 객체를 PlayerPrefs로 저장할 때 JSON을 쓰는 이유는 PlayerPrefs에서 int, float, string만 저장할 수 있기 때문에로 이해했는데 맞나요? 그리고 굳이 JSON 이여 할 이유가 있나요? 또 PlayerPrefs에 유저가 접근이 가능하다고 하는데그러면 악의적으로 변형이 가능하지 않나요?이 경우는 어떻게 대비하나요?
-
미해결김영한의 실전 자바 - 중급 1편
StringTokenizer에 대한 개념은 영상에 없을까요
알고리즘 문제풀고있는데 이 개념은 영상에서 본적이없는거가타서요...
-
해결됨오브젝트 - 기초편
영화 예매 예제에서 결합도 문의드립니다.
안녕하세요,좋은 강의 감사합니다. 영화 예매 예제를 보면서 궁금한 점이 있어 질문 드립니다.Screening 객체는 DiscountPolicy, DiscountCondition 내부에서도 참조되어 사용되는 것으로 보입니다. 다수의 객체가 Screening 객체를 참조하고 있기에, Screening 객체의 변경 시 변경의 파급 효과(Ripple effect)가 높아지는 상황으로 이해 됩니다. 즉, 결합도가 높은 상태로 보이는데 맞을까요? DiscountPolicy 객체가 비율 할인 정책과, 금액 할인 정책의 책임을 모두 수행할 경우(낮은 응집도)에는. 비록 Screening Movie 객체가 단일 DiscountPolicy 객체에 의존하고 있더라도 파급 효과가 높은 것으로 이해됩니다. 그렇다면 결합도를 정의하는 척도는 의존성의 개수가 아닌 Ripple effect의 가능성이라고 봐도 될까요? (= 결합도가 높으면 파급 효과의 가능성이 높아진다) 감사합니다.
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
오타 제보입니다.
섹션 13 - 스레드 풀과 Executor 프레임워크1강의 소스코드의 ExecutorBasicMain.java package thread.executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import static thread.executor.ExecutorUtils.*; import static util.MyLogger.log; import static util.ThreadUtils.sleep; public class ExecutorBasicMain { public static void main(String[] args) { ExecutorService es = new ThreadPoolExecutor(2, 2, 0, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>()); log("== 초기 상태 =="); printState(es); es.execute(new RunnableTask("taskA")); es.execute(new RunnableTask("taskB")); es.execute(new RunnableTask("taskC")); es.execute(new RunnableTask("taskD")); log("== 작업 수행 중 =="); printState(es); sleep(3000); log("== 작업 수행 완료 =="); printState(es); es.close(); log("== showdown 완료 =="); printState(es); } } 다른곳들은 다 고쳐져있는 거 같은데, 이 클래스에만 showdown으로 아직 변경이 안되어있습니다.
-
해결됨Readable Code: 읽기 좋은 코드를 작성하는 사고법
정적 팩토리 메서드 of() 컨벤션
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 강의 중 정적 팩토리 메서드를 만드실 때 of()안의 파라미터가 없거나, 한 개 혹은 여러 개 일 때 모두 사용 하신 것 같아요유명 기술 블로그를 보면 https://tecoble.techcourse.co.kr/post/2020-05-26-static-factory-method/여러개의 파라미터를 통해 생성할 때 of를 쓰라고 되어있는데요, 이때 여러개 라는 말은 없거나, 한개 혹은 여러개 모든 경우를 포함하는 말 일까요?실제로 List인터페이스의 경우에서도 구분하지 않고 전부 of를 사용해서 맞는 것 같긴 한데 위의 블로그 표현과는 약간 다른 것 같아서 질문드립니다
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
break 부분이 왜 필요한지 헷갈립니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기서 catch 부분에 break가 왜 필요한건가요?"q" 를 입력하면 printerThread 에 인터럽트를 걸고 while문의 !Thread.interrupted가 false가 되어서 while문을 탈출하는게 아닌가요?아니면 !Thread.interrupted가 false가 되기 전에 먼저 예외를 잡아서 인터럽트가 true에서 false로 먼저 되어서 !Thread.interrupted가 true가 되는건가요?
-
미해결스프링 핵심 원리 - 기본편
중복 등록과 충돌 강의에서 질문있어요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 빌드실행도 Gradle(default)으로 설정했는데 왜 안된는 건가요?
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
ocp를 지키기 위해 enum vs interface
안녕하세요. 테스트 강의부터 좋은 강의 감사합니다.강의를 보던 도중에 궁금한 점이 생겨서 질문드립니다.OCP를 만족하는 GameLevel을 만들기 위해 enum도 비슷한 역할을 할 수 있는데 interface를 사용한 이유가 궁금합니다 !@Getter public enum GameLevel { BEGINNER(...), MIDDLE(...) private final int rowSize; private final int colSize; private final int landMineCount; }enum으로 구현 시 새로운 레벨의 추가가 GameLevel의 변화를 가져오기 때문인지..혹은 이를 구분하는 다른 기준이 있을지 궁금합니다.
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
의도한 예외와 의도하지않은 예외가 정확하게 무슨뜻인가요 ?
우선 강의 잘 듣고있습니다. 의도한 예외와 의도하지 않은 예외가 조금 헷갈리는데 제가 이해한 개념이 맞는지 여쭈어봅니다. 강사님께서 말씀하시는 의도한 예외는 개발자가 인지하고 Exception을 던지는 경우를 말씀하시고 의도하지 않은 예외는 개발자가 인지하지 못하고 Exception이 발생한다는 뜻일까요 ?? 그렇다면 잘짜여진 코드에서는 모두 의도한 예외가 되어야 되는건가요 ?? 의도하지 않은 예외를 사용하는 일은 없는건가요 ? 의도한 예외 - 개발자가 예상하고 처리한 예외의도하지 않은 예외 - 개발자가 놓치거나, 빼먹은 예외의도하지 않은 예외 발생시 의도한 예외로 바꾼다.이렇게 이해하면 될까요 ?
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
안녕하세요 private메소드에 대해서 질문 있습니다.
제가 헷갈려서 질문드려요!private 메소드를 만들게 된다면 무언가 책임이 이상하거나 설계가 잘못되었다는 신호로 알고 있는데요 private static void checkIfGameIsOver() { boolean isAllOpened = isAllCellOpened(); if (isAllOpened) { gameStatus = 1; }}만약 이런 메서드를 테스트 한다고 하면 어떻게 해야하는건가요?! private메소드를 현업에서도 사용하시는지 궁금합니다.그리고 제가 어디를 잘못알고 있는지도 궁금해요!
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
compareAndSet()에 대해 질문 있습니다.
private static int incrementAndGet(AtomicInteger atomicInteger) { int getValue; boolean result; do { getValue = atomicInteger.get(); log("getValue: " + getValue); result = atomicInteger.compareAndSet(getValue, getValue + 1); log("result: " + result); } while (!result); return getValue + 1; }getValue = atomicInteger.get(); 에서 조회한 값이 compareAndSet() 연산을 할때 바뀌지 않아야 바꿀려고 한 값으로 바꾸고 true를 반환한다고 이해했습니다.궁금한 부분은 getValue = atomicInteger.get(); 여기서 값을 조회하거나 중간에 스레드가 바꾼 값을 조회 한다는걸 compareAndSet()에서 구분을 할 수 있나요?
-
미해결김영한의 실전 자바 - 기본편
매개변수로 전달 되는 방식
[질문 내용]soundAnimal , flyAnimal 메서드 같은 경우 bird가 매개변수로 전달될 때 정의된 매개변수 타입에 따라 자동으로 업캐스팅이 된다고 이해하는 것이 맞을까요?
-
미해결김영한의 실전 자바 - 중급 2편
제네릭 메서드
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요. package generic.ex4; // 클래스 옆에 <> 넣으면 제네릭 타입 public class GenericMethod { public static Object objMethod(Object obj) { System.out.println("Object print: " + obj); return obj; } // 메서드 안에 <> 넣으면 제네릭 메서드 public static <T> T genericMethod(T t) { System.out.println("Generic print: " + t); return t; } public static <T extends Number> T numberMethod(T t) { System.out.println("bound print: " + t); return t; } }여기 public static <T> T genericMethod(T t) 코드를 보면 static일 때 사용이 가능한데 강의 자료에서 여기 static일 땐 사용이 불가능하다는 말이 이해가 잘 안 갑니다. 둘의 차이점이 무엇인가요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
CPU와 스레드간 상호작용에 대해 질문 있습니다.
CPU 코어와 메모리가 동작하는 이미지가 자주 나왔는데요헷갈리는 부분이 있어서 질문 합니다.스레드, 프로세스, 메모리 등 여러 개념들이 존재하지만 CPU와 직접적으로 통신(?) 하는 주체는 스레드라고 이해를 해도 될까요?1번이 맞다면 스레드는 본인이 실행한 코드 한줄 한줄을 CPU로 보내고 CPU는 해당 코드 한줄을 해석하고 그에 따라서 프로세스에 할당된 메모리 영역(힙, 데이터, 코드)이나 스레드에 할당된 메모리 영역(스택)에 접근해서 데이터를 읽거나 저장한다 라고 이해를 해도 될까요?Java의 thread는 OS의 kernel thread와 1:1로 mapping 되는걸로 알고 있는데 그러면 CPU는 kernel thread와 통신 한다고 이해하면 될까요?
-
해결됨김영한의 실전 자바 - 중급 2편
getter, setter
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. package generic.animal; public class Animal { private String name; private int size; // 생성자 만들기 // (Alt + Insert) Generate - Constructor public Animal(String name, int size) { this.name = name; this.size = size; } public String getName() { return name; } public int getSize() { return size; } // sound 메서드 public void sound() { System.out.println("동물 울음 소리"); } @Override public String toString() { return "Animal{" + "name='" + name + '\'' + ", size=" + size + '}'; } }이 코드에서 set()은 안 만들고 get()만 만드는 이유는 무엇인가요?
-
미해결김영한의 실전 자바 - 기본편
맴버 변수와 스택 영역 관계
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]맴버 메소드 호출은 은 힙 영역에 생성되지 않고 메소드 영역에서 참조 후 그걸 main 함수에서 불러올 시 스택 영역에 해당 메소드가 쌓이는걸로 이해 했습니다 그럼 힙 영역에 생성되는 맴버 변수의 경우 main 함수에서 불러올 시 스택 영역에 쌓이지 않는지 궁금합니다