묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
동적 의존성 주입과 Volatile
[질문]2024.08.07 까지는 정액할인, 2024.08.08 부터는 비율할인 정책이 반영되어야 하는 비즈니스 로직이 있고, 이를 스케줄러를 활용하여 2024.08.08 00:00:00에 Setter를 활용하여 비율할인을 구현한 Bean을 Injection 하여 처리하도록 구현했다고 가정하면, 이런 경우에도 아주 아주 엄밀하게 00:00:00에 모든 할인 정책이 완벽히 적용되어야 한다면, 인스턴스 변수에 volatile을 반드시 명시해줘야 하는 것인가요? 경험이 미천하여 웹프로그래밍 할 때 volatile를 사용한 것을 거의 보지 못하였고, 위의 가정처럼 아주 엄밀한 동작을 요구하는 경우는 없었고 그간 별다른 일도 없긴 하였는데, 개념을 듣고 복기해보니 장애의 요인이 될 수 있을 것 같아 여쭙습니다.
-
해결됨스프링 핵심 원리 - 기본편
컴포넌트 스캔 필터 옵션과 @SpringBootApplication 어노테이
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.강의 내용 중이런식으로 컴포넌트 스캔 필터 옵션을 @Configuration을 스캔 대상으로 제외 하더라도@SpringBootApplication 이 붙은 CoreApplication을 실행시키면 교안의 AppConfig가 적용되는 것 같은데 이는 @SpringBootApplication 내부에 @ComponentScan이 따로 선언되어 있기 때문이 라고 생각되는데 맞을까요?
-
해결됨자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
안녕하세요 scope function 에 receiver 가 없는 경우
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.아래 처럼 receiver 없이 사용이 가능하더라구요? 근데, apply 시그니처는 분명히 확장함수인데, receiver 를 안주는 경우, SomeTest 클래스의 인스턴스가 receiver 로 되는거 같아요. 아무리 찾아봐도, 이런 동작에 대해서는 공식문서상에 안보이는거 같은데, 왜 이런건지 알 수 있을까요? (레퍼런스도 같이 제공해주시면 저도 한번 보고싶습니다 ㅠㅠ) class SomeTest { @Test fun test() { val found = apply { hello() val user = User("kim") println(user) } } fun hello() { println("hello") } } data class User( val userName: String, )
-
미해결김영한의 실전 자바 - 기본편
다형성에 관련된 질문입니다
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. package poly.ex3.car0; public class CarDrive { private Driver driver; public void setDriver(Driver driver){ //Driver driver = K3car k3 = new k3Car() System.out.println("자동차를 설정합니다 :" + driver); this.driver=driver; } public void drive(){ System.out.println("자동차를 운전합니다"); driver.stop(); driver.move(); driver.engine(); } }public class CarMain { public static void main(String[] args) { CarDrive car=new CarDrive(); K3Car k3=new K3Car(); car.setDriver(k3); car.drive(); Driver porches =new Porche(); car.setDriver(porches); car.drive();main 함수에서 porches는 Driver 타입으로 업케스팅을해서 넘어가고 K3Car는 업케스팅을하지않은상태로 setDriver 함수에 넘어갑니다 그리고 setDriver 함수의 매개변수인 (Driver driver)에서 첫번쨰인 k3는 업케스팅이 이루어지고 Driver driver=new K3Car();두번쨰인 porches 는 이미 업케스팅이 이루어진 Driver 타입 객체이기때문에 그냥 넘어가는것으로 이해했는데 이게 맞는건지 햇갈려서 질문드립니다 그리고 이렇게 미리 두번쨰처럼 업케스팅을해서 매개변수로 넘겨주는것이 올바른접근법인지도 궁금합니다
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
다운로드 소스코드 질문입니다,
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]다운로드 소스코드 실행하는데 사진과 같이 오류가 뜨는데 이미 사용되고 있다던데 왜 이런 오류가 뜨는지 잘모르겠습니다
-
미해결김영한의 실전 자바 - 중급 1편
랜덤함수 질문드립니다.
이렇게 처리했을때 콘솔화면 처럼 숫자가 0이 나오는데 왜그런지 알 수있을까요?아래는 메인 소스입니다.
-
미해결김영한의 실전 자바 - 기본편
객체지향프로그래밍 문제1번 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]return this.width == this.height <--- 이부분에만 this가 있는 이유가 궁금합니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
6. synchronized 문제 1 log출력
public static void main(String[] args) throws InterruptedException { Counter counter = new Counter(); Runnable task = new Runnable() { @Override public void run() { for (int i = 0; i < 10000; i++) { counter.increment(); log(counter.getCount()); // 로그 출력 추가!!!!!!!!!!!!!!! } } }; Thread thread1 = new Thread(task); Thread thread2 = new Thread(task); thread1.start(); thread2.start(); thread1.join(); thread2.join(); log(counter.getCount()); } static class Counter { private int count; public void increment() { count++; } public int getCount() { return count; } } 문제를 푸는 도중 count의 값을 확인해보고 싶어서 MyLogger.log(counter.getCount());를 호출했더니 문제 없이 20000이 계속 출력됩니다.synchronized를 사용하지 않아서 여전히 동시성 문제는 발생할텐데 어떻게 20000이라는 값이 나오게 되는지 궁금합니다!!
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
Runnable 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]https://javatrainingschool.com/multithreading/thread-lifecycle/위 링크에서는 Runnable과 Running 상태를 분리하는데 혹시 두개의 차이가 있나요?
-
미해결김영한의 실전 자바 - 중급 1편
안녕하세요 프로젝트 설정 관련해서 문의남깁니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 다름이 아니라 강의를 보며 코드를 작성하며 수업을 따라가고 싶은데 제공된 소스코드를 import 하지 않으면 수업을 따라가는데 힘들까요?
-
미해결김영한의 실전 자바 - 중급 2편
해당 코드는 삽입정렬인가요?
package collection.compare; import java.util.Arrays; import java.util.Comparator; public class SortMain2 { public static void main(String[] args) { Integer[] array = {3, 2, 1}; System.out.println(Arrays.toString(array)); System.out.println("Comparator 비교"); Arrays.sort(array, new AscComparator()); System.out.println("AscComparator: " + Arrays.toString(array)); } static class AscComparator implements Comparator<Integer> { @Override public int compare(Integer o1, Integer o2) { System.out.println("o1=" + o1 + " o2=" + o2); return (o1 < o2) ? -1 : ((o1 == o2) ? 0 : 1) ; } } }이 코드는 삽입정렬이 사용되어 배열의 첫 번째 요소가 정렬된 것으로 간주하고 시작하는게 맞을까요...?o1=2 o2=3o1=1 o2=2이렇게 두 단계만 거치는 이유와 o1, o2를 잡는 기준을 잘 모르겠습니다...
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
자바 14 새로운 switch문 관련하여 default 주석처리 하여도 에러가 나지않음. 괜찮은건지 여쭤봅니다!
스위치문(*) 문제풀이 과정에서 선생님께서 아래와같이 진행하셧습니다.*김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음, 섹션 4. 조건문, switch문 관련 건해당 문제를 자바 14 새로운 switch문 관련하여 알려주신 내용이 있어 그 방법으로도 풀어봐야겠다 싶어, 진행해 보았는데요. 아래와같이 default 를 지워도 값이 나오지 않을뿐이지 에러메시지가 출력되진 않더라구요?해당사항이 없으면 에러가 날거같은데 그렇지않아서 제가 자바 14 새로운 switch문 관련하여 문제를 잘못푼것인지 무언가를 놓친게 있는것인지 궁금하여 여쭤봅니다.감사합니다!!
-
미해결스프링 핵심 원리 - 기본편
instanceOf 질문
형관팬 칠해진 부분에서 MemberService.class가 아니라 MemberServiceImpl.class가 와야 맞는거 아닌가요?? instanceOf(인터페이스) 형태인건데 ->MemberService(클래스)로 바뀌어야 하는게 아닌가 해서요
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
이 강의를 수강하기 전, 수강 후 학습 질문입니다.
안녕하세요 우빈님 테스트 코드 강의도 정말 열심히 듣고 많은 것을 배워서 항상 감사하고있습니다!이번에 새로 나온 강의 관련해서 전과 후 어떤 학습을 진행하면 좋을 지 궁금합니다. 추천해주실 책이나 강의가 있을까요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
스레드 대기 집합 질문
여기에서 스래드 대기 집합은 WAITING, TIMED_WAITING, BLOCKED가 보관되는 곳과는 다른 큐를 의미하는게 맞을까요?
-
해결됨김영한의 실전 자바 - 중급 2편
교안에 잘못된 부분이 있는 것 같습니다
컬렉션 프레임워크 / Collections 정렬 관련 메서드 에서reverse 메소드에 대한 설명이 "정렬 기준의 반대"로 컬렉션을 정렬한다고 되어있는데단순히 reverse메소드는 현재 컬렉션이 정렬되어 있는 것을 뒤집어 주는 메소드 인 것 같습니다
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
Blocked 되지 않는 문제
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]쓰레드의 동시성이슈를 syncronized로 해결하였을때로그를 보면, 00:53:11.012 [ t1] 거래 시작: BankAccountV300:53:11.012 [ t2] 거래 시작: BankAccountV300:53:11.020 [ t1] [검증 시작] 출금액: 800, 잔액: 100000:53:11.021 [ t1] [검증 완료] 출금액:800, 잔액: 100000:53:11.489 [ main] t1 state: TIMED_WAITING00:53:11.490 [ main] t2 state: TIMED_WAITING00:53:12.021 [ t1] [출금 완료] 출금액:800, 잔액: 20000:53:12.021 [ t1] 거래 종료00:53:12.021 [ t2] [검증 시작] 출금액: 800, 잔액: 20000:53:12.022 [ t2] [검증 실패]00:53:12.024 [ main] 최종 잔액: 200이런식으로 t1, t2 두 쓰레드중 하나가 blocked 되는 것이 아니라 모두 time_waiting상태로 유지 됩니다.뭔가 느낌으로는 큰 상관은 없을 것 같고, 시스템 환경에 따른 차이인 거 같은데, 혹시나 제가 세팅을 잘못했거나 코드를 잘못 짰을 가능성도 있을까요.## 메인 클래스를 반복해서 실행해보니t1, t2 스레드 모두 time waiting 상태이거나 모두 blocked 상태가 됩니다.
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
ScannerWhileEx3
왼쪽화면: 강의영상 / 오른쪽: 제 코드 강사님이 하셨을 땐 엔터로 여러 숫자들 입력하고 그 숫자들의 합과 평균을 입력할 수 있는데, 저는 똑같이 쳐도 숫자를 한개씩만 입력할 수 있어요..제 코드는 package scanner; import java.util.Scanner; public class ScannerWhile3 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int sum = 0; int count = 0; int input = 0; System.out.println("숫자를 입력하세요. 입력을 중단하려면 -1을 입력하세요: "); while(true){ input = sc.nextInt(); if(input == -1){D break; } sum += input; count++; double average = (double) sum / count; System.out.println("입력한 숫자들의 합계: " + sum); System.out.println("입력한 숫자들의 평균: " + average); } } }이와 같은데 무엇이 강사님과 다른지 모르겠습니다!
-
미해결김영한의 실전 자바 - 중급 2편
remove 메소드 관련 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]데이터를 삭제하는 기능에서 removeNode를 null값으로 처리하는 이유가 있을까요?removeNode를 더 이상 사용되지 않는 것 같은데, 해당 노드의 item과 next를 null값으로 처리해야만 GC 대상이 되는건가요? null값으로 명시하지 않아도 될 것 같아 질문드립니다. // 추가 코드 public Object remove(int index) { Node removeNode = getNode(index); Object removedItem = removeNode.item; if (index == 0) { first = removeNode.next; } else { Node prev = getNode(index - 1); prev.next = removeNode.next; } removeNode.item = null; removeNode.next = null; size--; return removedItem; }
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
원자적 연산을 확실히 알수 있는 방법이 있나요?
i++ 은 1줄이지만 , 2~3개의 cpu 연산이 필요하므로 원자적 연산이 아닙니다.cas 도 상식적으로는 2개 이상의 cpu 연산이 필요한데 cpu 차원에서 1개의 cpu 연산처럼 제공해주기에, 원자적 연산이라고 보는것 같습니다.아래와 같은 경우 원자적연산인데,int count = 3; 그렇다면 아래의 코드는 원자적연산인가? 생각해보면, max 값을 가져오고 그걸 대입해야 하므로 2개 이상 cpu 연산이 필요한것 같은데 확신은 들지 않습니다.int count = max; --그래서... 어디까지가 원자적 연산인지 확실히 알수 있는 방법이나 이와 관련된 스펙문서 등이 있는지 궁금합니다.