DEEP DIVE : 싱글톤 패턴을 구현하는 7가지 방법 #2 ★★☆ 강의 volatile 설명에서 알려주신 자바 코드와 동일하게 Kotlin 코드를 작성했습니다. class Test2 { private var flag = true fun test() { Thread { var cnt = 0 while (flag) { cnt++ Thread.sleep(100) println(cnt) } println("Thread1 finished") }.start() Thread { Thread.sleep(100) println("flag to false") flag = false }.start() } } 이 코드를 실행하면, flag가 바뀌는 즉시 첫 번째 쓰레드가 멈춥니다. 이유가 궁금해서 자바로 디컴파일된 코드를 확인해봤고, Thread1에서 flag를 확인할 때 Test2.this.flag와 같이 접근하는 것을 발견했습니다. ClassName.this 가 무엇인지 궁금합니다. 자바의 정석 책에 해당 내용은 없고, 구글에 검색해봤는데, 유의미한 답변으로 아래 글만 발견했습니다. Within an instance method or a constructor, this is a reference to the current objec t — the object whose method or constructor is being called. You can refer to any member of the current object from within an instance method or a constructor by using this. https://stackoverflow.com/questions/4080868/using-this-with-class-name/46091971#46091971
https://drive.google.com/drive/folders/1unulH1E9G7a--c4InEpy_4NwIEKrvH4b?usp=sharing 회원가입 로직 테스트 오류가 납니다. 필요:hello.demo.domain.Member@f48a080 실제 :hello.demo.domain.Member@1d3a03fe <클릭하여 차이점 확인> org.opentest4j.AssertionFailedError: expected: hello.demo.domain.Member@f48a080 but was: hello.demo.domain.Member@1d3a03fe at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
build.gradle에 웹 라이브러리 추가하고 dependencies { implementation 'org.springframework.boot:spring-boot-starter' implementation 'jakarta.inject:jakarta.inject-api:2.0.1' //web 라이브러리 추가 implementation 'org.springframework.boot:spring-boot-starter-web' CoreApplicaton을 돌렸더니, 아래와 같은 오류 메세지가 뜹니다. 대충 어떤 오류인지는 알겠는데.....어떻게 찾아서 고쳐야 할지는 모르겠네요? Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. Parameter 0 of constructor in hello.core.member.MemberServiceImpl required a single bean, but 2 were found: - memoryMemberRepository: defined in file [C:\SpringBoot\core\out\production\classes\hello\core\member\MemoryMemberRepository.class] - memberRepository: defined by method 'memberRepository' in class path resource [hello/core/AppConfig.class] This may be due to missing parameter name information Action: Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed Ensure that your compiler is configured to use the '-parameters' flag. You may need to update both your build tool settings as well as your IDE.
DEEP DIVE : 싱글톤 패턴을 구현하는 7가지 방법 #2 ★★☆ 챕터에서 5. 정적 멤버와 Lazy Holder(중첩 클래스)를 이용한 방법으로 아래 코드를 설명해주셨는데요 public class Singleton { private static class singleInstanceHolder { private static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return singleInstanceHolder.INSTANCE; } } 생성자를 private으로 막지 않으면 싱글턴 인스턴스를 만든 이유가 없지 않나요? 싱글턴이 필요하지 않을 때는 생성자 호출로 생성한 후, 더 이상 쓰지 않을 때 GC가 회수하게 하다, 싱글턴이 필요한 순간에 생성하는 건가요? public class Main { public static void main(String[] args) { Singleton instance = new Singleton(); // 싱글턴이 필요하지 않으면 직접 호출하기 Singleton singleton1 = Singleton.getInstance(); // 싱글턴이 필요한 순간에 싱글턴 객체 생성하기? } }
http://boj.kr/3508e81686454e2ea04b64d2c4a3ba94 풀이법과 조금 다르지만 같은 원리로 풀었습니다 그런데 http://boj.kr/9f02c3d4d7b14d9eb585cb7dabfc6d2a 이건 두번째로 생각해본 풀이인데 이 코드는 틀렸다고 나옵니다. 두 코드의 차이점은 매개변수 y (지수부분)가 홀수일 때 첫번째 코드는 go(y-1) , go(1) 을 해서 한쪽부분을 짝수로 만들어준 것이고 두번째 코드는 go(y/2) ,go(y/2) ,go(1) 로 2로 나눠주면서 홀수라서 남는 부분을 곱해주는 방식입니다. 모듈러 공식이 (a * b) % c = ((a%c) *(a%c))%c 라고 하면 (a*b*c)%c 도 같이 적용되어야 하는게 아닌가 싶어서 질문드렸습니다!
#include <stdio.h> int main() { //freopen("input.txt","rt",stdin); int n,abs,left,right,res=1; scanf("%d",&n); int a[n]={0,}; scanf("%d",&left); for(int i=1;i<n;i++){ scanf("%d", &right); abs=(right-left>0)?right-left:left-right; a[abs]=1; left=right; } for(int i=1;i<n;i++){ if(a[i]!=1) res=0; } if(res==1){ printf("YES\n"); } else{ printf("NO\n"); } return 0; } 강의 듣기 전 스스로 짠 코드입니다. 채점결과 마지막 케이스만 이렇게 출력되는데 다섯번째 파일만 따로 돌려봐도 에러없이 종료되어서 원인을 잘 모르겠습니다ㅠㅠ
[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
안녕하십니까. 강의 잘 듣고 있습니다 🙂 다름이아니라 궁금한 점이 있어 문의를 드리게 되었습니다. token 계열은 접근시 token 그 자체를 사용하기 때문에 DB 조회가 없어 장점이 있는 로그인 방식이라 생각이 드는데요. 1) 강의에서 처럼 access token 을 이용하여 항상 db에서 사용자 데이터를 조회해 온다면 그런 장점이 사라지지 않을까요? 2) 또한 부하가 많이 걸리지 않을까요?
home.html 내 messages() JS함수 안에보면 $.ajax 호출시 type이 post로 되어있던데요. MessageController.java 내에서는 @GetMapping에 @ResponseBody 던데요. 요거 호출시 get으로 맞져? 영상엔 post로 나오네요. post라면 form이 있어야 하는데요. 테스트 목적은 message ok 만 찍히는거 테스트 하는거구요.
섹션4 6번강의까지 잘 따라왔습니다. 혹시 제가 잘못 본게 있을까 해서 3번 강의를 들었지만 안되네요. 강의 내용 그대로 코딩했습니다. 머가 문제일까요? 500에러면 문법에러인건데요. html내 meta위치가 문제인가여? 강의중에 특정파일 내 html meta가 중첩된것도 보입니다. _csrf값이 undefined나 null일 경우도 에러가 생기는것도 같네요. 강사님 답변좀 부탁드립니다.
import java.util.Scanner; public class Main { public String solutions(int target, int[] high) { String answer = ""; for (int i = 0; i < target; i++) { if (answer.isEmpty()) { answer += high[i]+" "; } else if (high[i]>high[i-1]) { answer += high[i]+" "; } } return answer; } public static void main(String[] args) { Main t = new Main(); Scanner sc = new Scanner(System.in); int target = sc.nextInt(); int[] high = new int[target]; for (int i = 0; i < target; i++) { high[i] = sc.nextInt(); } System.out.println(t.solutions(target, high)); } } 강의 보기전에 혼자 이렇게 해봤는데 채점 정답처리는 받았습니다. 혹시 문제가 없을까요?
개발자들이 작업해야한다고 말씀하신 "검색 결과" 예시에서, 제 생각에는 웹 개발자들이 하지 않고도, search result 페이지 진입 시(트리거)에 태그 발동하게끔 하면 GTM 설정만으로도 가능하지 않나요? -> 강의 끝까지 들어보니, 결국 3가지 이벤트를 정의하시네요. 😁 앱의 경우는, 대부분 개발자들이 이벤트를 쏴줘야한다고 하셨는데, 이 강의에서 주로 다루지 않지만, GTM Guide 에는 앱에 대한 설정도 있더라구요. 혹시 앱도 GTM 연동하는 경우 장점이 별로 없을까요? 바로 GA4 로 이벤트 푸시하는게 나은건지 해서 여쭤봅니다. 항상 감사합니다 😃
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? ( 예 /아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? ( 예 /아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? ( 예 /아니오) [질문 내용] 해당 강의에서 섹션 8 부분 ( 빈 생명 주기 콜백 시작 ~ 애노테이션 @PostConstruct, @PreDestroy)를 수강하던 중에 궁금한 점이 생겼습니다. Q. 생성자 주입 방식에서 Setter 메소드 주입 방식으로 코드를 변경 했을 때 강사님께서 말씀하셨던 스프링 빈의 이벤트 라이프 사이클 과 실제 프로그램 실행 과정이 일치하는지 확인해보았는데 일치하지 않는 것 같아서 관련 내용 문의 드립니다. ( 실제 강의에서는 setter 방식으로 변경하는 내용은 나오지 않았습니다. setter 메소드 주입으로 바꿨을 때 실제 라이프 사이클이 어떻게 돌아가는지 궁금해서 제가 임의로 코드 변경하였습니다.. 혹시 이런 질문이 안된다면 글 삭제하겠습니다 ㅠㅠ 참고로 setter 로 변경한 코드는 댓글에 남겨두었습니다.) [강사님께서 말씀하셨던 스프링 빈의 이벤트 라이프 사이클] 스프링 컨테이너 생성 → 스프링 빈 생성 → 의존 관계 주입 → 초기화 콜백 → 사용 → 소멸 전 콜백 → 스프링 종료 [생성자 -> setter 로 변경 후 실행했을 때 결과값] 의존 관계 주입 되기 전에 초기화 콜백이 먼저 호출되는데 그러면 이벤트 라이프 사이클을 벗어나는 내용 아닌가요? 혹시 제가 setter 로 주입하는 코드를 제대로 구현하지 못해서 이런 일이 발생한 것일까요?ㅠㅠ ( + 사실 setter 방식일 때 의존 관계가 주입되는 시점이 정확히 어떤 부분인지에 대해서도 제대로 이해를 못한 것 같습니다. )